JavaWeb,XML、Tomcat、HTTP的学习

XML

XML具体不需要太深入,但是要知道它是什么,是干嘛用的。

xml作为配置文件,可以更好地存储一些信息

xml文件第一行一定是<?xml version="1.0" encoding="字符集"?>

根标签只能有一个

xml是有约束的,分为dtd约束和schema约束,dtd约束简单不细致,schema约束复杂细致。

xml文件举例:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id="01">
        <name>张三</name>
        <age>18</age>
    </student>
    <student id="02">
        <name>李四</name>
        <age>20</age>
    </student>
</students>

xml文件的语法与html类似,也是只有一个根标签,也是由元素组成,元素也是由标签+属性+文本组成,可以说,html就是有html语法约束的xml文件。

XML的解析(使用DOM4J)

XML不需要具体了解,大体看一下流程即可

java 复制代码
package XML_leaning;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.List;

public class TestDom4j {
    public static void main(String[] args) throws DocumentException {
        //读取jdbc.xml配置文件,获得document对象
        SAXReader saxReader = new SAXReader();
        //通过类加载器获得指向字节码根路径下的指定文件的输入流
        InputStream resourceAsStream = TestDom4j.class.getClassLoader().getResourceAsStream("jdbc.xml");
        //通过输入流获得配置文件,解析成一个dom对象
        Document document = saxReader.read(resourceAsStream);
        //从domcument对象上获取配置文件中的信息
        Element rootElement = document.getRootElement();
        System.out.println(rootElement.getName());
        List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            System.out.print("\\t" + element.getName());
            Attribute attribute = element.attribute("id");
            System.out.println(" " + attribute.getName() + "=" +  attribute.getValue());
            List<Element> elements1 = element.elements();
            for (Element element1 : elements1) {
                System.out.println("\\t\\t" + element1.getName() + ":" + element1.getText());
            }
        }
    }
}

不需要特别搞懂,知道是配置文件,用来存储一些配置信息,作用类似于properties文件即可。

Tomcat

Tomcat是专门运行WEB应用软件的服务器软件

汤姆猫的知识点较少,大多数是操作的东西,有一个知识点叫WebAPP标准结构要知道:

WebAPP标准结构

  • app 本应用根目录
    • static 非必要目录,约定俗成的名字,一般在此处放静态资源 ( css js img)
    • WEB-INF 必要目录,必须叫WEB-INF,受保护的资源目录,浏览器通过url不可以直接访问的目录
      • classes 必要目录,src下源代码,配置文件,编译后会在该目录下,web项目中如果没有源码,则该目录不会出现
      • lib 必要目录,项目依赖的jar编译后会出现在该目录下,web项目要是没有依赖任何jar,则该目录不会出现
      • web.xml 必要文件,web项目的基本配置文件. 较新的版本中可以没有该文件
    • index.html 非必要文件,为默认的欢迎页

HTTP

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

交互的方式和数据的格式

HTTP提供了客户端和服务端的交互的方式和数据的格式

交互的方式

请求:客户端向服务端发送

响应:服务端向客户端返回

数据的格式

请求时发送的数据称为请求报文

响应时返回的数据称为响应报文

报文

报文是有规定的格式:

  • 报文首部:
  • 报文主体
    请求报文的格式对应称为请求行、请求头、请求体

响应报文的格式对应称为响应行、响应头、响应体

HTTP长链接和短链接

HTTP是一种应用层协议,规定的是报文的格式,但是不规定传输。

TCP是一种传输层协议,是面向连接的协议。而想要确定传输的实体,就要通过IP协议。

IP是一种网络层协议。

TCP连接的步骤为:创建连接(三次握手)--->关闭连接(四次挥手)

短链接即为在客户端向服务端发送请求时,每有一个资源需要向服务端发送连接,都进行一遍三次握手四次挥手,如果有n个资源需要向服务器端发送连接,就进行了n遍三次握手四次挥手

长连接即为在客户端向服务端发送请求时,先三次握手建立连接,获取到所有资源后才四次握手关闭连接,减少了TCP连接的次数

HTTP1.1时,增加了缓存机制,即一个资源获取到后会先缓存下来,如此重复获取此资源时,不用再重复请求。节省了带宽并使得响应速度也更快

请求和响应报文

报文的格式

报文分为报文首部和报文主体,报文首部和报文主体之间用空行隔开

报文首部

空行(CR+LF,即回车加换行)

报文主体

报文首部可以继续细分为 行 和 头

  • 报文首部
    • 请求行/状态行
    • 请求首部字段/响应首部字段
    • 通用首部字段
    • 实体首部字段
    • 其他

请求报文

客户端发给服务端的报文

  • 请求报文格式

    • 请求首行(请求行); GET/POST 资源路径?参数 HTTP/1.1
    • 请求头信息(请求头);
    • 空行;
    • 请求体;POST请求才有请求体

    GET请求方式会将参数放在地址栏上,不安全,且GET方式只能携带纯文本。POST请求方式将参数放在请求体,较为安全,且POST方式能携带所有内容。GET方式没有请求体。

响应报文

服务端发给客户端的报文

  • 响应报文格式
    • 响应首行(响应行); 协议/版本 状态码 状态码描述
    • 响应头信息(响应头);
    • 空行;
    • 响应体;

状态码

响应状态码:响应码告诉浏览器响应的结果。较有代表性的响应码:

  • 200: 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 302: 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
  • 304: 使用了本地缓存
  • 404: 请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 405: 请求的方式不允许
  • 500: 请求资源找到了,但服务器内部出现了错误;

还有一些其他的状态码,我粘贴在下面,遇见时对照查找是哪种情况即可:

状态码 状态码英文描述 中文含义
1**
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2**
200 OK 请求成功。一般用于GET与POST请求
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求
3**
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
4**
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 Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
5**
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
相关推荐
不可能的是3 小时前
前端 SSE 流式请求三种实现方案全解析
前端·http
大大水瓶4 天前
Tomcat
java·tomcat
失重外太空啦4 天前
Tomcat
java·服务器·tomcat
屎到临头想搅便4 天前
TOMCAT
java·tomcat
微风起皱4 天前
企业级WEB应用服务器TOMCAT
java·前端·tomcat
天蓝不会忘记024 天前
lvs,haproxy,keepalived,nginx,tomcat介绍和实验
nginx·tomcat·lvs
古译汉书4 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
前网易架构师-高司机4 天前
带标注的驾驶员安全带识别数据集,识别率99.5%,可识别有无系安全带,支持yolo,coco json,pascal voc xml格式
xml·yolo·数据集·交通·安全带
unfeeling_4 天前
Tomcat实验
java·tomcat
逍遥德4 天前
Maven教程.01- settings.xml 文件<profile>使用详解
xml·java·maven