JavaWeb组件(Servlet和JSP)交互--请求转发(forward)、重定向(redirect)
·
一、概念
1.1 Request和Response对比
| 比较项 | 请求转发 | 重定向 |
|---|---|---|
| 发生位置 | 服务器 | 浏览器 |
| 发送请求次数 | 1 | 2 |
| 地址是否发生改变 | 否 | 是 |
| 多个Servlet之间是否共享数据 | 是 | 否 |
| 能否访问WEB-INF下的资源 | 是 | 否 |
| 能否访问服务器外部资源 | 否 | 是 |
1.2 Servlet 三大作用域
| 作用域 | 类型 | 作用范围 |
|---|---|---|
| 请求域 | HttpServletRequest | 同一个请求之间能共享数据(地址不变) |
| 会话域 | HttpSession | 浏览器开启到关闭 |
| 上下文域 | ServletContext | 服务器的开启到关闭 |
二、请求转发
2.1 原理
交互行为发生在服务器端
2.2 特点
① 请求地址不发生改变
② 多个业务之间能够数据共享
③ 能够访问WEB-INF下的资源
④ 无法访问服务器外部资源
2.3 代码实现验证请求转发特点
首先创建一个简单的登录jsp页面,用于提供数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="/forward/one" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
①+② 请求地址不发生改变,通过jsp页面输入的用户名和密码数据,通过请求转发从第一个页面到第二个页面,访问地址未发生改变,但数据正常获取到了,如下图运行截图
代码实现:
发送端:
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("/forward/one")
public class OneForward extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求和响应的字符集
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//获取输入的用户信息,以验证是否可以进行数据共享
String username = req.getParameter("username");
String password = req.getParameter("password");
//在控制台输出 确保获取到了jsp中提交的数据
System.out.println("one username = " + username);
System.out.println("one password = " + password);
//请求转发
req.getRequestDispatcher("/forward/two").forward(req,resp);
}
}
获取端:
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("/forward/two")
public class TwoForward extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取输入的用户信息,以验证是否可以进行数据共享
String username = req.getParameter("username");
String password = req.getParameter("password");
//在控制台输出 确保获取到了jsp中提交的数据
System.out.println("two username = " + username);
System.out.println("two password = " + password);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().println("<h1>请求转发页面</h1>");
}
}
三、重定向
3.1 原理
发生在浏览器端
3.2 特点
① 请求地址发生改变
② 多个Servlet之间不能进行数据共享
③ 不能访问WEB-INF下的数据资源
④ 能够访问服务器外部资源
3.3 代码实现演示重定向特点
①+② 重定向的请求地址发生改变,并且不能接收到其他servlet的数据进行共享
代码实现
③ 不能访问WEB-INF下的文件资源,如图所示,添加了test.jsp,重定向后并不能访问到,显示404
④可以访问外部资源,将重定向路径的位置改成外部地址,比如csdn,显示可以跳转
更多推荐

所有评论(0)