前言
JSP 頁面間傳遞參數(shù)是項目中經(jīng)常需要的,這應(yīng)該算是 web 基本功吧。試著將各種方式總結(jié)下來,需要時可以進行權(quán)衡利弊選擇最合適的方式。下面來一起看看詳細的介紹:
1. URL 鏈接后追加參數(shù)
a href="next.jsp?paramA=AparamB=B..." rel="external nofollow" >URL 后面追加參數(shù)/a>
jsp:include page="next.jsp">jsp:param name="paramA" value="A"/>/jsp:include>
jsp:forward page="next.jsp">jsp:param name="paramA" value="B"/>/jsp:forward>
response.sendRedirect("next.jsp?paramA=AparamB=B...")
window.location = "next.jsp?paramA=AparamB=B..."
上述幾種代碼執(zhí)行時都將攜帶參數(shù)跳轉(zhuǎn)到 next.jsp 頁面中。
在 next.jsp 頁面中獲取對應(yīng)參數(shù)的方式如下:
//內(nèi)嵌的 java 代碼
%String paramA = request.getParameter("paramA"); %>
//如果引入了 EL
{param.paramA}
優(yōu)點:簡單性和多瀏覽器支持(沒有瀏覽器不支持URL)。
缺點:
1)傳輸?shù)臄?shù)據(jù)只能是字符串,對數(shù)據(jù)類型和大小都有一定的限制;
2)傳輸數(shù)據(jù)的值會在瀏覽器地址欄里面被看到,安全性等級低。
2. Form
form action="next.jsp" method="post">
input type="text" name="paramA" value="A">
input type="hidden" name="paramB" value="B">
input type="submit" value="提交">
/form>
在 next.jsp 頁面中獲取對應(yīng)參數(shù)的方式與 (1)是類似的。
優(yōu)點:
1)簡單性和多瀏覽器支持(同樣沒有瀏覽器不支持 form);
2) 可以提交的數(shù)據(jù)量比 URL 方式要大的多;
3)傳輸?shù)闹禃跒g覽器的地址欄中顯示出來,但是有一點黑手段的同樣能從頁面源碼中將參數(shù)列表構(gòu)造出來;
缺點:
1)傳輸?shù)臄?shù)據(jù)也只能是字符串,對數(shù)據(jù)類型有一定的限制;
3. 設(shè)置 Cookie
用客戶端的認證憑證小小 Cookie 當(dāng)然也能實現(xiàn) JSP 頁面的傳值。
%
Cookie c=new Cookie("paramA","A");
c.setMaxAge(60*60); //cookie 有效期1分鐘
response.addCookie(c); //將cookie 添加到 http響應(yīng)中
%>
想要在 next.jsp 頁面讀取 cookie,需要調(diào)用 request.getCookies()
方法來獲得一個javax.servlet.http.Cookie
對象的數(shù)組。
然后遍歷這個數(shù)組,使用getName()
方法和getValue()
方法來獲取每一個cookie的名稱和值。
//內(nèi)嵌的 java 代碼
%
Cookie cookie = null;
// 獲取cookies的數(shù)據(jù),是一個數(shù)組
Cookie[] cookies = request.getCookies();
if(cookies != null ){
for (int i = 0; i cookies.length; i++){
cookie = cookies[i];
out.print("參數(shù)名 : " + cookie.getName());
out.print("br>");
out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" br>");
out.print("------------------------------------br>");
}
}else{
out.println("h2>沒有發(fā)現(xiàn) Cookie/h2>");
}
%>
//EL 獲取方式
${cookie.paramA.value}
優(yōu)點:
1)Cookie 的值能夠持久化,即使客戶端機器關(guān)閉,下次打開還是可以得到里面的值;
2) Cookie 可以幫助服務(wù)器端保存多個狀態(tài)信息,但是不用服務(wù)器端專門分配存儲資源,減輕了服務(wù)器端的負擔(dān)。
缺點:
1)雖然安全性相比 URL 和 Form 要提高了許多,但是也存在黑手段獲取客戶端 cookie,暴露客戶信息。
4. 設(shè)置 Session
個人認為 session 和 cookie 一個在服務(wù)端一個在客戶端。
在它們中添加鍵值對后,不僅僅是提供了頁面之間的傳遞,其實是一種數(shù)據(jù)共享的解決方案。
%
session.setAttribute("paramA","A");
response.sendRedirect("next.jsp");
%>
想要在 next.jsp 讀取 session 的方法:
//內(nèi)嵌java 片段
%=session.getAttribute("paramA") %>
//EL 獲取方式
{session.paramA}
Session 的優(yōu)缺點可以參照 Cookie。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- ajax的json傳值方式在jsp頁面中的應(yīng)用
- JSP頁面間傳值問題實例簡析
- JSP頁面?zhèn)髦祦y碼過濾方法