转发和重定向
一、转发与重定向的引出
servlet的转发和重定向问题是由页面跳转的这个知识点引出,在Java的Servlet中,转发和重定向是两种常见的页面跳转方式。
二、转发(Forward)
转发是在服务器内进行的,从一个servlet转发到另一个servlet或JSP的页面。
并且转发的过程中,浏览器的URL不会发生改变,因为请求还在同一个服务器上处理。
浏览器的URL(Uniform Resource Locator),中文常译为“统一资源定位符”,是一种用于标识互联网上资源位置的标准格式。URL提供了足够的信息,让网络上的计算机能够定位并检索到这些资源。
转发使用的是
request.getRequestDispatcher("page01.html").forward(request,response);
三、重定向(Redirect)
重定向是服务器告诉浏览器去访问一个新的地址,这个过程涉及到两次HTTP请求。
第一次请求被服务器响应一个302状态码和新的URL,然后浏览器会自动发送第二次请求去获取一个新的URL的内容。
重定向使用的是
response.sendRedirect("page01.html");
四、转发与重定向的区别
区别一:访问普通页面
转发是一次请求(属于服务器内部的跳转)
重定向是两次请求(客户端会再次发送请求)
区别二:访问外部页面
注意:转发无法访问外部页面,因为转发是服务器内部跳转,服务器不能访问其他的服务器。
转发 -- NO
request.getRequestDispatcher("http://www.baidu.com").forward(request,response);
重定向 -- OK
response.sendRedirect("http://www.baidu.com");
区别三:访问受保护的页面
注意:客户端不能直接访问WEB-INF下的资源
转发 -- OK
request.getRequestDispatcher("WEB-INF/page02.html").forward(request,response);
重定向 -- no
response.sendRedirect("WEB-INF/page02.html");
总结:
转发只是一次请求,而重定向是两次请求。
转发后浏览器的URL不会变,重定向后浏览器的URL会变成新的URL。
转发效率更高,因为它不需要重新加载资源,而重定向需要重新加载。
转发可以访问request范围内的数据,而重定向不可以。