Web基础了解版04-XML-Tomcat

Posted open-ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web基础了解版04-XML-Tomcat相关的知识,希望对你有一定的参考价值。

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等。

 打开:解压目录confserver.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地址直接访问的。

部署/移除Web项目

右键点击刚创建好的Tomcat服务器,选择Add and Remove …

技术图片

将左边的项目 add 到右边,即为部署:

将右边的项目remove到左边,即为移除:

技术图片

部署或移除web项目以后,需要重启服务器

部署Web项目的原理

  • 当我们使用Eclipse将项目部署到Tomcat中时,我们发现,在Tomcat下的webapps目录下并没有我们创建好的项目,但是当通过Eclipse启动服务器后,项目却真的可以访问到,这是为什么呢?

  • 实际上,Eclipse在使用Tomcat时,并没有将项目部署到Tomcat的目录下,而是在其工作空间中,创建了一个Tomcat的镜像,Eclipse启动的Tomcat是他自己配置的镜像。

  • Eclipse镜像所在目录:你的工作空间目录.metadata.pluginsorg.eclipse.wst.server.core mp0

    (重启Tomcat以后,双击Servers-TOmcat v7.0即会看到部署好的web工程存在的默认位置。)

或者通过如下的方式,也可以直接找到部署的位置:

技术图片

技术图片

  • 在这个目录下,我们会发现一个和Tomcat安装目录几乎一模一样的目录结构。

  • 在这里Eclipse中Tomcat镜像配置文件也是独立的,而我们所创建的项目是部署到wtpwebapps目录下的,这样做的好处是Eclipse中Tomcat和我们本机的Tomcat可以保持相互独立,不会影响彼此。但是千万注意,此时千万不要试图删除原有的Tomcat目录结构或移动位置。

总结:启动服务器以后,我们的web项目会部署到服务器目录的wtpwebapps文件夹的目录下。index.jsp也是直接声明在此项目目录下的。

以上是关于Web基础了解版04-XML-Tomcat的主要内容,如果未能解决你的问题,请参考以下文章

[vscode]--HTML代码片段(基础版,reactvuejquery)

Web基础了解版05-Servlet

Web基础了解版12-上传下载

Web基础了解版11-Ajax-JSON

为啥我的 C 代码片段不起作用?简化版可以。为 unsigned long long 传递不带 VA_ARGS 的 args

了解原型设计工具:墨刀