HTTP协议之Request对象

request

request对象

1.request和response对象是由服务器创建的。我们来使用他们
2.request对象是来获取请求消息,response对象是来设置响应消息。

在这里插入图片描述

Request对象继承体系结构

ServletRequest             --接口
    继承
HttpServletRequest        --接口
    实现
Org.apache.catalina.connector.RequestFacade 类(tomcat)

request功能

1.获取请求消息

1.1获取请求行数据

* GET  /day/demo1?name=zhanshan  HTTP/1.1
* 方法:
            1.获取请求方式:GET
                    String getMethod()
            2.(*)获取虚拟目录: /day
                    String getContextPath()
            3.获取Servlet路径:/demo1
                     String getServletPath()
            4.获取get方式的请求参数: name=zhanshan
                     String getQueryString()
       5.(*)获取请求的URI:/day/demo1
               String getRequestURI()     :/day/demo1
               StringBuffer getRequestURL()   :  http://localhost:8080/day/demo1

           URL:统一资源定位符  
               URL小于URI  
           URI:统一资源标识符

       6.获取协议及版本:HTTP/1.1
               String getProtocol()        
       7.获取客户机的IP地址
               String getRemoteAddr()

1.2获取请求头数据

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

3.获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了请求的请求参数

步骤:
        1.获取流对象
                1.BUfferedReader getHeader()  :获取字符输入流,只能操作字符数据。
                2.ServletInputStream()  :获取字节流,可以操作所有类型的数据
        2.再从流对象中拿数据

2.其他功能

2.1获取请求参数 的通用方式

GET和POST请求方式都可以使用以下方法:
this.DoPost(request,response)

1.String getParamterer(String name) 
       //根据参数名称获取参数值 username=1&password=2
2.String[]  getParamtererValues(String name)
      //根据参数名称获取参数值与数组  hobby=1& hobby=2
3.getParameterNames()
      //获取所有请求的参数名称
4.Map<String,String[]> getParameterMap()
        //获取所有集合的Map集合

乱码问题:

设置流的字符集:
            在获取参数前,设置request.setcharacterEncoding("utf-8");

3.请求转发

一种在服务器内部的资源跳转方式
转发

3.1步骤:

1.通过request对象获取请求转发器对象
   RequestDispatcher  getRequestDispatcher(String path)
2.使用 RequestDispatcher对象进行转发
  forward(ServletRequest  request,ServletResponse response)
1
2
3
4
5
//方式1
RequestDispatcher rd = request.getRequestDispatcher("/Demo3");
rd.forward(request,response);
//方式2
request.getRequestDispatcher("/Demo3").forward(request,response);

3.2特点

1.浏览器地址栏路径不发生变化
2. 只能转发到当前服务器内部资源中
3. 转发是一次请求

4.共享数据

4.1域对象

一个作用范围的对象,可以在范围内共享数据。

request域:
         代表一次请求,一般用于请求转发的多个资源中共享数据
方法:
    1.setAttrbute(String name,Oject obj):存储数据
    2.Object getAttrbute(String name)   :通过键获取数据
    3.void removeAttrbute(String name ):通过键移除键值对

文章目录
  1. 1. request对象
  2. 2. Request对象继承体系结构
  3. 3. request功能
    1. 3.1. 1.获取请求消息
      1. 3.1.1. 1.1获取请求行数据
      2. 3.1.2. 1.2获取请求头数据
    2. 3.2. 2.其他功能
      1. 3.2.1. 2.1获取请求参数 的通用方式
    3. 3.3. 3.请求转发
      1. 3.3.1. 3.1步骤:
      2. 3.3.2. 3.2特点
    4. 3.4. 4.共享数据
      1. 3.4.1. 4.1域对象
,