首页 > 技术文章 > 学习response和request

zzdd 2021-03-30 22:00 原文

 

  1. xml

    1. 概念:可扩展标记语言

      1. 可扩展:标签都是自定义的。任意的自定义标签

    2. 功能

      1. 存储数据

      2. 在网络中传输

    3. xml与html的区别

      1. xml的标签都是自定义的,html标签是预定义的

      2. xml语法严格

      3. xml是存储数据的,html是展示数据的

  2. 语法

    1. 基本语法

      1. xml文档后缀是xml

      2. xml第一行必须定义文档声明

      3. xml有且仅有一个根标签

      4. 属性值必须要用引号引起来

      5. 标签必须正确关闭

      6. xml标签名称区分大小写

    2. 快速入门

    3. 组成部分

      1. 文档声明

        1. 格式:<?xml 属性列表 ?>

        2. 属性列表:

          1. version:版本号,必须的属性

          2. encoding:编码方式,告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1

          3. standalone:是否独立

            1. yes:不依赖于其他文件

            2. no:依赖于其他文件

      2. 指令

      3. 标签

      4. 属性

        1. id的属性值是唯一的

      5. 文本内容

        1. CDATA区,在该区域的数据会被原样展示

          格式:<![CDATA[ 数据 ]]>

      6. 约束:规定xml文档的书写规则

        1. 作为框架的使用者(程序员)

          1. 能够再xml中引入约束文档

          2. 能够简单的读懂约束文档

        2. 分类:

          1. DTD:简单的约束技术

          2. Schema:复杂的约束技术

        3. DTD

          1. 引入dtd文档到xml文档中

            1. 内部dtd:将约束规则定义在xml文档中

            2. 外部dtd:将约束规则定义在外部的dtd文件中

              1. 本地:<!DOCTYPE 根标签名 SYSTEM"dtd文件的位置" >

              2. 网络:<!DOCTYPE 根标签名 PUBLIC"dtd文件的名字" >

        4. Schema

          1. 填写xml文档的根元素

          2. 引入xsi前缀,xmlns=“”

          3. 引入xsd文件命名空间

          4. 为每一个xsd约束声明一个前缀

        5. 解析:操作xml文档,将文档中的数据读取到内存中

          1. 解析(读取):将文档中的数据读取到内存中

          2. 写入:将内存中的1数据保存到xml文档中,持久化的储存

          ··解析xml的方式:

          DOM:将标记语言文档一次性加载进内存,在内存中形成dom树

          • 优点:操作方便,可以对文档进行crud的所有操作

          • 缺点:占内存

          SAX:逐行读取,基于事件驱动的

          1. 优点:不占内存

          2. 缺点:只能读取,不能增删改

        6. xml常见的解析器:

          1. JAXP:sun公司提供的解析器,支持dom和dax两种思想

          2. DOM4J:优秀的解析器

          3. Jsoup:

            1. 步骤:

              1. 导入jar包

              2. 获取document对象

              3. 获取对应的标签

              4. 和获取数据

            2. 对象的使用

              1. parse:解析html和xml文档返回Docement对象

              2. Document:文档对象,代表内存中的dom树

                1. getElementByTag根据标签名称获取元素对象的集合

                2. 根据属性名称获取对象集合

                3. 根据对应的属性值和属性名获取元素对象集合

              3. Elements:元素对象的集合,可以当做ArrayList<element>使用

              4. Element:元素对象

              5. Node:节点对象

 

Servlet:server applet

  • 概念:运行在服务器端的小程序

    Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)

     

    1. 快速入门

      1. 创建Javaee项目

      2. 实现一个类,实现servlet接口

      3. 实现接口中的抽象方法

      4. 配置Servlet

    2. 执行原理

      1. 当服务器接收到客户端浏览器的请求后,会解析请求url路径,获取访问的Servelet的资源路径

      2. 查找web.xml文件,是否有对应的<url-patten>标签体内容

      3. 如果有,则在找到对应的<servlet-class> 全类名

      4. tomocat会将字节码文件加载进内存,并且创建对象

      5. 调用方法

    3. Servlet中的生命周期

      1. 被创建,执行init方法,只执行一次

        1. Servlet什么时候被创建?

          1. 默认情况下第一次被访问时,servlet被创建

          2. 可以去配置执行Servlet方法

            1. <!--指定Servlet的创建时机
              1,第一次被访问是,创建   <load-on-startup>为负数
              2.服务器被访问时创建
                   <load-on-startup>值为0或者正整数

              -->
        2. Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

          1. 多个用户同时访问时,可能存在线程安全问题。

          2. 解决:尽量不要再Servlet中定义成员变量

      2. 提供服务,执行service方法,执行多次

      3. 销毁:执行destory方法,只执行一次

        1. Servlet被销毁时执行,服务器关闭时,Servlet被销毁

        2. 只有服务器正常关闭时候,才会执行destory方法

        3. destory在销毁之前指定,一般用于释放资源

      4. Servlet3.0

        1. 好处

          1. 支持注解配置。可以不需要web.xml了

        2. 步骤

          1. 创建JavaEE项目,选择Servlet3.0以上版本,可以不创建web.xml

          2. 定义一个文件夹,实现Servlet接口

          3. 复写方法

          4. 在类上使用@WebServlet注解,进行配置

            @WebServlet("资源路径")

            Servlet --接口

            |

            GenericServlet

            |

            httpServlet

        GenericServlet:将Servlet接口中的其他方法做了默认空实现,只将Service作为抽象

        HttpServlet:对http协议的封装

        1.定义类继承httpServlet

        2.重写doGet/doPost方法

      5. Servlet相关配置

        1. urlpartten:Servlet访问路径

          1. 一个Servlet可以定义多个访问路径:@WebServlet({“/d4”,“/DD4”})

          2. 路径定义规则

            1. /xxx

            2. /xxx/xxx:多层路径

            3. *.do

  • HTTP

    • 概念:Hyper Text Transfer Protocol 超文本传输协议

      • 传输协议:定义了客户端和服务器端通信时的格式

        • 特点

          • 基于TCP/IP的高级协议+

          • 默认端口号80

          • 基于请求/相应模型:一次请求一次响应

          • 每次请求都是独立的

        • 历史版本

          • 1.0,每次链接都是新建连接

          • 1.1,复用连接。

    • 请求消息数据格式

      • 请求行

        • 请求方式 请求url 请求协议/版本

        • Get login http/1.1

        • 请求方式:

          • http协议有7种请求方式,常见的有两种

          • Get

            • 请求参数在请求行中,在url后

            • 请求的url长度有限制

            • 不太安全

          • Post

            • 请求参数在请求体中

            • 请求的url长度没有限制

            • 相对安全

      • 请求头:客户端浏览器告诉服务器一些信息

        • 请求头名称:请求头值

        • 常见的请求头:

          • User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

            • 可以在服务器获取该头的信息,解决浏览器兼容问题

          • Referer:http://localhost/login.html

          • 告诉服务器请求从哪里来

            • 作用

              • 防盗链

              • 统计工作

      • 请求空行

        • 空行

      • 请求体

      •  

    • 响应消息数据格式

Request请求

  1. request和response对象的原理

    1. request和response对象是由服务器创建的。我们来使用他们

    2. request对象来获取请求消息,response对象是来设置响应消息

  2. request对象继承体系结构

    1. servletRequest

    2. HttpServletRequest

  3. request功能:

    1. 获取请求消息数据

      1. 获取请求行数据

        1. GET /day14/demo1?name = zhangd HTTP/1.1

        2. 方法

          1. 获取请求方式

            1. String getMethod()

          2. **获取虚拟目录:/day14

            1. getContextPsth

          3. 获取Servlet路径:/demo1

            1. getServletPath

          4. 获取get请求参数

            1. getQueryString()

          5. ** 获取请求的URI

            1. getRequestURI

            2. URL:统一资源定位符 http://...... //中华人名共和国

            3. URI:统一资源标识符 。。。共和国

          6. 获取协议以及版本号

            1. getPotocol

      2. 获取请求头数据

        1. 方法

          • String getHeader(String name):通过请求头的名称获取请求头的值

          • Enumeration<String> getHeaderName():和获取所有的请求头名称

      3. 获取请求体数据

        1. 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的参数

        2. 步骤

          1. 获取流对象

            1. bufferedReader getReader():获取字符输入流,只能操作字符数据

            2. ServletInputStream getInputStream():获取字节输入流,可以操作所有数据类型

          2. 再从流对象中拿数据

    2. 其他功能

      1. 获取请求参数通用的方式

        1. getParameter(String name):根据参数名称获取参数值

        2. getParameterValue(String name):根据参数名称获取参数值的数组 hobby=xx&hobyby=name

        3. Enumeration<String> getHeaderNames():获取所有请求参数名称

        4. Map<String ,String[]> getParameterMap():获取所有参数的map集合

          1. 中文乱码问题

            1. get方式:womocat 8已经将get方式乱码解决

            2. post方式:会乱码

              1. 在获取参数前设置流的编码

              2. request.setCharacterEncoding(“utf-8”);

      2. 请求转发:一种在服务器内部的资源跳转方式

        1. 步骤

          1. 通过Request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)

          2. 使用该对象进行转发:forward(RequestDispatcher request, RequestDispatcher response )

        2. 特点:浏览器地址栏路径没有发生变化。

          只能访问到当前服务器内部资源中。

          转发是一次请求。

      3. 共享数据:

        1. 域对象:一个有作用范围的对象,可以在范围内共享数据

        2. request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

        3. 方法

          1. setAttribute(string name,Object obj):存储数据

          2. getAttribute(String name):通过建获取值

          3. removeAttribute(String name):同过键值对移除

      4. 获取ServletContext

 

HTTP协议_响应消息

  1. 请求消息:客户端发给服务器端的数据

    1. 数据格式

      1. 请求行

      2. 请求头

      3. 请求空行

      4. 请求体

  2. 响应消息:服务器端发给客户端的数据

    1. 数据格式

      1. 响应行

        1. 组成:协议/版本 响应状态码 状态码描述

        2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态

          1. 状态码都是三位数字

            1. 1xx:服务器接收客户端消息但没有接收完成,等待一段时间,发送1xx

            2. 2xx:成功代表:200

            3. 3xx:重定向。代表:302(重定向):304(缓存)

            4. 4xx:客户端错误。

            5. 5xx:服务器端错误。

      2. 响应头

        1. 格式:头名称:值

        2. 常见的响应头:

          1. Content-Type: 服务器告诉客户端本次响应体数据格式以及编码格式

          2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据

            1. 值:

              1. 默认:in-line:默认值,在当前页面打开

              2. attachment:以附件形式打开响应体

      3. 响应空行

      4. 响应体:真实的传输的数据

    2. 响应数据格式

      HTTP/1.1 200 OK

      Server: Apache-Coyote/1.1

      Content-Type: text/html;

      charset=UTF-8

      Content-Length: 97

      Date: Tue, 23 Mar 2021 06:45:15 GMT

    Response对象

    1. 功能:设置响应消息

      1. 设置响应行

        1. 格式:http/1.1 200 ok

        2. 设置状态码:setStatus(int sc)

      2. 设置响应头:setHeader(String name,String value)

      3. 设置响应体

        1. 使用步骤:

          1. 获取输入流:

          2. 字节输入流:

        2. 使用输出流,将数据输出到客户端浏览器

      4. 案列:

        1. 完成重定向

          1. 重定向:浏览器

        2. 服务器输出字符数据到浏览器

          1. 中文乱码:编码解码使用的字符集不一样,字符集:默认使用GBK

          2. //告诉浏览器,服务器发送数据的编码格式,建议浏览器使用该编码编码
            resp.setHeader ( "content-type","text/html;charset=utf-8" );
        3. 服务器输出字节数据到浏览器

          1. 获取字节数据

          2. 输出数据

        4. 验证码

          1. 本质:图片

          2. 目的:防止恶意表单注册

  3. ServletContext

    1. 概念,代表整个web应用,可以和程序的容器(服务器)来通信

    2. 获取

      1. 通过request对象获取

        request.getServletContext();

      2. 通过HttpServlet

    3. 功能:

      1. 获取MIME类型

        MIME类型:在互联网通信过程中定义的一种文件数据类型

        格式:大类型:小类型 text/html

        获取:getMimeType(String file)

      2. 域对象:共享数据

        1. setAttribute(String name , Object value)

        2. getAttribute

        3. ServletContext对象范围,所有用户数据

      3. 获取文件的真实(服务器路径)路径

  4. 文件下载案列

  5.  

 

 

 

 

 

推荐阅读