Web组件之间的跳转方式:
方式1:请求转发(forward)
方式2:URL重定向(redirect)
方式3:请求包含(include)
请求转发:
从Servlet1,请求转发到Servlet2。
Servlet1完成一部分的功能,再调转到Servlet2,继续完成剩下的功能。
语法:
request.getRequestDispather(String path).forward(request, response);
参数:path,表示调转的目标的路径(资源的名称)。
注意:不要忘记forward。
分析请求转发的特点:
1. 浏览器地址栏不发生改变,依然是/forward/s1,不是目标地址(/forward/s2)。
2. 请求转发只发送一次请求。
3. 共享同一个请求中的数据。
4. 最终响应给浏览器的由Servlet2来决定。
5. 请求转发不能跨域访问,只能跳转到当前应用中的资源。
6. 请求转发可以访问WEB-INF目录中的资源。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
URL重定向:
语法:
response.sendRedirect(String url);
参数:url,表示目标资源地址
分析URL重定向的特点:
1:浏览器地址栏发生改变,从/redirect/s1,变成目标地址(/redirect/s2)。
2:URL重定向发送了两次请求。
3:因为URL重定向是两次独立的请求,所以不共享请求中的数据。
4:最终响应给浏览器的由Servlet2来决定(把目标地址拷贝到浏览器地址栏,敲回车)。
5:URL重定向能跨越访问,可以访问其他应用中的资源。
6:URL重定向不能访问WEB-INF目录中的资源。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
请求包含:
在一个页面中可以包含其他页面的内容。
在Servlet中没意义,在JSP中有意义。
语法:
request.getRequestDispatcher(String path).include(request, response);
请求转发和URL重定向都支持Web组件之间的跳转,如何选择?
分析各自的特点。
必须使用请求转发(forward):
1):如果需要共享请求中的数据。
2):如果需要访问WEB-INF中的资源。
如果需要跨域访问,避免表单的重复提交,只能使用URL重定向。
其他情况任选。