Servlet 页面跳转:转发和重定向

Servlet中页面跳转分为转发(forward)和重定向(redirect)。转发在服务器端完成,地址栏不变;重定向发生在客户端,地址栏内容会变化。转发适合内部数据传递,重定向适用于结束请求并启动新请求。示例包括login.jsp到succeed.jsp的跳转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们浏览一个网页的时候,从index.jsp页面到xx.jsp页面,这里存在一个跳转的过程。

Servlet实现页面跳转有两种办法:转发和重定向。

注意哦,转发对新页面的请求是发生在后端,重定向对新页面的请求是发生在前端。

 

1、转发(forword)

转发是在服务器端起作用的,当使用 forward() 方法时,Servlet 容器传递HTTP请求,从当前的 Servlet 或 JSP,此过程仍然在 request 的作用范围内。转发后,浏览器的地址栏内容不变。

转发使用 HttpServletRequest 对象的 forward() 方法实现,对应的 Servlet 语法格式如下:

request.getRequestDispatcher(String path).forward(ServletRequest request, ServletResponse response)

2、重定向(sendredirect)

重定向是在用户的浏览器端工作的,是 Servlet 对浏览器做出响应后,浏览器再次发送一个新的请求。重定向后,浏览器的地址栏内容发生变化。

重定向使用 HttpServletResponse 对象的 sendRedirect() 方法实现,对应的 Servlet 和 JSP 语法格式如下:

response.sendRedirect(String location)

示例:编写用户登录功能,实现页面的跳转。

(1)创建 login.jsp 登录页面。

        <form name="form1" method="post" action="servlet/LoginServlet">
        <table>
            <tr>
                <td>用户:</td>
                <td><input type="text" name="user" style="width:200px" /></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password" style="width:200px"/></td>
            </tr>
            <!-- 以下是提交、取消按钮 -->
            <tr>
                <td>
                    <input type="submit" value="登录" />
                </td>
                <td>
                    <input type="reset" value="取消" />
                </td>
            </tr>
        </table>
    </form>

(2)创建 succeed.jsp 成功登录页面。

<body>
    <h3>恭喜用户【<%= request.getParameter("user") %>】登录成功!</h3>
    <p>您好,欢迎访问 pan_junbiao的博客</p>
    <p>博客地址:https://blog.youkuaiyun.com/pan_junbiao</p>
</body>

(3)创建 LoginServlet.java 登录验证Servlet类。


@WebServlet(name = "LoginServlet", urlPatterns = "/servlet/LoginServlet")
public class LoginServlet extends HttpServlet
{
    private static final long serialVersionUID = 1L;
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // 将输出转换为中文
        request.setCharacterEncoding("UTF-8");
 
        // 设置输出为中文
        response.setCharacterEncoding("UTF-8");
 
        // 获取参数
        String user = request.getParameter("user");
        String password = request.getParameter("password");
 
        // 登录验证信息
        if (user.equals("pan_junbiao的博客") && password.equals("123456"))
        {
            // 如果验证成功,则转发succeed.jsp页面,并在页面显示用户名
            request.getRequestDispatcher("/succeed.jsp").forward(request, response);
        } else
        {
            // 如果验证失败,则重定向到登录页面
            response.sendRedirect("/login.jsp");
        }
    }
}

 

执行结果:

(1)登录页面:

(2)成功登录页面:

经验:

转发和重定向:在刚刚学习转发和重定向的时候,在使用方面哪种方式进行页面的跳转?其实它们之间有一个很清晰的区别,那就是数据的传递。如果你想把数据通过 request 作用域传递到下一个页面或者 Servlet(例如使用getAttribute方法),那就使用转发。反之,就使用重定向。

 

 

参考资料:

Servlet 网页重定向

https://www.runoob.com/servlet/servlet-page-redirect.html

Servlet实现页面的跳转

https://blog.youkuaiyun.com/pan_junbiao/article/details/89358936

Servlet 网页重定向

https://blog.youkuaiyun.com/ziyonghong/article/details/84348632

Servlet页面跳转的两种方式

https://blog.youkuaiyun.com/weixin_30752699/article/details/97551041

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值