JSP中的跳轉:
(1). forward()方法
使用到javax.servlet.RequestDispatcher類
RequestDispatcher rd = getServletContext().getRequestDispatcher("url");
rd.forward(requestVar,requestVar); //傳遞servlet的入口參數
/*forward函數已經把原頁面的request,response對象傳入新的頁面,因此這新舊頁面擁有相同的request,response對象。request.getparameter("var")就可以得到相應的值.*/
/*forward()是直接在server做的,瀏覽器並不知道,也不和瀏覽器打交道,瀏覽器的地址不變化。*/
即:
getServletContext().getRequestDispatcher("url").forward(requestVar,responseVar);
伺服器端Servlet進行轉向的4種方法:
1.ServletContext的getRequestDispatcher()
2.ServletContext的getNamedDispatcher()
3.ServletRequest的getRequestDispatcher()
4.ServletResponse的sendredirect()進行轉向。
forward方法,因為這些這樣比較高效。只有在forward方法不能使用時,再使用servletresponse的sendredirect()方法。
(2).response.sendRedirect(url);
其實是向瀏覽器發送一個特殊的Header,然後由瀏覽器來做轉向,轉到指定的頁面,所以用sendRedirect時,瀏覽器的地址欄上可以看到地址的變化。新頁面不能處理舊頁面的pagecontext(request,response,...)對象.
在response.sendRedirect之後,應該緊跟一句return;
(3).HTML語言的自動跳轉
<html>
<head>
<meta http-equiv="refresh" content="0;url="http://www.baidu.com">
0是等待時間,如果設定為5表示等待5s後開始跳轉
</head>
…………
(4).JavaScript跳轉
A: <script languate="javascript">
window.location.replace("http://www.baidu.com");
</script>
B: 也可以直接給window.location屬性賦值,window.location="url",與A不同的是有記錄
C: <script languate="javascript">
document.location.href("http://www.google.com");
</script>
對於document,location不是不是對象,document.location=document.url
D: history對象的forward(),back(),go()方法.go()方法需要一個整形入口參數
<a href="javascript:history.go(-1)">返回上一步</a>
等價於<a href="javascript:history.back()">返回上一步</a>
E: document.formName.action="test.jsp";
document.formName.submit(); //使用JS提交的方式
第一種:
<script language="javascript" type="text/javascript">
window.location.href="login.jsp?backurl="+window.location.href;
</script>
第二種:
<script language="javascript">
alert("返回");
window.history.back(-1);
</script>
第三種:
<script language="javascript">
window.navigate("top.jsp");
</script>
第四種:
<script language="JavaScript">
self.location='top.htm';
</script>
第五種:
<script language="javascript">
alert("非法訪問!");
top.location='xx.jsp';
</script>
(5).<jsp:forward page="nextpage.jsp"/>
如:
<jsp:forward page="/servlet/login" />
<jsp:forward page="/servlet/login">
<jsp:param name="username" value="jsmith" />
</jsp:forward>
<jsp:forward>標籤從一個JSP檔案向另一個檔案傳遞一個包含使用者請求的request對象.<jsp:forward>標籤以下的代碼,將不能執行.
可使用了<jsp:param>標籤的話向目標檔案傳送參數和值,目標檔案必須是一個動態檔案,能夠處理參數.
如果你使用了非緩衝輸出的話,那麼使用<jsp:forward>時就要小心。如果在你使用<jsp:forward>之前,jsp檔案已經有了資料,那麼檔案執行就會出錯.
JSP頁面跳轉方法薈萃
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可以傳值過去. 直接跳轉到頁面,後面的代碼不執行. 跳轉後地址欄不變. 無法跳轉到其他伺服器上的頁面. 圖片不是絕對路徑無法顯示.
4.request.getRequestDispatcher("跳轉頁面"); request可以傳值過去. 執行完該頁所有代碼,然後再跳轉到頁面.
跳轉地址欄不變. 不可以跳轉到其他伺服器上的頁面 <% RequestDispatcher rd =
request.getRequestDispatcher("to.jsp"); rd.forward(request,response); %>
有以下3種方法可以做到輸出重新導向: RESPONSE.SETREDERECT("URL")
該方法通過修改HTTP協議的HEADER部分,對瀏覽器下達重新導向指令的,使瀏覽器顯示重新導向網頁的內容.
response.sendRedirect("http://localhost:7001/index.html");
下面的方法也能改變HTTP
HEADER屬性,它的原理和 1 是一樣的
. <%response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String newLocn="/index.html"; response.setHeader("Location",newLocn); % >
採用<JSP:FORWORD>
該方法是利用伺服器端先將資料輸出到緩衝區的機制,在把緩衝區的內容發送到用戶端之前,原來的不發送,改為發送該頁面的內容,如果在<JSP:
FORWORD>之前有很多輸出,前面的輸出已使緩衝區滿,將自動輸出到用戶端,那麼該語句將不起作用,這一點應該特別注意.
自己現在知道的在一個jsp頁面中嵌套另外一個jsp頁面,有三種方法: 1、通過<%@ include
file="header.jsp"%>這種方法只能實現靜態頁面的載入,最常用是在一個項目中實現通用頁頭header.jsp和footer.jsp的載入。
2、通過<%@ include page="tt.jsp"%>這種做法可以實現動態網頁面的載入,但其需要向頁面傳遞參數; 3、通過<iframe
src="jsp的路徑">來向頁面載入另一個jsp頁面,是一個內聯架構。
用forward傳參數的, 要這樣寫: <%String str="你已經登陸!"; %>
<jsp:forward page="index.jsp> <jsp:param name="name" value= <%=str%>/>
</jsp:forward>
轉載自:http://younglibin.javaeye.com/blog/457872