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

文章目录

  • HttpServletRequest类
    • HttpServletRequest 类作用
    • HttpServletRequest 类的常用方法
      • 简单使用
    • Servelt获取请求参数
      • 首先准备一个form表单
      • Servlet配置
        • 小问题
  • 请求转发
    • 释义
    • 简单使用
      • Servlet1
      • Servlet2
    • 请求转发特点

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表单


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Testtitle>
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、不可以访问工程以外的资源

你可能感兴趣的:(#,我的JAVA学习之路)