请求转发和重定向问题

1.概述

今天在写项目的时候,遇到了一个重定向出的问题,最后用请求转发得以解决;我们知道请求转发和重定向都可以实现页面的跳转,区别是请求转发不会改变浏览器的Url并且使用的是同一对request和response对象,而重定向则会改变浏览器的url并且会产生多对request和response对象。

2.问题的产生和解决

2.1问题的产生

那么我今天遇到的问题是如何产生的呢?我是在Servlet里面设置在请求域里数据,然后想要在jsp里面取出数据,由于我用的是重定向跳转页面,也就是会产生多个请求和响应对象,但我在原来的请求域中设置了数据,但是我在页面跳转之后想在别的请求域取数据,于是取出的数据为null。

2.2问题的解决

由于使用重定向导致了前后请求域发生改变,因此我改用请求转发之后,跳转页面前后请求域一致,能正常取出数据,问题得以解决

3.代码和错误截图

3.1 jsp代码

<%@ page import="java.util.ArrayList" %>
<%@ page import="com.yw.pojo.User" %><%--
  Created by IntelliJ IDEA.
  User: YOga2
  Date: 2024/6/2
  Time: 16:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1">
    <tr>
        <th>用户id</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
        <th>地址</th>
        <th>邮箱</th>
        <th>QQ</th>
    </tr>
    <%

        ArrayList<User> list = (ArrayList<User>)request.getAttribute("list");
        for (User user : list) {
    %>
    <tr>
        <td><%=user.getId()%></td>
        <td><%=user.getName()%></td>
        <td><%=user.getGender()%></td>
        <td><%=user.getAge()%></td>
        <td><%=user.getAddress()%></td>
        <td><%=user.getEmail()%></td>
        <td><%=user.getQq()%></td>
    </tr>
    <%
        }
    %>

</table>
</body>
</html>

3.2Servlet代码

@WebServlet(name="ListServlet",urlPatterns={"/list"})
public class ListServlet extends HttpServlet {
    ListDao listDao = new ListDao();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.设置编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //2.执行业务
        ArrayList<User> list = listDao.list();
        //3.将数据保存到域中
        req.setAttribute("list",list);
        //4.请求转发跳转页面
        //原错误:重定向跳转页面
        //resp.sendRedirect("list.jsp");
        req.getRequestDispatcher("list.jsp").forward(req, resp);
    }

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

    }
}

3.3错误信息截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值