腾讯一面:说一下转发与重定向的区别吧!
内部流程
特点
代码举例
protected void doGet(HttpServletRequest
request,HttpServletResponse response) throws ServletException, IOException {
//1.使用RequestDispatcher对象封装目标资源的虚拟路径
RequestDispatcher
dispatcher = request.getRequestDispatcher("/index.html");
//2.调用RequestDispatcher对象的forward()方法“前往”目标资源
//[注意:传入的参数必须是传递给当前Servlet的service方法的
//那两个ServletRequest和ServletResponse对象]
dispatcher.forward(request,
response);}
二、重定向(Redirect)
内部执行流程
第一个ServletA接收到了浏览器端的请求,进行了一定的处理,然后给浏览器一个特殊的响应消息,这个特殊的响应消息会通知浏览器去发送一个请求request2,去访问另外一个资源ServletB,这个动作是服务器和浏览器自动完成的,最终由ServletB做出响应。
重定向的特点
1. 整个过程中浏览器端会发出两次请求,且在浏览器地址栏里面能够看到地址的改变,改变为下一个资源的地址。
2. 重定向的情况下,原Servlet和目标资源之间就不能共享请求域数据了。
3. 重定向的响应报文的头:
HTTP/1.1 302 Found
Location: success.html
代码举例
response.sendRedirect(“success.html”);
三、总结