zoukankan      html  css  js  c++  java
  • JavaWeb 之 HttpServletRequest 类

    一、Request 对象和 Response 对象原理

      request和response对象是由服务器创建的,供我们使用的。

      request对象是来获取请求消息,response对象是来设置响应消息。

      原理示意图

    二、Request 对象继承体系结构

      

    三、HttpServletRequest 接口

      每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好到 Request 对象中,每次请求都创建一个 Request 对象,请求完成后该对象就销毁了。

      然后传递到 service 方法(doGet 和 doPost)中供我们使用,通过 HttpServletRequest 对象,课获取到所有请求信息。

    三、HttpServletRequest 功能

      1、获取请求消息数据

        (1)获取请求行数据

           常用方法:

    (1)String getMethod() :         获取请求方式
    (2)String getContextPath():     获取虚拟目录[重要]
    (3)String getServletPath():     获取 servlet 路径
    (4)String getQueryString():     获取get方式请求参数
    (5)String getRequestURI():      获取请求URI[重要]
    (6)StringBuffer getRequestURL():获取请求的URL
    (7)String getProtocol():        获取协议及版本
    (8)String getRemoteAddr():      获取客户端的IP地址
    (9)String getRemoteHost(): 获取客户端的主机名

          注意

          URI:统一资源标识符;URL:统一资源定位符;两者区别:URI 与 URL

          Demo:

    1 请求行数据 GET /servletDemo/demo1?name=zhangsan HTTP/1.1
    2 String getMethod():          获取到 GET
    3 String getContextPath():     获取到 /servletDemo
    4 String getServletPath():     获取到 /demo1
    5 String getQueryString():     获取到 name=zhangsan
    6 String getRequestURI():      获取到 /servletDemo/demo1
    7 StringBuffer getRequestURL():获取到 http://localhost/servletDemo/demo1
    8 String getProtocol():        获取到 HTTP/1.1
    9 String getRemoteAddr():      获取到 请求机器的IP地址

        (2)获取请求头数据

          常用方法:

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

        (3)获取请求体数据

            请求体:只有POST请求方式,才有请求体,在请求体重封装了POST请求的请求参数

            步骤:

            ① 获取流对象

    BufferedReader getReader():         获取字符输入流,只能操作字符数据
    ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

            ② 从流对象中拿数据

            Demo:

     1  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     2         //1.获取字符流
     3         BufferedReader br = request.getReader();
     4 
     5         //2.读取数据
     6         String line = null;
     7         while((line = br.readLine()) != null) {
     8             System.out.println(line);   // 请求参数username=zs&password=abc
     9         }
    10     }

      2、获取请求参数

        获取请求参数通用方式:无论是 get 方式还是 post 请求方式都可以使用下列方法来获取请求参数

        常用方法

    (1)String getParameter(String name):           根据参数名称获取参数值    username=zs&password=abc
    (2)String[] getParameterValues(String name):   根据参数名称获取参数值的数组  hobby=java&hobby=python
    (3)Enumeration<String> getParameterNames():    获取所有请求的参数名称(相当于Iterator)
    (4)Map<String,String[]> getParameterMap():     获取所有参数的map集合,可以根据键(参数名)获取值(参数值)
    

               注意

           ① get方式:Tomcat 8 已经将 get 方式乱码问题解决了

           ② post 方式:获取中文会产生乱码

             解决方式:在获取参数前,设置 request 的编码与页面编码一致即可

    request.setCharacterEncoding("utf-8");

      3、作为域对象存取数据

         域对象:一个有作用范围的对象,可以在范围内共享数据;

         Request 域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据;

         常用方法

    void setAttribute(String name,Object obj):存储数据到request中
    Object getAttitude(String name):通过键获取值
    void removeAttribute(String name):通过键移除键值对

      4、获取请求转发对象

        请求的转发:指的是服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。

              注意:这是一种在服务器内部的资源跳转方式,无法跳转到外部的资源。

        实现步骤:

          ① 通过 request 对象获取请求转发器对象;

    RequestDispatcher getRequestDispatcher(String path): 获取请求转发器对象,path为转发到的路径
    

           ② 使用 RequestDispatcher 对象来进行转发

    forward(ServletRequest request, ServletResponse response):转发方法
    

         特点:

          ① 浏览器地址栏路径不会发生变化;

          ② 只能转发到自己工程的内部资源;

          ③ 转发是一次请求,可以共享 Request 域中的数据;

          ④ 可以转发到 WEB-INF 目录下

        注意

          ① 从外部(浏览器)无法直接访问 WEB-INF 目录下的资源,但是可以通过请求转发访问到;

          ② 执行完跳转的 servlet 的业务后,然后再回来继续执行原来的 servlet 的业务。

        原理图:

          

      5、获取 ServletContext 对象  

          通过 getServletContext() 方法获取 ServletContext 对象:

    ServletContext servletContext = request.getServletContext();通过request 对象获取 servletcontext 对象
    

      

      

  • 相关阅读:
    webstorm 2017 激活破解
    落在纸上的思考
    Mysql数据库备份脚本
    asp.net c# 打开新页面或页面跳转
    转正专业考试
    关于mysql-5.7.23-winx64.msi的安装
    win server 2012 R2 你需要先安装 对应于 KB2919355 的更新
    零碎
    按钮
    猪猪公寓——冲刺第一天
  • 原文地址:https://www.cnblogs.com/niujifei/p/11619202.html
Copyright © 2011-2022 走看看