欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HttpServletRequest接口

程序员文章站 2024-02-04 15:30:40
...

看完本文章可看Servlet请求转发

HttpServletRequest接口

  1. HttpServletRequest是一个接口,Servlet规范中重要的接口之一

  2. 继承关系

    public interface HttpServletRequest extends ServletRequest
    
  3. HttpServletRequest接口的实现类时Web容器负责的,Tomcat服务器有自己的实现。但是程序要还是只需要面向HttpServletRequest接口调用方法即可,不需要关心具体的实现类

  4. HttpServletRequest这个对象中封装了哪些信息?

    封装了HTTP请求协议的全部内容:

    • 请求方式

    • URI

    • 协议版本号

    • 表单提交的数据

  5. HttpServletRequest一般对象的名字叫做:request;

    HttpServletRequest对象代表一次请求,一次请求执行一次service()方法,对应一个request对象,100个请求对应100个request对象,所以request对象的生命周期是短暂的;

    什么是一次请求?到目前为止,我们可以这样理解一次请求:在网页上点击超链接,到最终网页停下来,这就是一次完整的请求;

  6. 获取用户信息,表单提交的这些数据被自动封装在request对象中了
    表单数据是这样的格式提交的,POST请求,在请求体中提交,数据格式:

    username=admin&password=123&sex=boy&interest=sport&interest=music&grade=gz&introduce=student
    

    表单提交的数据会自动封装到request对象中,request对象中有一个Map集合,存储这些数据

    Map<String, String>
    key          value(value是数组)
    -------------------------------
    username     {"admin"}
    password     {"123"}
    sex          {"boy"}
    interest     {"sport",music}
    grade        {"gz"}
    introduce    {"IAmAStudent"}
    
  7. HttpServletRequest中常用的方法

    表单提交的数据会封装在request对象的Map集合中,key是name,value是一个一维数组

    /*获取浏览器提交的数据*/
    String getParameter(String name) 获取key对应的一维数组的首元素
    Map getParameterMap() 获取request对象中的Map集合
    Enumeration getParameterNames() 获取所有的Map集合中所有的key
    String[] getP arameterValues(String name) 返回String数组,数组包含key对应的多个value值
    
    /*获取路径、URL、URI、IP*/
    String getContextPath() 获取上下文路径(web项目根路径)
    String getMethod() 获取浏览器请求方式
    String getRequestURI() 获取请求的URI
    StringBuffer getRequestURL() 获取请求的URL
    String getServletPath() 获取请求的ServletPath,即servlet对应的请求路径
    String getRemoteAddr() 获取客户端IP地址
    
    /*从一次请求对应的HttpServletRequest对象范围中增删查数据*/
    Object getAttribute(String name) 从此次请求对应的request对象范围中获取数据
    void setAttribute(String name, Object o) 从此次请求对应的request对象范围中存储数据
    void removeAttribute(String name) 从此次请求对应的request对象范围中删除数据
    
    /*请求转发器*/
    RequestDispatcher getRequestDispatcher(String path) 获取请求转发器
    
    /*编码*/
    void setCharacterEncoding(String env) 覆盖此请求正文中使用的字符编码的名称
    
    /**/
    HttpSession getSession() 返回与此请求关联的当前会话,或者如果该请求没有会话,则创建一个。
    Cookie[] getCookies() 返回一个数组,其中包含Cookie 客户端与此请求一起发送的所有对象。
    
  8. HttpServletRequest和ServletContext的范围

    • HttpServletRequest是一次请求对应一个request对象,所以范围小

    • ServletContext是webapp的上下文对象,范围极大

    • setAttribute、getAttribute、removeAttribute这些方法,在ServletContext和ServletContext接口中都存在,用来在其各自的范围内进行数据的增删查,所以在request对象的范围增删查和在Servlet上下文对象的范围增删查是不一样,且互不干扰的

  9. 一次请求Servlet对应的request对象,在此request中存储数据,可以在此request对象中取出;但是在另一次请求Servlet对应的request对象,是没有第一次请求时在request对象中添加的数据的。

    要解决这个不同请求对应的不同request对象之间无法共享数据的问题,需要使用请求转发技术