简要说明: reponse.sendRedirect() 与 request…forward() 实现转向的异同 1.前面慢,后者快 2.前面无法读取request.setAttribute()所保存的数值,而后者可以读取 3.前者地址栏显示真正转向后的地址,而后者显示的是转向前的地址 4.前者,转向地址开始的”/”,表示的是本机的根目录;而后者,”/”表示的是应用的根目录 定义: 不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。 重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。 转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。 调用方式如下: request.getRequestDispatcher(“apage.jsp”).forward(request, response);//转发到apage.jsp ,地址栏地址不变。 response.sendRedirect(“apage.jsp”);//重定向到apage.jsp ,地址栏地址相应变化。 在jsp页面中你也会看到通过下面的方式实现转发: 总结: 用重定向和转发不是一个习惯问题。而是什么情况下必须用什么的问题。 不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。 重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。 转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。 1、dispatch还是原来的request,但是redirect则是重新建立一个request。 2、dispatch基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: req.sendRedriect(“http://www.mocuai.com”); 有关JSP/Servlet的重定向技术综述如下[补充] 1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute(“name”,name)来传至下一个页面. 重定向后浏览器地址栏URL不变. 例:在servlet中进行重定向 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType(“text/html; charset=gb2312″); ServletContext sc = getServletContext(); RequestDispatcher rd [...]