转发(Forward)和重定向(Redirect)的区别
-
转发(Forward):
- 转发是在服务器内部完成的,不涉及客户端的任何动作。
- URL 不会改变,浏览器地址栏仍然显示最初的请求 URL。
- 速度较快,因为不需要新的请求。
- 请求和响应对象在整个转发过程中是共享的,因此可以在目标资源中使用原请求中的数据。
-
重定向(Redirect):
- 重定向涉及客户端浏览器,服务器返回一个新的 URL 让客户端重新发起请求。
- URL 会改变,浏览器地址栏会更新为新的 URL。
- 速度相对较慢,因为涉及两个请求和响应。
- 原请求和响应对象不会保留,新请求会创建新的请求和响应对象。
对比表:使用 Servlet 和 JSP 进行转发和重定向的操作
操作 | Servlet 实现方式 | JSP 实现方式 | 区别 |
---|---|---|---|
转发 | request.getRequestDispatcher("target.jsp").forward(request, response); | <jsp:forward page="target.jsp" /> | 1.在服务器端完成。 2.URL 不变。 3.共享请求和响应对象。 4.速度较快。 |
重定向 | response.sendRedirect("target.jsp"); | <% response.sendRedirect("target.jsp"); %> | 1.需要客户端浏览器配合。 2. URL 改变。 3.不共享请求和响应对象。 4. 速度相对较慢。 |
1. 转发操作
Servlet
// 转发到目标页面 target.jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("target.jsp");
dispatcher.forward(request, response);
JSP
<jsp:forward page="target.jsp" />
2. 重定向操作
Servlet
// 重定向到目标页面 target.jsp
response.sendRedirect("target.jsp");
JSP
<%
response.sendRedirect("target.jsp");
%>