首先先看一看转发与重定向的调用
// request转发
request.getRequestDispatcher("/index.jsp").forward(request, response);
// jsp转发
<jsp:forward page="/index1.jsp">
<!-- 给被转发的页面(index1.jsp)附加上请求数据 -->
<jsp:param value="admin" name="username"/>
</jsp:forward>
// 重定向
response.sendRedirect("/test/index.jsp");
转发与重定向的定义:
- 转发:处理过程中把请求与应答(Request和Response)传入另一个请求中,自始至终只有一个Request和Response
- 重定向:告知浏览器,重新发一次请求,让服务器出处理
转发与重定向的区别:
1. 转发后URL不变,而重定向的URL地址会发生变化
例:请求地址为:http://localhost:8080/test/Test
![转发的URL](http://img.blog.csdn.net/20160108144255199)
![重定向的URL](http://img.blog.csdn.net/20160108144318758)
2. 转发自始至终只有一次请求与应答,重定向有两次请求与应答
例:
![转发](http://img.blog.csdn.net/20160108144519105)
![重定向](http://img.blog.csdn.net/20160108144538757)
3.转发只能转发当前WEB应用,而重定向可以到非当前WEB应用中
4.转发过程中,只有一个Request和Response,转发者与被转发者可以共享Request和Response,重定向不能
注意:无论是转发与重定向,在转发与重定向之前,都不能向客户端写入数据,如果写入了,转发与重定向之后会清除Response中写入的数据,无法显示到客户端
例如:
try {
response.getWriter().write("test");
} catch (IOException e) {
e.printStackTrace();
}
request.getRequestDispatcher("/index.jsp").forward(request, response);
或者
try {
response.getWriter().write("test");
} catch (IOException e) {
e.printStackTrace();
}
response.sendRedirect("/test/index.jsp");
客户端无法显示”test”字符串,会由服务器自动清空Response