首先介绍下Servlet之间的交互,Servlet和Servlet之间可以共享信息并且可以相互跳转.一个完整的操作,需要AServlet执行一部分操作,然后再交给BServlet继续完成.常用的有请求转发(forward)和URL重定向(redirect).
请求转发(forward):
AServlet操作完毕之后,请求转发到BServlet,继续完成余下的功能.
语法: request对象.getRequestDispatcher(String path).forward(request,response);
特点:
1.浏览器地址栏路径没变,依然是AServlet的资源名称.
2.只发送了一个请求.
3.共享同一个请求,在请求中共享数据.
4.最后的响应输出由BServlet来决定.
5.只能访问当前应用中的资源,不能跨域跳转.
6.可以访问WEB-INF中的资源.
URL重定向(redirect):
AServlet操作完毕之后,重定向到BServlet,继续完成余下的功能.
语法:response对象.sendRedirect(String path);
特点:
1.浏览器地址栏发生变化,变成BServlet的资源名称.
2.发送两个请求.
3.因为是不同的请求,所以不能共享请求中的数据.
4.最终的响应输出由BServlet来决定.
5.可以跨域访问资源.
6.不可以访问WEB-INF中的资源.
请求转发和重定向的选择?
1.若需要共享请求中的数据,只能使用请求转发.
2.若需要访问WEB-INF中的资源,只能使用请求转发.
3.若需要跨域访问,只能使用URL重定向.
4.请求转发可能造成表单的重复提交问题.
5.其他时候,任选.