javaweb入门(一)——serlvet-08-Request学习

HttpServletRequest介绍

HttpServletRequest代表客户端的请求,用户使用HTTP协议访问服务器,其中的HTTP请求新消息会被封装到HttpServletRequest中,所以通过HttpServletRequest,我们可以获取客户端请求的信息
请求主要有两个应用场景:获取前端传递的参数请求转发

1. 获取前端传递的参数

我主要需要掌握两个方法:req.getParameter();req.getParameterValues();

        req.getParameter();
        req.getParameterValues();

我们主要就是靠req.getParameter()来获取前端传来的参数,而getParameter()getParameterValues()之间的区别就是一个是获取一个参数,一个是获取多个参数

2.请求转发

关于请求转发,我们使用的语句是:

	req.getRequestDispatcher("/success.jsp").forward(req,resp);

其中getRequestDispatcher()中的参数是请求转发的路径。关于这个路径我们需要知道的是:请求转发的路径在加了"/"之后就默认为项目当前路径,这点和重定向不同。

为了方便我们理解Request的常用方法,我们接下来做一个案例。
在本次案例中,我们需要做一个简单的前端登录页面,此页面将用户填写的数据通过request传给servlet,我们在接受的servlet中获取前段传来的参数并且使用请求转发将路径转发到登录成功页面。
我们需要做:

  1. 编写一个简单的登录页面和登录成功页面。
  2. 编写一个serlvet获取request之中的参数,并且使用请求转发将请求转发登录成功页面。

登录页面:

<%@page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<body>
<h2>Hello World!</h2>
<form action="${pageContext.request.contextPath}/dispatcher" method="post">
    Username : <input name="username" type="text"> <br>
    Password : <input name="password" type="text"> <br>
    爱好 : <input type="checkbox" name="hobbies" value="代码">代码
    <input type="checkbox" name="hobbies" value="游戏">游戏
    <input type="checkbox" name="hobbies" value="运动">运动
    <input type="checkbox" name="hobbies" value="电影">电影
    <br>
    <input type="submit">
</form>
</body>
</html>

其中我们需要注意:<%@page contentType="text/html;charset=UTF-8" language="java" %>这句话是将页面的内容格式设置为UTF-8,以此保证出现中文字符不会乱码。

登录成功页面:

<%--
  Created by IntelliJ IDEA.
  User: 10437
  Date: 2023/9/25
  Time: 20:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Success</title>
</head>
<body>
<h1>登录成功!!!</h1>
</body>
</html>

接受Servlet:

package com.kuang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class RequestDispatcherServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.设置req和resp的编码类型
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
//        2.获取前端参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobbies = req.getParameterValues("hobbies");
//        3.输出获取的参数
        System.out.println("username : " + username);
        System.out.println("password : " + password);
        System.out.println(Arrays.toString(hobbies));
//        4.请求转发
        req.getRequestDispatcher("/success.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

我们需要注意在请求或者响应的数据中如果有中文字符的话,我们需要添加.setCharacterEncoding("utf-8")来预防乱码。

在这个案例中,我们使用request获取usernamepassword这两个单体的输入框类型的数据时,我们只需要使用getParameter()即可。但是在我们获取hobbies这种多个复选框数据时,就需要使用到getParameterValues()来获取一个字符数组。

请求转发和重定向

那么在我们学习完请求转发以及重定向之后,我们再次总结一下请求转发以及重定向的区别:
相同点:请求转发和重定向都可以实现页面跳转。
不同点:

  1. 请求转发在页面跳转之后页面的URL不会改变重定向在实现页面跳转之后页面URL会改变。造成这个原因是:请求转发实现页面跳转的方式是客户端访问的Serlvet A将请求转发给另一个Servlet BB在处理完转发过来的请求之后,将响应返回给AA之后再把响应转发给客户端从始至终只有一个请求重定向实现页面跳转的方式是客户端在将请求发送给A之后,A将需要访问B的响应返回给客户端客户端在接受到请求之后,再发一份请求给BB在接受请求并且处理完请求之后,将响应返回给客户端,从始至终有两个请求
  2. 请求转发是通过request来实现的,重定向是通过response来实现的。
  3. 请求转发访问页面的路径是从当前项目路径开始访问的,重定向访问页面路径是从localhost来开始访问的。
  4. 请求转发的代码是307重定向302

重定向:

1.发送请求
2.通知A访问B
3.发送请求
4.返回请求
客户端
web资源A
web资源B

请求转发:

1.发送请求
3.转发请求
4.返回响应
4.将B返回的响应返回
客户端
web资源A
web资源B
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值