* 页面跳转 |
其实用页面跳转这个词不是很准确,转发和重定向不仅可以实现页面的转换,这里也可以是servlet进行切换和访问。
转发:服务器访问一个web资源,重定向:客户端访问一个web资源。
* 原理 |
我们从它的实现方式上去体会吧:
//转发
RequestDispatcher getRequestDispatcher(String var1);
public RequestDispatcher getRequestDispatcher(String path) {
return this.request.getRequestDispatcher(path);
}
//重定向
void sendRedirect(String var1) throws IOException;
public void sendRedirect(String location) throws IOException {
this._getHttpServletResponse().sendRedirect(location);
}
1. 区别
1. 转发
不会改变浏览器地址中的url;转发共享一个request;装发只能在同一个web应用中实现;转发完城后直接到最后一个目录下,我们要注意路径的处理。
2. 重定向
浏览器中地址发生改变;不共享request;可以重定向到任意的web应用;访问服务器多于一次(注意:对于重定向中get方法传递参数的乱码问题处理方式)
2. 传值方式
1. 转发
request.getRequestDispatcher("url").forward(request,reponse);
使用转发传值有3种,url后面直接带参数;session中;request.setAttribute(“”)。如果servlet和jsp交互是对象的话,使用后两种方式。
2. 重定向
request.getRequestDispatcher("url").forward(request,reponse);
使用重定向传值有会少一种方式,因为其不共享request,所以呢他的传值方式只有两种。
* 应用场景 |
转发是要比重定向快,因为重定向需要经过客户端,需要再发送一个新的请求,但是,转发没有。但是有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。
redirect: 重定向有一个优点:提交表单,处理成功后 redirect 到另一个 jsp,防止表单重复提交,然而这个优点我还没有get到~
但是,使用重定向的一个不便之处是,无法将值轻松地传递给目标页面。而采用转发,则可以简单地将属性添加到Model,使得目标视图可以轻松访问。由于重定向经过客户端,所以Model中的一切都会在重定向时丢失。
* END |
不断的对比吧,我相信这样我们会清晰很多,也会收获很多~