标签:
跳转:服务器端,客户端
客户端跳转:<response.sendRedirect>地址栏跳转之后改变,无法传递request范围的属性
服务器端跳转:<jsp:forward>地址栏不改变,而且可以传递request范围的属性,属于无条件跳转,只要执行到了,立即执行跳转的操作
servlet之中也是可以跳转的,既然servlet本身存在HttpServletResonse对象,所以,直接通过此对象的sendRedirect方法就可以完成跳转操作。
客户端跳转实现:
info不能传递
package org.lxh.servletdemo ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class ClientRedirectDemo extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ req.getSession().setAttribute("name","李兴华") ; req.setAttribute("info","MLDNJAVA") ; resp.sendRedirect("get_info.jsp") ; } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ this.doGet(req,resp) ; } }
servlet中没有<jsp:forward>指令,所以想执行跳转的话要使用RequestDispatcher完成。
RequestDispatcher是个接口,要想使用接口必须进行对象实例化操作,此时只能一看ServletRequest接口完成
info值可以传递
package org.lxh.servletdemo ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class ServerRedirectDemo extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ req.getSession().setAttribute("name","李兴华") ; req.setAttribute("info","MLDNJAVA") ; RequestDispatcher rd = req.getRequestDispatcher("get_info.jsp") ; // 准备好了跳转操作 rd.forward(req,resp) ; // 完成跳转 } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ this.doGet(req,resp) ; } }
web.xml:
<servlet> <servlet-name>server</servlet-name> <servlet-class> org.lxh.servletdemo.ServerRedirectDemo </servlet-class> </servlet> <servlet-mapping> <servlet-name>server</servlet-name> <url-pattern>/forward/ServerRedirectDemo</url-pattern> </servlet-mapping>
所以要传递request范围属性的话,就用服务器跳转,如果要保存session以上级别的值的话,就用客户端跳转。
服务器端跳转的应用比率90%以上,所以更重要。
标签:
原文地址:http://www.cnblogs.com/wujixing/p/4974105.html