一、XML
XML是EXtensible MarkupLanguage的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。
可扩展:三个字表面上的意思是XML允许自定义格式。但这不代表你可以随便写;
在XML基本语法规范的基础上使用的那些第三方应用程序、框架会通过XML约束的方式强制规定配置文件中可以写什么和怎么写;
XML基本语法这个知识点的定位是:不需要从零开始从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。 要改成什么样取决于需求,而怎么改取决XML基本语法和具体的XML约束;
1.1.常见的配置文件类型:
(1)properties:例如druid连接池就是使用properties文件作为配置文件;
(2)XML:例如Tomcat就是使用XML文件作为配置文件;
(3)YAML/YML:例如SpringBoot就是使用YAML作为配置文件
(4)json:通常用来做文件传输,也可以用来做前端或者移动端的配置文件
1.2XML配置文件示例:
<?xml version="1.0"encoding="UTF-8"?>
<students>
<student>
<name>张三</name>
<age>18</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</students>
1.3.XML的基本语法:
XML的基本语法和HTML的基本语法如出一辙。XML基本语法+HTML约束=HTML语法。在逻辑上HTML确实是XML的子集;
(1).XML文档声明:这部分基本上就是固定格式,<?xml version="1.0"encoding="UTF-8"?>
(2).根标签:根标签有且只能有一个
(3).标签关闭:开始标签和结束标签必须成对出现,单标签在标签内关闭;
(4).标签嵌套:标签可以嵌套,但是不能交叉嵌套,注释不能嵌套,
(5).标签名、属性名建议使用小写字母
(6).属性:属性必须有值,属性值必须加引号,单双都行;
1.2.使用DOM4J进行XML解析
1.2.1.使用步骤:
(1).导入jar包dom4j.jar
(2).创建解析器对象(SAXReader)
(3).解析xml获得Document对象
(4).获取根节点RootElement
(5).获取根节点下的子节点
1.2.2.DOM4J中API介绍:
(1).创建SAXReader对象:
SAXReader saxReader = new SAXReader();
(2).解析XML获取Document对象,需要传入要解析的XML文件的字节输入流
Document document = reader.read(inputStream);
(3).获取文档的根标签
Element rootElement = document.getRootElement();
(4).获取标签的子标签
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
(5).获取标签体内的文本
String text = element.getText();
(6).获取标签的某个属性的值
String value = element.attributeValue("属性名");
二、Tomcat10
2.1.WEB服务器
Web服务器通常由硬件和软件共同构成。
硬件:电脑,提供服务供其它客户电脑访问;
软件:电脑上安装的服务器软件,安装后能提供服务给网络中的其他计算机,将本地文件映射成一个url地址供网络中的其他人访问;
常见的JavaWeb服务器:
(1)Tomcat(Apache):当前应用最广的JavaWeb服务器;
(2)Jetty:更轻量级、更灵活的servlet容器;
(3)JBoss(Redhat红帽):支持JavaEE,应用比较广EJB容器;
(4)GlassFish(Orcale):Oracle开发JavaWeb服务器;
(5)Resin(Caucho):支持JavaEE,应用越来越广;
(6)Weblogic(Orcale):支持JavaEE,适合大型项目;
(7)Websphere(IBM):支持JavaEE,适合大型项目;
2.2.Tomcat服务器
(1)Tomcat简介:
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、sun和其他一些公司及个人共同开发而成。最新的Servlet和JSP规范总是能在Tomcat中得到体现, 因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器;
(2)Tomcat版本对应关系:
企业用的比较广泛的是8.0和9.0,目前比较新正式发布版本是Tomcat10.0,Tomcat11仍然处于测试阶段;
JavaEE和Servelet版本号对应关系:
Servlet Version | EE Version |
6.1 | Jakarta EE ? |
6.0 | Jakarta EE 10 |
5.0 | Jakarta EE 9/9.1 |
4.0 | JAVA EE 8 |
3.1 | JAVA EE 7 |
3.1 | JAVA EE 7 |
3.0 | JAVA EE 6 |
Tomcat版本和Servlet版本之间的对应关系:
Servlet Version | Tomcat Version | JDK Version |
6.1 | 11.0.x | 17 and later |
6.0 | 10.1.x | 11 and later |
5.0 | 10.0.x(superseded) | 8 and later |
4.0 | 9.0.x | 8 and later |
3.1 | 8.5.x | 7 and later |
3.1 | 8.0.x(superseded) | 7 and later |
3.0 | 7.0.x (archived) | 6 and later (7 and later for WebSocket |
2.3.Tomcat目录:
(1)bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat10.exe、tomcat10w.exe,前者是在控制台下启动Tomcat,后者是弹出GUI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA HOME环境变量才能启动,shutdown.bat用来停止Tomcat;
(2)conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
a.server.xml:配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是8080;
b.tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
c.web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的;
d.context.xml:对所有应用的统一配置,通常我们不会去配置它;
(3)lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的iar文件放到这个目录中,这个目录中的iar所有项目都可以共享,但这样应用放到其他Tomcat下时就不能再共享这个目录下的iar包了,所以建议只把Tomcat需要的iar包放到这个目录下;
(4).logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中;
(5).temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除;
(6).webapps:存放web项目的目录,其中每个文件都是一个项目;如果这个目录下已经存在了目录,那么都是Tomcat自带的项目。其中ROOT是一个特殊的项目,在地址中访问http://127.0.01:8080,没有给出项目目录时,对应就是ROOT项目:http://localhost:8080/examples,进入示例项目。其中"examples"就是项目名,即文件夹的名字;
(7).work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的。可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的iava和class文件都会存放到这个目录下;
2.4.WEB项目的标准结构:
(1)app:本应用根目录
(1.1)static:非必要目录,约定俗成的名字,一般在此处放静态资源(css js img);
(1.2)WEB-INF:必要目录,必须叫WEB-INF。受保护的资源目录,浏览器通过url不可以直接访问的目录;
(1.2.1)classes:必要目录,src下源代码、配置文件,编译后会在该目录下。web项目中如果没有Java源码,则该目录不会出现;
(1.2.2)lib:必要目录,项目依赖的jar编译后会出现在该目录下,web项目要是没有依赖任何jar,则该目录不会出现;
(1.2.3).web.xml:必要文件,web项目的基本配置文件,较新的版本中可以没有该文件,但是学习过程中还是需要该文件;
(1.3).index.html:非必要文件,index.html/index.htm/index.jsp为默认的欢迎页;
2.5.WEB项目部署方式
(1)方式1:直接将编译好的项目放在webapps目录下
(2)方式2:将编译好的项目打成war包放在webapps目录,tomcat启动后会自动解压war包;
(3)方式3:可以将项目放在非webapps的其他目录下,在Tomcat中通过配置文件指向app的实际磁盘路径;
在磁盘的自定义目录上准备一个app;
在tomcat的conf下创建Catalina/localhost目录,并在该目录下准备一个app.xml文件;
<!--
path:项目的访问路径,也是项目的上下文路径,就是在浏览器中,输入的项目名称
docBase:项目在磁盘中的实际路径
-->
<Context path="/app" docBase="D:\mywebappslapp" />
启动Tomcat访问测试即可
三、HTTP协议:
HTTP超文本传输协议(HTTP-Hyper Text transfer protocol)是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展得到不断地完善和扩展。
HTTP是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文。 HTTP协议规定了报文的格式。 HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为"请求报文",服务器发送给客户端的称为"响应报文"。
3.1.HTTP协议的会话方式:
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问浏览器与WEB服务器都要建立一次单独的连接。浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
3.2.HTTP1.0和HTTP1.1的区别:
在HTTP1.0版本中浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。持久连接和流水线连接允许web浏览器通过单个持久连接发送多个请求,缓存支持节省了带宽并使响应速度更快;HTTP1.1支持七种请求方法:OPTIONS,GET, HEAD, POST, PUT, DELETE和TRACE。
3.3.请求和响应报文
(1)报文的格式:
主体上分为报文首部和报文主体,中间使用空行隔开
报文首部可以进一步分为"行"和"头"
(2)请求报文:
客户端发给服务端的报文;由请求首行(请求行)、请求头信息(请求头)、空行和请求体组成
请求行:
请求方式、资源路径、协议及版本(GET/POST 资源路径?参数 HTTP/1.1)
例如:GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
请求头:
Host:localhost:8080(主机虚拟地址)
Connection:keep-alive(长连接)
Upgrade-Insecure-Requests:1(请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的])
User-Agent: Mozilla/5.8 (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=8.9,image/webp,image/apng, */*;q=0.8(浏览器支持的文件类型)
Referer:http://localhost:8080/85_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(浏览器支持的语言)
请求体:
使用form表单发送POST请求,请求体中才有数据;
(3)响应报文
响应报文格式:响应首行(响应行)、响应头信息(响应头)、空行和响应体组成
响应行:
协议及版本、响应状态码、状态描述
例如:HTTP/1.1 288 0K(缺省)
响应头:
Server:Apache-Coyote/1.1(服务器的版本信息)
Accept-Ranges:bytes
ETag:W/"157-1534126125811"
Last-Modified: Mon,13 Aug 2018 02:88:45 GMT
Content-Type:text/html(响应体数据的类型[浏览器根据类型解析响应体数据])
Content-Length:157(响应体内容的字节数)
Date: Mon,13 Aug 2018 02:47:57 GMT(响应的时间,这可能会有8小时的时区差)
响应体:
需要浏览器解析使用的内容[如果响应的是htm页面,最终响应体内容会被浏览器显示到页面中]
响应状态码:
状态码 | 英文描述 | 中文描述 |
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。一般用于GET与POST请求,浏览器会把响应体内容(通常是html)显示在浏览器中 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新UR,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URL;服务器会发送一个响应头Location指定新请求的URL地址; |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源;使用了本地缓存; |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码网站设计人员可设置"您所请求的资源无法找到"的个性页面;客户端错误的请求了不存在的资源; |
405 | Method Not Allowed | 客户端请求中的方法被禁止;请求的方式不允许; |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的PUT请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request EntityToo Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URl Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 | Internal ServerError | 服务器内部错误,无法完成请求;请求资源找到了,但服务器内部出现了错误; |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |