• Web核心之Request对象


    HTTP协议中Request请求部分格式

    //请求行(这种是POST类型的请求)
    POST /HttpServleLogin.html	HTTP/1.1
    //请求头(User-Agent里有Firefox,说明是火狐浏览器)
    Host: localhost
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://localhost/HttpServletDemoLogin.html
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1 
    //请求体			
    something=英特纳雄耐尔
    

    这种是谷歌浏览器下GET类型的请求

    请求行:

    请求方式(POST为例) 请求的url 协议/版本号

    POST /HttpServleLogin.html	HTTP/1.1
    

    get请求时,请求参数是拼接在url后的。格式为:
    ?开始,参数以key=value拼接。多个参数之间用&符号连接
    http://localhost:8080/xxx?username=xxx&password=xxx&xxx=hyy

    http://localhost/HttpServletDemo?something=%E8%8B%B1%E7%89%B9%E7%BA%B3%E9%9B%84%E8%80%90%E5%B0%94
    

    GET(没有请求体):请求参数在请求行中,请求的url长度有限制,参数在url后,所以参数有长度限制
    POST(有请求体):请求的url长度有限制,但请求参数在请求体中,所以参数有长度没有限制

    请求头:

    在请求时,客户端在传递数据的同时,通过请求头可以携带一些请求相关的额外配置信息。
    这些信息通常是客户端自动封装提供的。
    请求头的格式:
    都是键值对。有的是一个key对应一个value,有的是一个可以对应多个value
    key是固定的,协议中预定义的。不区分大小写。

    user-agent:携带客户端的信息--操作系统型号、浏览器版本
    referer:提供当前请求发送的位置信息。

    请求体

    get方式请求没有请求体,因为get的参数在请求行中。
    只有post请求有请求体,用于传递提交的参数。
    HTTP协议是网络中传输数据的协议,和语言无关。

    request对象继承体系结构:

    ServletRequest -- 接口
    | 继承
    HttpServletRequest -- 接口
    | 实现
    org.apache.catalina.connector.RequestFacade 类(tomcat)

    request和response对象并不是我们创建的,而是tomcat服务器接受到请求之后创建并通过service的调用传递给我们的。
    request中封装了客户端提供给服务器的数据,也就是HTTP的请求部分。我们可以获取这些数据。
    response对象封装了我们想要返回给客户端的数据,tomcat服务器会把我们提供的数据转为静态数据返给客户端。我们可以设置这些数据。
    

    获取请求行信息




    获取虚拟目录:String getContextPath(),由于我设置的是

    所以这里虚拟目录是空。
    获取请求URI:String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();

    获取请求头信息



    未演示俩重要方法:
    getHeader()根据指定的请求头的key获取value
    getHeaders()根据指定的请求头的key获取多个value值

    获取请求体信息(仅POST方式):

    getInputStream()

    获取请求体中提交的数据的输入流

    先获取流对象,然后再从流对象中获取参数。



    获取请求参数(通用方式):




    获取参数时的乱码问题



    get方式

    	tomcat8 获取参数时,已经把默认编码设置为utf-8了。所以不会乱码。无需解决。
    	tomcat7及以下版本,默认编码是ISO-8859-1。所以会出现乱码的情况。
    		解决方案:
    			先把乱码字符串还原为字节数组,再使用正确的字符集进行编码。
    			String param = new String(request.getParameter("paramName").getBytes("ISO-8859-1"),"UTF-8");
    

    post方式

    	request.setCharacterEncoding("utf-8");
    

    请求转发(页面跳转的一种方式):

    api:request.getRequestDispatcher(path).forward(request,response);



    特点:

    1. 转发只发送一次请求。
    2. 转发时地址栏不会发生变化。
    3. 转发只能访问当前项目内的资源,不能跳到pornhub什么的网站。
      建议在页面跳转之后不要再编写其他业务逻辑,以防逻辑混乱。

    共享对象:

    域对象

    概念:

    		具有一定作用范围的对象,一般用于存储数据。格式为key-value
    	作为域对象使用api
    		setAttribute(String key,Object value)
    		Object getAttribute(String key)
    		removeAttribute(String key)
    	request域
    





    作用范围:一次请求。
    创建:
    当服务器接收到一次请求时,会创建一个request对象。
    销毁:
    当一个请求被响应之后,该请求被销毁,一次请求结束。
    一般我们在转发时,使用request传递数据。
    获取ServletContext
    request.getServletContext()


  • 相关阅读:
    CIFAR10-网络训练技术
    论文-Deep Residual Learning for Image Recognition
    Origin-作图相关
    OnCtlColor
    查看电脑MAC地址
    改变静态文本框和PictureControl的背景颜色
    MFC在对话框中的Picture contrl控件中添加icon图标,并改变icon图标的背景色与对话框背景色一致
    char型数组学习
    条件编译
    ASCII码
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/12069882.html
Copyright © 2020-2023  润新知