7、Request

Request

  • 相关概念
  • 获取请求消息数据
  • 其它功能

一、相关概念

1.1、什么是Request?

  由服务器创建的一个对象,里面封装了请求消息的相关信息。

1.2、请求消息的原理

  1. 当Tomcat接收到请求消息时,会第一时间解析请求消息,获取请求消息的内容和目标访问资源
  2. 创建Request对象和Responce对象,将请求消息中的数据封装进Request对象中
  3. 根据目标访问资源(如:xxx/libibrary/demo1)创建对应Servlet对象(第一次),调用Servlet对象的service()方法,并将Request对象和Responce对象丢进去。

二、获取请求消息数据

2.1、获取请求行数据

请求行数据:GET http://localhost:8080/project1/demo1?name=zhangsan&pswd=123456 HTTP/1.1

  1. 获取请求方式————>>HttpServletRequest

    String getMethod();//GET
    
  2. 获取URL————>>HttpServletRequest

    StringBuffer getRequestURL();//http://localhost:8080/project1/demo1
    
  3. 获取协议及版本号————>>ServletRequest

    String getProtocol();//HTTP/1.1
    String getScheme();//http
    
  4. 获取请求主机的IP地址和端口号————>>ServletRequest

    String getRemoteAddr();//0:0:0:0:0:0:0:1
    int geServletPort()//11032
    
  5. 获取URI————>>HttpServletRequest

    String getRequestURI();//   /project1/demo1
    
  6. 获取虚拟目录————>>HttpServletRequest

    String getContextPath();//  /project
    
  7. 获取Servlet路径————>>HttpServletRequest

    String getServletPath();//  /demo1
    
  8. 获取请求参数————>>HttpServletRequest

    String getQueryString();//name=zhangsan&pasw=123456
    

在这里插入图片描述

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

2.2、获取请求头数据

  1. 通过请求头的名称获取请求头的值

    String getHeader(String name);
    
  2. 获取所有的请求头名称

    Enumeration<String> getHeaderNames();
    
    //案例演示
    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
        Enumeration<String> en = req.getHeaderNames();
        //Get模式的请求参数不在这里面
    	while(en.hasMoreElements()){
    		String name = en.nextElement();
    		String value = req.getHeader(name);
    		System.out.println(name+"----"+value);
    	}
    }
    
  3. 获取请求参数(get模式)

    String getParameter(String name);
    

2.3、获取请求体数据

  只有POST请求方式才有请求体,请求体中封装了Post请求的请求参数。

  1. 获取流对象

    BufferedReader getReader();//获取字符输入流,可以操作所有类型数据
    

三、其它功能

3.1、获取请求参数的通用功能(GET/POST)

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

    String getParameter(String name);
    
  2. 根据参数名称获取参数值的数组

    String[] getParameterValues(String name);
    
  3. 获取所有的请求参数名称

    Enumeration<String> getParameterNames();
    
  4. 获取所有请求参数的键值对集合

    Map<String,String[]> getParameterMap(); 
    

中文乱码问题

  • get模式:Tomcat已经内部将乱码问题处理了,所以get模式一般不会出现乱码问题
  • post模式:需要将request的流编码改成和页面一样。
    req.setCharacterEncoding(“UTF-8”);

3.2、请求转发

  1. 获取请求转发器对象

    RequestDispatcher awr = request.getRequestDispatcher("/demo9");//创建转发器对象
    
  2. 通过转发器对象进行请求转发

    awr.forward(reqquest,response);//请求转发
    

3.3、共享数据

  request对象本质是一个域对象,当服务器接收到请求时创建,当服务器响应请求时释放。其作用域就是一次完整的请求,利用作用域的特点,我们可以实现一些信息的共享。

  1. 存储数据

    void setAttribute(String key,Object obj);//向域中存储数据
    
  2. 通过键从域中取值

    Object getAttribute(String key);//通过键名从域中取值
    
  3. 通过键从域中移除键值对

    void removeAttribute(String key);//利用键名从域中删除键值对
    
  4. 案例

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    	req.setAttribute("message1","surprize1");//存值
    	req.setAttribute("message2","surprize2");//存值
    	req.getRequestDispatcher("/demo5").forward(req,resp);//请求转发——>>/demo5
    }
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    	System.out.println(req.getAttribute("message1"));//surprize1
    	req.removeAttribute("message2");//删除键值对
    	System.out.println(req.getAttribute("message2"));//null
    }
    

3.4、获取ServeletContext

ServletContext getServletContext();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值