欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Web基础了解版04-XML-Tomcat-Http

程序员文章站 2023-03-26 19:46:23
XML 什么是XML - Tomcat - Http XML:eXtensible Markup Language (可扩展标记语言)。 XML 是一种标记语言,很类似 HTML。 XML 的设计宗旨是传输数据,而非显示数据。 XML的使命,就是以一个统一的格式,组织有关系的数据。为不同平台下的应用 ......

xml

 

什么是xml - tomcat - http

  • xml:extensible markup language (可扩展标记语言)。
  • xml 是一种标记语言,很类似 html。

  • xml 的设计宗旨是传输数据,而非显示数据。

  • xml的使命,就是以一个统一的格式,组织有关系的数据。为不同平台下的应用程序服务,独立于软件和硬件的信息传输工具。

  • xml 仅仅是纯文本。有能力处理纯文本的软件都可以处理 xml。不过,能够读懂 xml 的应用程序可以有针对性地处理 xml 的标签。

xml相较于html,语法更加严格。

xml用途

  • 配置文件
  • 数据交换格式
  • 数据存储

基本语法

Web基础了解版04-XML-Tomcat-Http

文档声明

  • 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[…]]>

Web基础了解版04-XML-Tomcat-Http

处理指令

① 处理指令,简称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的一切操作都是由解析开始的,所以解析非常重要。

Web基础了解版04-XML-Tomcat-Http

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官方网站:

  • 安装版:需要安装,一般不考虑使用。

  • 解压版: 直接解压缩使用,我们使用的版本。

  • 因为tomcat服务器软件需要使用java环境,所以需要正确配置java_home。

安装

解压apache-tomcat-7.0.79-windows-x64.zip到非中文无空格目录中

Web基础了解版04-XML-Tomcat-Http

  • 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服务器,在浏览器地址栏访问地址进行测试

如果启动失败,查看如下的情况:

情况一:如果双击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基础了解版04-XML-Tomcat-Http

web服务器在启动时,实际上是监听了本机上的一个端口,当有客户端向该端口发送请求时,web服务器就会处理请求。但是如果不是向其所监听的端口发送请求,web服务器不会做任何响应。例如:tomcat启动监听了8989端口,而访问的地址是,将不能正常访问。

在eclipse中创建tomcat镜像

① 在servers视窗里点击超链接或在空白处右键→new

Web基础了解版04-XML-Tomcat-Http

②选择对应的安装版本,点next

Web基础了解版04-XML-Tomcat-Http

注意1:关联tomcat镜像时,eclipse会从本地tomcat中复制信息及文件(如下图),之后二者的配置信息就没有关系了,其中任何一个的配置信息发生变化都不会自动同步到另外一个。所以,如果修改端口号的话,需要tomcat目录中和eclipse的镜像文件中都要修改端口号才可以。

Web基础了解版04-XML-Tomcat-Http

注意2:tomcat服务器在eclipse中启动以后,在浏览器中访问:http://localhost:8080会发现访问失败。因为此时在eclipse中启动的webapps目录与之前方式访问使用的webapps目录不一致。

Web基础了解版04-XML-Tomcat-Http

动态web工程部署

Web基础了解版04-XML-Tomcat-Http

Web基础了解版04-XML-Tomcat-Http

项目目录结构说明

  • 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 …

Web基础了解版04-XML-Tomcat-Http

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

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

Web基础了解版04-XML-Tomcat-Http

部署或移除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工程存在的默认位置。)

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

Web基础了解版04-XML-Tomcat-Http

Web基础了解版04-XML-Tomcat-Http

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

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

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

http

  •  http 超文本传输协议 (http-hypertext transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
  • 客户端与服务端通信时传输的内容我们称之为报文http协议就是规定报文的格式。

  • http就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。

 浏览器与服务器之间的通信过程要经历四个步骤

 Web基础了解版04-XML-Tomcat-Http

  • 浏览器与web服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与web服务器都要建立一次单独的连接。

  • 浏览器到web服务器之间的所有通讯都是完全独立分开的请求和响应对。

报文

  • 请求报文:浏览器发给服务器

  • 响应报文:服务器发回给浏览器

 Web基础了解版04-XML-Tomcat-Http

请求报文

get请求

 1、由于请求参数在请求首行中已经携带了,所以没有请求体,也没有请求空行

2、请求参数拼接在url地址中,地址栏可见[url?name1=value1&name2=value2],不安全

3、由于参数在地址栏中携带,所以有大小限制[地址栏数据大小一般限制为4k],只能携带纯文本

4、get请求参数只能上传文本数据

5、没有请求体。所以封装和解析都快,效率高, 浏览器默认提交的请求都是get请求[比如:① 地址栏输入url地址回车,②点击超链接a , ③ form表单默认方式...]

请求头

host: localhost:8080   主机虚拟地址
connection: keep-alive 长连接
upgrade-insecure-requests: 1  请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
user-agent: mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/68.0.3440.75 safari/537.36
- 用户系统信息
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- 浏览器支持的文件类型
referer: http://localhost:8080/05_web_tomcat/login.html
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:   可以通过此路径跳转回上一个页面, 广告计费,防止盗链
accept-encoding: gzip, deflate, br
- 浏览器支持的压缩格式
accept-language: zh-cn,zh;q=0.9,en-us;q=0.8,en;q=0.7
- 浏览器支持的语言

post请求

 post请求要求将form标签的method的属性设置为post

1、post请求有请求体,而get请求没有请求体。

2、post请求数据在请求体中携带,请求体数据大小没有限制,可以用来上传所有内容[文件、文本]

3、只能使用post请求上传文件

4、post请求报文多了和请求体相关的配置[请求头]

5、地址栏参数不可见,相对安全

6、post效率比get低

响应报文

报文格式(4部分)

  • 响应首行(响应行);

  • 响应头信息(响应头);

  • 空行;

  • 响应体;

响应码

  • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;

  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;

  •  500:请求资源找到了,但服务器内部出现了错误;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头location,它指定了新请求的url地址;
  • 304 (未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 
  • 405 (方法禁用) 禁用请求中指定的方法。

mime类型

http内容类型:当前响应体的数据类型。

① 需要指出的是在浏览器和服务器之间传输的数据类型并非都是文本类型,还包括图片、视频、音频等多媒体类型。这些多媒体类型是使用mime类型定义的。

② mime的英文全称是"multipurpose internet mail extensions" 多功能internet 邮件扩充服务。mime类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应。

文件 mime类型
超文本标记语言文本 .html,.htm text/html
普通文本 .txt text/plain
rtf文本 .rtf application/rtf
gif图形 .gif image/gif
jpeg图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
midi音乐文件 mid,.midi audio/midi,audio/x-midi
realaudio音乐文件 .ra, .ram audio/x-pn-realaudio
mpeg文件 .mpg,.mpeg video/mpeg
avi文件 .avi video/x-msvideo
gzip文件 .gz application/x-gzip
tar文件 .tar application/x-tar
1xx(临时响应) 
表示临时响应并需要请求者继续执行操作的状态代码。

代码 说明 
100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 
101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功) 
表示成功处理了请求的状态代码。

代码 说明 
200 (成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。 
201 (已创建) 请求成功并且服务器创建了新的资源。 
202 (已接受) 服务器已接受请求,但尚未处理。 
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。 
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。 
206 (部分内容) 服务器成功处理了部分 get 请求。

3xx (重定向) 
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

代码 说明 
300 (多种选择) 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 
301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 get 或 head 请求的响应)时,会自动将请求者转到新位置。 
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 
303 (查看其他位置) 请求者应当对不同的位置使用单独的 get 请求来检索响应时,服务器返回此代码。 
304 (未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 
305 (使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。 
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误) 
这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码 说明 
400 (错误请求) 服务器不理解请求的语法。 
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 
403 (禁止) 服务器拒绝请求。 
404 (未找到) 服务器找不到请求的网页。 
405 (方法禁用) 禁用请求中指定的方法。 
406 (不接受) 无法使用请求的内容特性响应请求的网页。 
407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 
408 (请求超时) 服务器等候请求时发生超时。 
409 (冲突) 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。 
410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 
411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 
412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 
413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 
414 (请求的 uri 过长) 请求的 uri(通常为网址)过长,服务器无法处理。 
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。 
416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 
417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。

5xx(服务器错误) 
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明 
500 (服务器内部错误) 服务器遇到错误,无法完成请求。 
501 (尚未实施) 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。 
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 
505 (http 版本不受支持) 服务器不支持请求中所用的 http 协议版本。

httpwatch状态码result is

200 - 服务器成功返回网页,客户端请求已成功。 
302 - 对象临时移动。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 
304 - 属于重定向。自上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 
401 - 未授权。请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 
404 - 未找到。服务器找不到请求的网页。 
2xx - 成功。表示服务器成功地接受了客户端请求。 
3xx - 重定向。表示要完成请求,需要进一步操作。客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。 
4xx - 请求错误。这些状态代码表示请求可能出错,妨碍了服务器的处理。 
5xx - 服务器错误。表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。