快捷搜索:

JSP页面跳转的五种方法

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 = null;

rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面

rd.forward(request, response);

}

平日在servlet中应用,不在jsp中应用。

2. response.sendRedirect()

是在用户的浏览器端事情,sendRedirect()可以带参数通报,比如servlet?name=frank传至下个页面,同时它可以重定向至不合的主机上,sendRedirect()可以重定向有frame.的jsp文件.

重定向后在浏览器地址栏上会呈现重定向页面的URL

例:在servlet中重定向

public void doPost(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException

{

response.setContentType("text/html; charset=gb2312");

response.sendRedirect("/index.jsp");

}

因为response是jsp页面中的隐含工具,故在jsp页面中可以用response.sendRedirect()直接实现重定位。

留意:

(1) 应用response.sendRedirect时,前面不能有HTML输出;

这并不是绝对的,不能有HTML输出着实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一样平常在8K(我是说 JSP SERVER),这就意味着,除非你关闭了cache,或者你应用了out.flush()强制刷新,那么在应用sendRedirect之前,有少量的HTML输出也是容许的。

(2) response.sendRedirect之后,应该紧跟一句return。

我们已经知道response.sendRedirect是经由过程浏览器来做转向的,以是只有在页面处置惩罚完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会由于后面的输出导致转向掉败。

对照:

(1) Dispatcher.forward()是容器中节制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;

(2) response.sendRedirect()则是完全的跳转,浏览器将会获得跳转的地址,并从新发送哀求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

前者加倍高效,在前者可以满意必要时,只管即便应用RequestDispatcher.forward()措施。

注:在有些环境下,比如,必要跳转到一个其它办事器上的资本,则必须应用HttpServletResponse.sendRequest()措施。

您可能还会对下面的文章感兴趣: