JavaWeb-request详解

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

Request工作流程

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

Request请求数据

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

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

  • 请求行:请求方式 请求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()

你可能感兴趣的:(Javaweb)