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

JavaWeb-request详解

程序员文章站 2022-06-11 15:39:10
...

首先上图
JavaWeb-request详解
在对继承关系有了一个概念之后,我们进入正题:
response是由服务器创建的,根据http协议封装请求消息的对象,我们通过它获取请求消息,让我们具体看一下这个对象输出的信息
JavaWeb-request详解
我们发现打印的对象信息并不在servlet api中,而是tomcat内部实现,我们打开与之对应的tomcat的java包
JavaWeb-request详解
可以发现HttpServletRequest并没有实现类,而是tomcat提供了实现HttpServletRequest的类,并创建了request对象

Request工作流程

在了解了request对象具体创建过程后,我们可以进一步探究它的工作流程
JavaWeb-request详解

Request请求数据

如果不理解请求消息数据格式,请参考下图
JavaWeb-request详解

请求消息数据格式(对应图片):

  • 请求行:请求方式 请求url HTTP协议版本
  • 请求头:请求头名称 : 请求头值
  • 请求空行:空行
  • 请求体(正文):Get方式没有请求体,封装post方式请求消息的请求参数

这里介绍两种请求方式

方式 区别
GET 请求参数在请求行中,url长度有限,不太安全
POST 请求参数在请求体,url长度没有限定,相对安全

接下来就可以按照下列的方法使用request对象

1.获取请求行数据

Get /TestRequest/Demo01?name=zhangsan HTTP/1.1

对应这个请求行

 --获取请求方式:String getMethod()//GET
--*获取虚拟路径:String getContextPath();         /TestRequest
--	获取servlet路径:String getServletPath ;      /Demo01
--获取get方式请求参数:String getQueryString();    name=zhangsan
--*获取请求URI:String getRequestURI();           /TestRequest/Demo01
	String getContextPath() ---web应用的名称
--*获取请求URL:String getRequestURL();        http://localhost/TestRequest/Demo01
--获取协议及版本:String getProtocol()             HTTP/1.1
--获取客户机的IP地址:String getRemoteAddr()

2.获取请求头数据

  • 通过请求头的名称获取请求头的值:String getHeader(String name)
  • 获取所有请求头的名称:Enumeration<> getHeaderNames()

3.获取请求体数据

  • 只有POST方式才有请求体,在请求体中封装了POST请求参数

4.根据参数名称获取参数值

  • String getParamater(String name)
  • String[] getParameterValues(String name)根据名称获取参数列表

5.请求转发(一种在服务器内部资源跳转的方式)

  • 步骤:
    • 使用request对象获取请求转发器对象RequestDispatcher getRequestDispatcher(String path)
    • 使用RequestDispatcher 对象进行转发forward(ServletRequest request,ServletResponse response)
      例:
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/Demo02");
        requestDispatcher.forward(req,resp);
    }
  • 特点:
    • 浏览器地址没有发生变化
    • 只能转发到当前服务器内部资源中,如果内部资源不存在,404
    • 内部多个资源访问的是同一次请求

6.共享数据

  • request域:代表一次请求,一般用于请求转发的多个资源*享数据
  • 方法
    • 1.void setAttribute(String name,Object obj);存储数据
    • 2.Object getAttribute(String name);通过键获取值
    • 3.void removeAttribute(String name);通过键一出键值对

7.获取ServletContext

方法:ServletContext getServletContext()

相关标签: java servlet