重定向:
@WebServlet("/ServletRedirect")
public class ServletRedirect extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("http://www.baidu.com");
}
}
请求转发:
public class ServletForword1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("name", "cjj");
request.setAttribute("password", 123);
request.getRequestDispatcher("/ServletForword2").forward(request, response);
}
}
public class ServletForword2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String result=request.getAttribute("name")+" "+request.getAttribute("password");
System.out.println(result);
}
}
请求转发:
一个servlet里面处理逻辑, 将处理结果交给下一个Servlet(JSP)负责显示.
操作(代码):
request.getRequestDispatcher("/EServlet").forward(request,response);
问题: 将转发与重定向做对比,有什么异同?
1.浏览器一共发送了几个请求?
重定向: 两次请求
转发: 一次请求
2.浏览器的地址发生变化吗?
重定向: 会发生变化
转发: 不会发生变化
3.会改变请求方式吗?
重定向: 未必.重定向的第2次请求一定是get.
转发: 不会.
4.request域可不可以共享数据?
重定向: 不可以,因为会产生两个request对象.
转发: 可以. 因为是在一个请求范围内.使用的是同一个request对象.
转发的Servlet不可以向response的正文中添加任何内容.但是可以向响应头添加内容.