Java Forward 和 Redirect 的区别
1. 概述
本文将介绍 Java 中 Forward 和 Redirect 两种不同的页面跳转方式的区别。首先,我们将通过一个简单的示例来解释这两种方式的流程和使用方法。然后,我们将逐步分析每一步需要做什么,给出相应的代码示例并对其进行注释。
2. 示例
假设我们有一个简单的 web 应用程序,其中包含两个页面:index.html
和 hello.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 运行项目
将项目部署到服务器中并启动