JavaWeb ----- HttpServletRequest类与请求转发

HttpServletRequest类

HttpServletRequest 类作用

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。

HttpServletRequest 类的常用方法

常用方法 说明
getRequestURI() 获取请求的资源路径
getRequestURL() 获取请求的统一资源定位符(绝对路径)
getRemoteHost() 获取客户端的 ip 地址
getHeader() 获取请求头
getParameter() 获取请求的参数
getParameterValues() 获取请求的参数(多个值的时候使用)
getMethod() 获取请求的方式 GET 或 POST
setAttribute(key, value); 设置域数据
getAttribute(key); 获取域数据
getRequestDispatcher() 获取请求转发对象

简单使用

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        i. getRequestURI() 获取请求的资源路径
        System.out.println("URI =>"+request.getRequestURI());
//        ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
        System.out.println("URL =>"+request.getRequestURL());
//        iii. getRemoteHost() 获取客户端的 ip 地址
        System.out.println("HOST =>"+request.getRemoteHost());
//        iv. getHeader() 获取请求头
        System.out.println("Header-UA =>"+request.getHeader("User-Agent"));
//        vii. getMethod() 获取请求的方式 GET 或 POST
        System.out.println("Method =>"+request.getMethod());
    }

Servelt获取请求参数

首先准备一个form表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
    <form action="http://localhost:8080/MyTest_war_exploded/paramter" method="get">
        用户名:<input type="text" name="username" ><br/>
        密码:<input type="text" name="password" ><br/>
        兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++
        <input type="checkbox" name="hobby" value="java">Java
        <input type="checkbox" name="hobby" value="python">python<br/>
        <input type="submit">
    </form>
</body>
</html>

Servlet配置

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobby = request.getParameterValues("hobby");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("爱好:"+ Arrays.asList(hobby));
    }

小问题

在post请求当中如果传中文可能会出现乱码问题加一句编码设置即可request.setCharacterEncoding("UTF-8");

请求转发

释义

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

简单使用

Servlet1

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求的参数(办事的材料)查看
        String username = request.getParameter("username");
        System.out.println("在Servlet1柜台中查看参数username"+username);
        // 给材料 盖一个章,并传递到 Servlet2(柜台 2)去查看
        request.setAttribute("Key","柜台1已经受理盖章");
        // 问路:Servlet2(柜台 2)怎么走
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");
        // 走向 Sevlet2(柜台 2)
        requestDispatcher.forward(request, response);
    }

Servlet2

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求的参数(办事的材料)查看
        String username = request.getParameter("username");
        System.out.println("在Servlet2柜台中查看参数username"+username);

        Object key = request.getAttribute("Key");
        System.out.println("柜台1设置的值"+key);

        // 处理自己的业务 System.out.println("Servlet2 处理自己的业务 ");
        System.out.println("Servlet2 处理自己的业务 ");
    }

请求转发特点

  • 1、浏览器地址栏没有变化
  • 2、他们是一次请求
  • 3、他们共享Request域中的数据
  • 4、可以转发到WEB-INF目录下,因为WEB-INF目录收到保护,我们不能访问,但请求转发可以
  • 5、不可以访问工程以外的资源

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/107235684
今日推荐