Java Forward 和 Redirect 的区别

1. 概述

本文将介绍 Java 中 Forward 和 Redirect 两种不同的页面跳转方式的区别。首先,我们将通过一个简单的示例来解释这两种方式的流程和使用方法。然后,我们将逐步分析每一步需要做什么,给出相应的代码示例并对其进行注释。

2. 示例

假设我们有一个简单的 web 应用程序,其中包含两个页面:index.htmlhello.html。用户在 index.html 页面上输入姓名,并点击“提交”按钮。然后,我们需要在 hello.html 页面上显示用户输入的姓名。

3. 流程

下表展示了 Forward 和 Redirect 两种页面跳转方式的流程。

步骤 Forward Redirect
1 用户访问 index.html 页面 用户访问 index.html 页面
2 用户输入姓名并点击“提交”按钮 用户输入姓名并点击“提交”按钮
3 后端接收到请求,进行数据处理 后端接收到请求,进行数据处理
4 后端将数据存储到请求的属性中 后端将数据存储到会话的属性中
5 后端将请求转发到 hello.html 页面 后端将请求重定向到 hello.html 页面
6 hello.html 页面显示用户输入的姓名 hello.html 页面显示用户输入的姓名

4. 代码示例

4.1 创建项目结构

我们首先需要创建一个简单的 Java web 项目。项目结构如下所示:

.
├── src
│   ├── main
│   │   ├── java
│   │   └── webapp
│   │       ├── WEB-INF
│   │       │   └── web.xml
│   │       ├── index.html
│   │       └── hello.html
│   └── test
└── pom.xml

4.2 编写 index.html

webapp 目录下创建 index.html 文件,并添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
    <form action="process" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required>
        <button type="submit">Submit</button>
    </form>
</body>
</html>

4.3 编写 hello.html

webapp 目录下创建 hello.html 文件,并添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    Hello, <span id="name"></span>!
</body>
</html>

4.4 编写后端处理代码

src/main/java 目录下创建 ProcessServlet.java 文件,并添加以下代码:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/process")
public class ProcessServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取用户输入的姓名
        String name = request.getParameter("name");

        // 将姓名存储到请求的属性中
        request.setAttribute("name", name);

        // 转发到 hello.html 页面
        request.getRequestDispatcher("/hello.html").forward(request, response);
    }
}

4.5 配置 web.xml

WEB-INF 目录下的 web.xml 文件中添加以下配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
         xmlns="
         xsi:schemaLocation=" 
         version="4.0">

    <servlet>
        <servlet-name>ProcessServlet</servlet-name>
        <servlet-class>ProcessServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ProcessServlet</servlet-name>
        <url-pattern>/process</url-pattern>
    </servlet-mapping>

</web-app>

4.6 运行项目

将项目部署到服务器中并启动