> 文档中心 > JSP四大域对象之Request对象

JSP四大域对象之Request对象


什么request对象

  • 就是请求对象,这个对象不是我们自己创建的,而是tomcat服务器帮助我们创建一个对象,我们直接拿来使用即可。
    request对象中封装了所有的请求消息格式中的数据。

request的体系结构?

javax.servlet.ServletRequest 接口--javax.servlet.http.HttpServletRequest 接口--org.apache.catalina.connector.RequestFacade 实现类 

request对象原理?

  1. 当我们使用浏览器向服务器发送请求的时候,tomcat服务器会创建一个request对象
  2. request对象被各种传递,直到传递到doGet()/doPost()中

request对象常见的方法

1. 获取请求消息的方法

  • a. 获取请求行的方法
String getMethod()//获取请求方式String getContextPath()//获取项目的虚拟路径String getServletPath()//获取访问的servlet的虚拟路径String getRequestURI()//获取请求的URIStringBuffer getRequestURL()//获取请求的URLString getQueryString()//获取请求参数//    注意:只有get请求,请求参数才会放在请求行中,才能使用这个方法String getProtocol()//获取协议版本号String getRemoteAddr()//获取IP地址
  • b.获取请求头的方法
String getHeader(String name)//根据请求头获取对应的值Enumeration<String> getHeaderNames()//获取所有的请求头Enumeration<String> getHeaders(String name)//根据请求头获取对应的所有的值//username:tom//username:jerryint getIntHeader(String name)//根据请求头获取对应的值,但是值只能是int类型
  • c.获取请求体的方法
    注意:只有post请求,才有请求体内容,才可以使用以下的方法
ServletInputStream getInputStream()BufferedReader getReader()

*2.其他功能的方法

  • a. 获取请求参数的通用方法

      *String getParameter(String name)//根据表单项的name属性值获取value属性值  Enumeration<String> getParameterNames()//获取所有的表单项的name属性值  String[] getParameterValues(String name)//根据表单项的name属性值获取所有的value属性值  *Map<String,String[]> getParameterMap()//将所有的表单项的name属性值和value属性值都封装到了map中
    • 获取请求参数中文乱码问题?
      • get请求:
        tomcat8之前:中文会出现乱码
        tomcat8之后:中文不会出现乱码

      • post请求:
        中文会出现乱码
        为什么会出现中文乱码?
        两边编码方式不一致才会出现中文乱码
        tomcat服务器默认编码为ISO-8859-1

      • 怎么解决中文乱码?
        只需要修改服务器默认编码即可
        request.setCharacterEncoding(“utf-8”);

  • b. 请求转发相关方法
    请求转发可以帮助实现servlet到其他的servlet或者是页面

    • Request对象:
      public RequestDispatcher getRequestDispatcher(String path)

    • RequestDispatcher:
      public void forward(ServletRequest request, ServletResponse response)

    • 请求转发的特点?

    1. 请求转发只能进行内部跳转
    2. 请求转发地址值是不会发生改变的
    3. 请求转发只包含一次请求和一次响应
  • c. 共享相关方法

    • 在web核心中有四大域对象,每个域对象管理自己所管辖的域范围
    • request不是一般的对象,是一个域对象,它所管辖的范围是一次请求和一次响应之间的范围
    • 凡是域对象,都具备的三个方法:
      • setAttribute(String key, Object value)
      • getAttribute(String key)
      • removeAttriubte(String key)
        注意:只能使用转发来实现资源的共享