Servlet相关Request

前面了解了一些Servlet的运行原理和继承体系,但是要进行业务操作还要了解一些其他知识点
未完结 先定个锚点

一,Request原理

上图是我对它的理解。

二,继承体系

ServletRequest 接口
|
HttpServletRequest 接口
|
RequsetFacade (tomcat实现的类)

三,Request的功能

1. 获取请求的消息数据
   1.获取请求行
      - GET /test/demo01?name=zhangsan HTTP/1.1
      - 方法:          
         后面加***代表比较重要常用到其余混个脸熟即可。
             1. String getMethod() 获取访问方式 get 
             2. String getContextPath() 获取虚拟目录 /test   ***
             3. String getServletPath() 获取Servlet路径  /demo01
             4. String getQueryPath()  获得参数 name=zhangsan  一般不用此方法
             5. String getRquestURI() 获得请求URI  /test/demo01     ***
             6. String getRquestProtocol() 获得请求协议 http/1.1
             7. String getRemoteAddress() 获得客户机的ip地址    
   2. 获取请求头
             String getHeader() 通过请求头名字获取值;***经常用
             Enumeration<String> getHeaderNames() 获取所有请求头,返回的是一个特殊的Enum  了解即可。不咋用

   3. 获取请求体  careful:只有post请求才有请求体,也就是说下方这些只能是post的才能用!!!
          1,先获取流对象
              BufferedReader getReader() 获取字符输入流用来读取请求体内容,只能读取字符文本
              ServletInputStream getInputStream() 获取字节输入流 用于文件的传输
          2,从流中取得数据
              例如 字符流的 String readLine()  读取一行数据
2. 其他功能
   1. 获取请求参数的通用方式
      1. String getParameter(String name) 通过参数名称获取参数值
      2. String[] getParameterValues(String name) 通过参数名获取一组参数值,比如一组复选框
      3.Enumeration<String> getParameterNames() 获取所有参数名称 相同名称只能存一个 
            例如同组复选框参数名相同,根据参数名只能获得一个值
      4.map<String,String[]> getParameterMap() 获取所有参数封装在map集合中
            能够解决getParameterNames作用复选框时产生的漏参数值问题
      **中文乱码问题**
            get请求:在tomcat8之后 tomcat内部已经自动实现解决乱码问题了
            post请求:需要我们手动设置编码方式
                  因为获取参数的方法内部也是封装了流,所以加上 request.setCharacterEncoding("utf-8")
   2. 请求转发:服务器内部资源跳转方式  本质上仍是一次请求
       首先获得一个RequestDispatcher对象  req.getRequestDispatcher()
       然后调用此对象的方法forward(Request req,Response resp)
       careful:还有一种重定向转发调度,可以转发到服务器外部资源与这有很大区别。  
   3. 共享数据
      * 域对象:一个有作用范围的对象,可在一定范围内共享数据
      * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
      *方法:
            void setAttribute(String name,Object obj) 通过键值对存储数据
            Object getAttribute(String name) 通过key值取 value
            void removeAttribute(String name) 通过key移除 数据
   4. ServletContext 有单独随笔

ServletContext单开随笔在这

posted @ 2020-07-12 00:16  北宸z  阅读(100)  评论(0)    收藏  举报