资源跳转的方式
》两种:请求转发和重定向
》请求转发
》发生的位置:发生在服务器端,浏览器的地址栏不会被改变
》转发的本质:一个请求在多个资源之间跳转
》转发时数据的保存:
》request和response的生命周期是一次请求和响应的过程
》可以放在request对象中,请求转发是一次请求和响应的过程,所以转发时的数据能进行共享
》 request.setAttribute("name",name);
》request.getAttribute("name");
》使用session
//获取session对象
HttpSession Session = request.getSession();
//利用session传值
Session.setAttribute("msg","请重新输入");
//在重定向到的文件中,通过key值获取value值;
session.getAttribute("msg")
》可以转向的资源
只能是当前服务器内部的资源
》核心代码:
request.getRequestDispatcher("要转发的资源路径").forward(request,response);
RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递
到该资源。RequestDispatcher接口中定义参见如下代码:
l public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
}
l forward()方法将当前的request和response重定向到该RequestDispacher指
定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多
个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处
理在Servlet中处理,处理的结果转向到一个JSP页面或者下一个Servlet继续处
理。
》重定向
》发生的位置:发生在浏览器端
》服务器通知浏览器发送一个新的请求,地址栏的url改变
》重定向时数据的保存
》重定向时发生了二次请求,第一次中的数据,在重定向后都没了
》使用session
//获取session对象
HttpSession Session = request.getSession();
//利用session传值
Session.setAttribute("msg","请重新输入");
//在重定向到的文件中,通过key值获取value值;
session.getAttribute("msg")
》重定向可以转向的资源
不但可以转向内部资源,也可以转向外部资源
》核心代码:
response.sendRedirect("要重定向的资源路径");
》注意:转发和重定向不能和PrintWriter一起使用
forward:方法只能在同一个Web应用程序内的资源之间转发请求 。
l redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一
个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点
的资源.
l forward:执行效率高.
l redirect:执行效率低.
public void sendRedirect( java.lang.String location) throws
java.io.IOException 。这个方法将响应定向到参数location指定的、新的
URL。
l location可以是一个绝对的URL。如:
response.sendRedirect(“http://java.sun.com”)。
l 也可以使用相对的URL。如果location以“/”开头,则容器认为相对于当
前Web应用的根,否则,容器将解析为相对于当前请求的URL