Servlet 网页重定向是将客户端请求引导到另一个URL的技术,常用于页面跳转、权限控制或资源迁移。本文将介绍如何在Servlet中实现重定向。


目录

  1. 网页重定向概述
  2. 使用 sendRedirect()
  3. 与 forward 的区别
  4. 动态重定向
  5. 完整示例
  6. 部署与测试
  7. 参考资料

1. 网页重定向概述

  • 定义:服务器通知客户端访问另一个URL(状态码302或301)。
  • 用途
  • 用户登录后跳转。
  • 处理过时URL。
  • Servlet 方法HttpServletResponse.sendRedirect()

2. 使用 sendRedirect()

基本用法

response.sendRedirect("/myapp/newpage");
  • 发送302状态码,客户端发起新请求。

绝对URL

response.sendRedirect("https://example.com");

注意

  • 调用后不能再写响应内容,否则抛出 IllegalStateException

3. 与 forward 的区别

  • sendRedirect
  • 客户端行为,URL改变。
  • 两次请求,数据不共享。
  • forward
  • 服务器内部转发,URL不变。
  • 一次请求,数据可通过 request 共享。
request.getRequestDispatcher("/newpage").forward(request, response);

4. 动态重定向

根据条件跳转

String role = request.getParameter("role");
if ("admin".equals(role)) {
    response.sendRedirect("/myapp/admin");
} else {
    response.sendRedirect("/myapp/user");
}

添加参数

String param = "message=success";
response.sendRedirect("/myapp/result?" + param);

5. 完整示例

以下是一个展示重定向的Servlet。

HTML:redirect.html

<!DOCTYPE html>
<html>
<head><title>重定向测试</title></head>
<body>
    <h2>登录</h2>
    <form method="POST" action="/myapp/redirect">
        角色: <input type="text" name="role"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

Servlet:RedirectServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.sendRedirect("/myapp/redirect.html");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String role = request.getParameter("role");

        if (role != null && !role.trim().isEmpty()) {
            if ("admin".equalsIgnoreCase(role)) {
                response.sendRedirect("/myapp/admin.html");
            } else {
                response.sendRedirect("/myapp/user.html?role=" + role);
            }
        } else {
            response.sendRedirect("/myapp/error.html");
        }
    }
}

附加页面

  • admin.html
<h1>欢迎管理员</h1>
<a href="/myapp/redirect.html">返回</a>
  • user.html
<h1>欢迎用户: <%= request.getParameter("role") %></h1>
<a href="/myapp/redirect.html">返回</a>
  • error.html
<h1>错误: 请输入角色</h1>
<a href="/myapp/redirect.html">返回</a>

配置:web.xml

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>RedirectServlet</servlet-name>
        <servlet-class>RedirectServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RedirectServlet</servlet-name>
        <url-pattern>/redirect</url-pattern>
    </servlet-mapping>
</web-app>

6. 部署与测试

部署

  1. 编译:
   javac -cp /path/to/tomcat/lib/servlet-api.jar RedirectServlet.java
  1. .class 文件放入 myapp/WEB-INF/classes/
  2. redirect.htmladmin.htmluser.htmlerror.html 放入 myapp/
  3. 更新 web.xml
  4. 部署 myapp 到Tomcat的 webapps 目录。
  5. 启动Tomcat。

测试

  • 访问:http://localhost:8080/myapp/redirect.html
  • 输入“admin”:跳转到 admin.html
  • 输入“user”:跳转到 user.html?role=user
  • 留空:跳转到 error.html

7. 参考资料

出站链接

其他资源

  • 《Servlet & JSP: A Tutorial》 – 重定向章节。
  • X社区:搜索 #ServletRedirect 获取示例。

这篇指南展示了Servlet中网页重定向的实现。如果需要更复杂功能(如重定向后传递复杂数据或与Session结合),请告诉我!