JSP頁面跳轉的方法總結

style="WIDTH: 345px; HEIGHT: 285px" align="left" marginwidth="0" marginheight="0" src="http://www.ymfund.com/web/ad.html" frameborder="0" width="468" scrolling="no" height="60">

1.  response.sendRedirct("跳轉到頁面");
該方法通過修改HTTP協議的HEADER部分,對瀏覽器下達重定向指令的,使瀏覽器顯示重定向網頁的內容.
request無法傳值過去.
執行完該頁所有代碼,然後再跳轉到頁面.
跳轉地址欄改變.
可以跳轉到其他服務器上的頁面response.sendRedirct(http://www.sun.com).
 
2.response.setHeader();
該方法和response.sendRedirect一樣,通過修改HTTP協議的HEADER部分.
 
<% 
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
String newLocn="/index.html"; 
response.setHeader("Location",newLocn); 
% > 
 
 
3.<jsp:forward page="跳轉頁面"/>
該方法是利用服務器端先將數據輸出到緩衝區的機制,在把緩衝區的內容發送到客戶端之前,原來的不發送,改爲發送該頁面的內容,如果在<jsp:forward>之前有很多輸出,前面的輸出已使緩衝區滿,將自動輸出到客戶端,那麼該語句將不起作用,這一點應該特別注意.
request可以傳值過去.
直接跳轉到頁面,後面的代碼不執行.
跳轉後地址欄不變.
無法跳轉到其他服務器上的頁面.
圖片不是絕對路徑無法顯示.
 
例子1:
from.jsp
 
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page buffer="1kb"%>
 
<%
long i=0;
  int j = 0;
for(i=0;i<60;i++)
{
 
       out.println(j++);
}
%>
 <jsp:forward page="to.jsp"/>
 
 
結果:  跳到to.jsp上.
 
 
例子2:
 
from.jsp
 
 
<%@ page contentType="text/html;charset=gb2312"%>
<%@page buffer="1kb"%>
 
<%
long i=0;
  int j = 0;
for(i=0;i<600;i++)
{
 
       out.println(j++);
}
%>
 <jsp:forward page="to.jsp"/>
 
 
報錯:
 
java.lang.IllegalStateException: Error: Attempt to clear a buffer that's already been flushed
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:648)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:637)
org.apache.jsp.forward.from02_jsp._jspService(from02_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.pcvit.pan.filter.EncodingFilter.doFilter(EncodingFilter.java:19)
 
 
例子3:
 
from.jsp
 
 
<%@ page contentType="text/html;charset=gb2312"%>
<%@page buffer="1kb"%>
 
<%
long i=0;
  int j = 0;
for(i=0;i<6000;i++)
{
 
       out.println(j++);
}
%>
 <jsp:forward page="to.jsp"/>
 
 
結果: 沒有跳到to.jsp上. 但是卻顯示出了from.jsp頁面的代碼執行結果.
 
------------------------------------------------------------------------------
 
                以上狀況原因不詳,望高手指點一下
 
------------------------------------------------------------------------------
 
 
4.request.getRequestDispatcher("跳轉頁面");
request可以傳值過去.
執行完該頁所有代碼,然後再跳轉到頁面.
跳轉地址欄不變.
不可以跳轉到其他服務器上的頁面
 
<%
RequestDispatcher rd = request.getRequestDispatcher("to.jsp");
rd.forward(request,response);
%>
 
------------------------------------------------------------------------------
 
PS:
 
服務端的輸出緩衝區

缺省情況下:服務端要輸出到客戶端的內容,不直接寫到客戶端,而是先寫到一個輸出緩衝區中.只有在下面三中情況下,纔會把該緩衝區的內容輸出到客戶端上:


該JSP網頁已完成信息的輸出 
輸出緩衝區已滿 
JSP中調用了out.flush()或response.flushbuffer() 
輸出緩衝區的大小可以用:或response.setBufferSize()設置,如下: 
設置輸出緩衝區的大小爲1KB。或response.setBufferSize(1); 
設置輸出緩衝區的大小爲0,即不緩衝。或response.setBufferSize(0); 
用response.getBufferSize()或out.getBufferSize()可取的輸出緩衝區的大小,單位爲字節. 用response.isCommitted()可檢查看服務端是否已將數據輸出到客戶端. 如果返回值是true則已將數據輸出到客戶端,是false則還沒有.   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章