http请求HttpServletRequest详解 - Go语言中文社区

http请求HttpServletRequest详解


目录

1.  HttpServletRequest概述

2.  request的运行流程 

3. 抓包获取的http请求信息

4. 通过requestd对象获得 "请求行"

5. 通过request 获得请求头

6. 通过request 获得请求体

附加  request 的其他功能:

      1. request 是一个域对象 

       2. request 完成请求转发  

        3. ServletContext域与Request域的生命周期比较?

        4. 转发与重定向的区别?

        5. 客户端地址与服务器端的地址的写法?


1.  HttpServletRequest概述

        我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。 service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口.

2.  request的运行流程 

3. 抓包获取的http请求信息

    request代表请求, 可以通过该对象分别获取http请求的请求行,  请求头,   请求体

4. 通过requestd对象获得 "请求行"

    获得请求的资源:
    String getRequestURI() 
    StringBuffer getRequestURL() 
    String getContextPath() ---web应用的名称
    String getQueryString() ---- get提交url地址后的参数字符串
    username=zhangsan&password=123

     注:request获得客户机(客户端)的一些信息         request.getRemoteAddr() --- 获得访问的客户端IP地址

5. 通过request 获得请求头

    long getDateHeader(String name)
    String getHeader(String name)
    Enumeration getHeaderNames()
    Enumeration getHeaders(String name)
    int getIntHeader(String name)

       注:  referer :     n. 参照页,引用页; 推荐人

              作用:  执行该此访问的来源 ,  做防盗链时使用 该信息

6. 通过request 获得请求体

     request 请求的概念是 通过post提交的请求参数的,  若果是get 则没有请求体(直接跟在 ? 后边 , 多个参数用 & 连接 )

     格式: 

      username=zhangsan&password=123&hobby=football&hobby=basketball

      key ---------------------- value

      username                    [zhangsan]

      password                    [123]

      hobby                         [football,basketball]

    以上述为例子: 获取请求参数 (get 和 post 都可以通过以下方式获得) : 

    String getParameter(String name) 
    String[] getParameterValues(String name)
    Enumeration getParameterNames()
    Map<String,String[]> getParameterMap()

    注:  乱码处理 (括号内的是我个人拙见) :

         •  解决post提交方式的乱码 (参数还在请求体中, 可以先行设置编码,然后通过浏览器处理后 直接就是utf8的编码):

                               request.setCharacterEncoding("UTF-8");

         •  解决get提交的方式的乱码 (因为get方式是直接在链接过边加的不经过浏览器处理, 得到的是原编码,  想要改变编码需要有先解码再编码的过程):

     String name = request.getParameter("name");
     name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

 

附加  request 的其他功能:

      1. request 是一个域对象 

          request 对象也是一个存储数据的区域对象, 所以也具有如下方法:     

    setAttribute(String name, Object o)
    getAttribute(String name)
    removeAttribute(String name)

       注: request 域的作用范围:  一次请求中

       2. request 完成请求转发  

    获得请求转发器-- path是转发的地址
    RequestDispatcher getRequestDispatcher(String path)
    通过转发器对象转发
    requestDispathcer.forward(ServletRequest request, ServletResponse response)

       3. ServletContext域与Request域的生命周期比较?

                   ServletContext :  创建--> 服务器启动  ;     销毁--> 服务器关闭 ;                     域的作用范围--> 整个web应用

                   request :  创建--> 访问时创建request ; 销毁-->响应结束request销毁 ;  域的作用范围--> 一次请求中

       4. 转发与重定向的区别?

                  •    重定向是 两次请求, 转发是一次请求

                  •    重定向地址栏的地址变化, 转发地址不发生变化

                  •    重定向可以访问外部网站 , 转发只能访问内部的网站

                  •    转发的性能要优于重定向

       5. 客户端地址与服务器端的地址的写法?

                  •    客户端访问服务端需要加上 web应用的名称.

                  •    服务器内部访问资源 , 内部的跳转地址, 不需要写web应用的名称

 

          18/12/6  18:00   雨 

 

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/fanbaodan/article/details/84860969
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 10:41:23
  • 阅读 ( 1437 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢