• JavaWeb__XML、http


    一 、XML

    XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。

    1.1 常见配置文件类型

    • properties文件,例如druid连接池就是使用properties文件作为配置文件
    • XML文件,例如Tomcat就是使用XML文件作为配置文件
    • YAML文件,例如SpringBoot就是使用YAML作为配置文件
    • json文件,通常用来做文件传输,也可以用来做前端或者移动端的配置文件

    1.1.1 properties配置文件

    guoyvzhi.jdbc.url=jdbc:mysql://localhost:3306/guoyvzhi
    guoyvzhi.jdbc.driver=com.mysql.cj.jdbc.Driver
    guoyvzhi.jdbc.username=root
    guoyvzhi.jdbc.password=root
    
    
    • 由键值对组成
    • 键和值之间的符号是等号
    • 每一行都必须顶格写,前面不能有空格之类的其他符号

    1.1.2 xml配置文件

    
    <students>
        <student>
            <name>张三name>
            <age>18age>
        student>
        <student>
            <name>李四name>
            <age>20age>
        student>
    students>
    
    

    XML的基本语法

    • XML的基本语法和HTML的基本语法简直如出一辙。其实这不是偶然的,XML基本语法+HTML约束=HTML语法。在逻辑上HTML确实是XML的子集。
    • XML文档声明 这部分基本上就是固定格式,要注意的是文档声明一定要从第一行第一列开始写
    
    
    • 根标签
      • 根标签有且只能有一个。
    • 标签关闭
      • 双标签:开始标签和结束标签必须成对出现。
      • 单标签:单标签在标签内关闭。
    • 标签嵌套
      • 可以嵌套,但是不能交叉嵌套。
    • 注释不能嵌套
    • 标签名、属性名建议使用小写字母
    • 属性
      • 属性必须有值
      • 属性值必须加引号,单双都行

    XML的约束(稍微了解)
    将来我们主要就是根据XML约束中的规定来编写XML配置文件,而且会在我们编写XML的时候根据约束来提示我们编写, 而XML约束主要包括DTD和Schema两种。

    • DTD
    • Schema
      Schema约束要求我们一个XML文档中,所有标签,所有属性都必须在约束中有明确的定义。
      下面我们以web.xml的约束声明为例来做个说明:
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
    

    1.2 DOM4J进行XML解析

    1.2.1 DOM4J的使用步骤

    1. 导入jar包 dom4j.jar
    2. 创建解析器对象(SAXReader)
    3. 解析xml 获得Document对象
    4. 获取根节点RootElement
    5. 获取根节点下的子节点

    1.2.2 DOM4J的API介绍

    1. 创建SAXReader对象
    SAXReader saxReader = new SAXReader();
    
    1. 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
    Document document = reader.read(inputStream);
    
    1. 获取文档的根标签
    Element rootElement = documen.getRootElement()
    
    1. 获取标签的子标签
    //获取所有子标签
    List<Element> sonElementList = rootElement.elements();
    //获取指定标签名的子标签
    List<Element> sonElementList = rootElement.elements("标签名");
    
    1. 获取标签体内的文本
    String text = element.getText();
    
    1. 获取标签的某个属性的值
    String value = element.attributeValue("属性名");
    

    在这里插入图片描述

    二、 HTTP协议

    2.1 HTTP简介

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

    2.2 请求和响应报文

    2.2.1 报文的格式

    主体上分为报文首部和报文主体,中间空行隔开
    在这里插入图片描述

    报文首部可以继续细分为 “行” 和 “头”
    在这里插入图片描述

    2.2.2 请求报文

    客户端发给服务端的报文

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

    浏览器 f12 网络下查看请求数据包

    在这里插入图片描述

    查看GET请求行,请求头,请求体

    • 请求行组成部分
      • 请求方式 GET
      • 访问服务器的资源路径?参数1=值1&参数2=值2 … …
      • 协议及版本 HTTP/1.1
    GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
    
    • 请求头
    -主机虚拟地址
    Host: localhost:8080   
    -长连接
    Connection: keep-alive 
    -请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
    Upgrade-Insecure-Requests: 1  
    - 用户系统信息
    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
    
    
    • 请求空行
    • 请求体
      • GET请求数据不放在请求体

    查看post的请求行 请求头 请求体

    • 请求行组成部分
      • 请求方式 POST
      • 访问服务器的资源路径?参数1=值1&参数2=值2 … …
      • 协议及版本 HTTP/1.1
    POST /05_web_tomcat/login_success.html HTTP/1.1
    
    • 请求头
    Host: localhost:8080
    Connection: keep-alive
    Content-Length: 31     -请求体内容的长度
    Cache-Control: max-age=0  -无缓存
    Origin: http://localhost:8080
    Upgrade-Insecure-Requests: 1  -协议的自动升级
    Content-Type: application/x-www-form-urlencoded   -请求体内容类型[服务器根据类型解析请求体参数]
    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
    Cookie:JSESSIONID-
    
    
    • 请求空行

    • 请求体:浏览器提交给服务器的数据

    username=admin&password=1232131
    
    

    2.2.3 响应报文

    响应报文格式

    • 响应首行(响应行); 协议/版本 状态码 状态码描述
    • 响应头信息(响应头);
    • 空行;
    • 响应体;
      在这里插入图片描述
    • 响应行组成部分
      • 协议及版本 HTTP/1.1
      • 响应状态码 200
      • 状态描述 OK (缺省)
    HTTP/1.1 200 OK
    说明:响应协议为HTTP1.1,响应状态码为200,表示请求成功; 
    
    
    • 响应头
    Server: Apache-Coyote/1.1   服务器的版本信息
    Accept-Ranges: bytes
    ETag: W/"157-1534126125811"
    Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT
    Content-Type: text/html    响应体数据的类型[浏览器根据类型解析响应体数据]
    Content-Length: 157   响应体内容的字节数
    Date: Mon, 13 Aug 2018 02:47:57 GMT  响应的时间,这可能会有8小时的时区差
    
    
    • 响应体
    <!--需要浏览器解析使用的内容[如果响应的是html页面,最终响应体内容会被浏览器显示到页面中]-->
    
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>Insert title here</title>
      </head>
      <body>
        恭喜你,登录成功了...
      </body>
    </html>
    
    

    响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:

    • 200: 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
    • 302: 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
    • 304: 使用了本地缓存
    • 404: 请求的资源没有找到,说明客户端错误的请求了不存在的资源;
    • 405: 请求的方式不允许
    • 500: 请求资源找到了,但服务器内部出现了错误;
  • 相关阅读:
    罗技键盘k380按键修复
    无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解
    Proxy-Reflect
    FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    Self-Attention:初步理解
    路由转发路径【未完成】
    Windows C++内存泄漏调试技术——系列2
    【2017年数据结构真题】
    SQL Server2022版本 + SSMS安装教程(手把手安装教程)
    硬技能之上的软技巧(三)
  • 原文地址:https://blog.csdn.net/qq_45606619/article/details/140295688