XML
什么是XML-Tomcat
- XML:eXtensible Markup Language (可扩展标记语言)。
- XML 是一种标记语言,很类似 HTML。
- XML 的设计宗旨是传输数据,而非显示数据。
- XML的使命,就是以一个统一的格式,组织有关系的数据。为不同平台下的应用程序服务,独立于软件和硬件的信息传输工具。
- XML 仅仅是纯文本。有能力处理纯文本的软件都可以处理 XML。不过,能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。
XML相较于HTML,语法更加严格。
XML用途
- 配置文件
- 数据交换格式
- 数据存储
基本语法
文档声明
- version属性指定XML版本,固定值是1.0。
- 必须在文件的第一行书写文档声明。
- encoding指定的字符集,是告诉解析器使用什么字符集进行解码,而编码是由文本编辑器决定的
- 通常的写法:<?xml version="1.0" encoding="utf-8" ?>
- 这样就要求保存文件时,必须用utf-8编码保存。此时要求XML文档的作者确认当前编辑器保存文档的编码方式。
语法规则
① XML声明要么不写,要写就写在第一行,并且前面没有任何其他字符,并且必须严格遵循语法
② 只能有一个根标签,所有的其他标签都必须声明在根标签内部
③ 标签必须正确结束,不能交叉嵌套
⑤ 严格区分大小写
⑥ 开始标签中,可以自定义添加属性。但,如果有属性就必须有值,且必须加引号
⑦ 标签不能以数字开头
⑧ 注释不能嵌套, 注释采用:<!--注释-->
⑨ XML中可以使用HTML中的转义字符
XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,请使用转义字符
CDATA区
- 当XML文档中需要写一些程序代码、SQL语句或其他不希望XML解析器进行解析的内容时,就可以写在CDATA区中
- XML解析器会将CDATA区中的内容原封不动的输出
- CDATA区的定义格式:<![CDATA[…]]>
处理指令
① 处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
② 处理指令必须以 <? 作为开头,以 ?> 作为结尾,XML声明语句就是最常见的一种处理指令。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用xsl文件显示xml文档内容。
<?xml-stylesheet type="text/css" href="p.xsl"?>
③ XSL对于XML来说就相当于CSS对HTML一样,XSL是XML的文件样式。
XSL 指扩展样式表语言(EXtensible Stylesheet Language)。
XML解析
- XML解析是指通过解析器读取XML文档,解释语法,并将文档转化成对象
- 对XML的一切操作都是由解析开始的,所以解析非常重要。
dom4j
- dom4j是一个简单、灵活的开放源代码的库。
- Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
- dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件都采用dom4j,例如Hibernate。
- 使用dom4j开发,需导入dom4j相应的jar包dom4j-1.6.1.jar。所以使用第一步:导包!
- Dom4j解析步骤
//1、创建解析器对象 SAXReader reader = new SAXReader(); //2、使用解析器将xml文件转换为内存中的document对象 Document document = reader.read("teachers.xml"); //相对在项目根路径下查找xml文件 //3、通过文档对象可以获取文档的根标签 Element rootElement = document.getRootElement(); //4、根据根标签获取所有的根标签的子标签集合 List<Element> elements = rootElement.elements(); //5、遍历集合中的标签,并将所有的数据解析出来 for (Element element : elements) { //每次遍历就代表一个teacher信息 System.out.println("正在遍历的标签名:"+element.getName()); System.out.println("正在遍历标签的id属性值:"+element.attributeValue("id")); //获取teacher的子标签的内容 String tname = element.elementText("tname"); System.out.println("tname:"+tname); String age = element.elementText("tage"); System.out.println("tage:"+age);}
修改
//添加一个新的student节点 Element newEle = rootElement.addElement("teacher"); //创建一个良好的xml格式 OutputFormat format = OutputFormat.createPrettyPrint(); //写入文件 XMLWriter xmlWriter = new XMLWriter(new FileWriter("teachers.xml"),format); xmlWriter.write(document); xmlWriter.close();
新建
//1.创建文档 Document document = DocumentHelper.createDocument(); //2.添加根元素 Element root = document.addElement("teachers"); //3.添加元素节点 Element tcEle = root.addElement("teacher"); Element tcEle2 = root.addElement("teacher");
XPath
- XPath 是在 XML 文档中查找信息的语言,类似于jQuery选择器。
- XPath通过元素和属性进行查找,简化了Dom4j查找节点的过程
语法 | 说明 |
---|---|
/AAA | 选择根元素AAA |
/AAA/CCC | 选择AAA下的所有CCC子元素 |
/AAA/DDD/BBB | 选择AAA的子元素DDD的所有BBB子元素 |
//BBB | 选择所有BBB元素 |
//DDD/BBB | 选择所有父元素是DDD的BBB元素 |
/AAA/CCC/DDD/* | 选择所有路径依附于/AAA/CCC/DDD的元素 |
/*/*/*/BBB | 选择所有的有3个祖先元素的BBB元素 |
//* | 选择所有元素 |
/AAA/BBB[1] | 选择AAA的第一个BBB子元素 |
/AAA/BBB[last()] | 选择AAA的最后一个BBB子元素 |
//@id | 选择所有元素的id属性 |
//BBB[@id] | 选择有id属性的BBB元素 |
//BBB[@name] | 选择有name属性的BBB元素 |
//BBB[@*] | 选择有任意属性的BBB元素 |
//BBB[not(@*)] | 选择没有属性的BBB元素 |
//BBB[@id=‘b1‘] | 选择含有属性id且其值为‘b1‘的BBB元素 |
//BBB[@name=‘bbb‘] | 选择含有属性name且其值为‘bbb‘的BBB元素 |
使用
① 导包:jaxen-1.1-beta-6.jar
② dom4j怎么做就怎么做。只是在查找元素的时候可以使用xpath了
③ 获取所有符合条件的节点
- document.selectNodes(String xpathExpression) :返回List集合
- 举例:document.selectNodes("/students/student")
- document.selectSingleNode(String xpathExpression) :获取符合条件的单个节点。即一个Node对象。如果符合条件的节点有多个,那么返回第一个。
- 举例:document.selectSingleNode("/students/student[@id=‘1‘]")
Tomcat
Tomcat下载
- Tomcat官方网站:http://tomcat.apache.org/
- 安装版:需要安装,一般不考虑使用。
- 解压版: 直接解压缩使用,我们使用的版本。
- 因为tomcat服务器软件需要使用java环境,所以需要正确配置JAVA_HOME。
安装
解压apache-tomcat-7.0.79-windows-x64.zip到非中文无空格目录中
- bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出GUI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
- conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
- server.xml:配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是:8080
- tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
- web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
- context.xml:对所有应用的统一配置,通常我们不会去配置它。
- lib:Tomcat的类库,里面是一大堆jar文件。
- logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
- temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
- webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目。其中ROOT是一个特殊的默认项目
- work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的,可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
- LICENSE:许可证。
- NOTICE:说明文件。
启动
在命令行中运行catalina run或者 Tomcat解压目录下双击startup.bat 启动Tomcat服务器,在浏览器地址栏访问地址进行测试http://localhost:8080
如果启动失败,查看如下的情况:
情况一:如果双击startup.bat后窗口一闪而过,请查看JAVA_HOME是否配置正确。
startup.bat会调用catalina.bat,而catalina.bat会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以我们必须在启动Tomcat之前把JAVA_HOME配置正确。
情况二:如果启动失败,提示端口号被占用,则将默认的8080端口修改为其他未使用的值,例如8989等。
打开:解压目录\conf\server.xml,找到第一个Connector标签,修改port属性
web服务器在启动时,实际上是监听了本机上的一个端口,当有客户端向该端口发送请求时,web服务器就会处理请求。但是如果不是向其所监听的端口发送请求,web服务器不会做任何响应。例如:Tomcat启动监听了8989端口,而访问的地址是http://localhost:8080,将不能正常访问。
在Eclipse中创建Tomcat镜像
① 在Servers视窗里点击超链接或在空白处右键→New
②选择对应的安装版本,点next
注意1:关联Tomcat镜像时,Eclipse会从本地Tomcat中复制信息及文件(如下图),之后二者的配置信息就没有关系了,其中任何一个的配置信息发生变化都不会自动同步到另外一个。所以,如果修改端口号的话,需要Tomcat目录中和Eclipse的镜像文件中都要修改端口号才可以。
注意2:Tomcat服务器在Eclipse中启动以后,在浏览器中访问:http://localhost:8080会发现访问失败。因为此时在Eclipse中启动的webapps目录与之前方式访问使用的webapps目录不一致。
动态Web工程部署
项目目录结构说明
- src:存放Java源代码的目录。
- Libraries:存放的是Tomcat及JRE中的jar包。
- build:自动编译.java文件的目录。
- WebContent:存放的是需要部署到服务器的文件
- META-INF:是存放工程自身相关的一些信息,元文件信息,通常由开发工具和环境自动生成。
- MANIFEST.MF:配置清单文件
- WEB-INF:这个目录下的文件,是不能被客户端直接访问的。
- lib:用于存放该工程用到的库。粘贴过来以后,不再需要build path
- web.xml:web工程的配置文件,完成用户请求的逻辑名称到真正的servlet类的映射。
- classes:存放Java字节码文件的目录。
凡是客户端能访问的资源(*.html或 *.jpg)必须跟WEB-INF在同一目录,即放在Web根目录下的资源,从客户端是可以通过URL地址直接访问的。
- META-INF:是存放工程自身相关的一些信息,元文件信息,通常由开发工具和环境自动生成。
部署/移除Web项目
右键点击刚创建好的Tomcat服务器,选择Add and Remove …
将左边的项目 add 到右边,即为部署:
将右边的项目remove到左边,即为移除:
部署或移除web项目以后,需要重启服务器
部署Web项目的原理
- 当我们使用Eclipse将项目部署到Tomcat中时,我们发现,在Tomcat下的webapps目录下并没有我们创建好的项目,但是当通过Eclipse启动服务器后,项目却真的可以访问到,这是为什么呢?
- 实际上,Eclipse在使用Tomcat时,并没有将项目部署到Tomcat的目录下,而是在其工作空间中,创建了一个Tomcat的镜像,Eclipse启动的Tomcat是他自己配置的镜像。
- Eclipse镜像所在目录:你的工作空间目录.metadata.plugins\org.eclipse.wst.server.core\tmp0
(重启Tomcat以后,双击Servers-TOmcat v7.0即会看到部署好的web工程存在的默认位置。)
或者通过如下的方式,也可以直接找到部署的位置:
- 在这个目录下,我们会发现一个和Tomcat安装目录几乎一模一样的目录结构。
- 在这里Eclipse中Tomcat镜像配置文件也是独立的,而我们所创建的项目是部署到wtpwebapps目录下的,这样做的好处是Eclipse中Tomcat和我们本机的Tomcat可以保持相互独立,不会影响彼此。但是千万注意,此时千万不要试图删除原有的Tomcat目录结构或移动位置。
总结:启动服务器以后,我们的web项目会部署到服务器目录的wtpwebapps文件夹的目录下。index.jsp也是直接声明在此项目目录下的。
原文地址:https://www.cnblogs.com/Open-ing/p/12061720.html