JSP頁(yè)面間的傳值方法總結(jié)
前言
JSP 頁(yè)面間傳遞參數(shù)是項(xiàng)目中經(jīng)常需要的,這應(yīng)該算是 web 基本功吧。試著將各種方式總結(jié)下來(lái),需要時(shí)可以進(jìn)行權(quán)衡利弊選擇最合適的方式。下面來(lái)一起看看詳細(xì)的介紹:
1. URL 鏈接后追加參數(shù)
<a href="next.jsp?paramA=A¶mB=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=A¶mB=B...") window.location = "next.jsp?paramA=A¶mB=B..."
上述幾種代碼執(zhí)行時(shí)都將攜帶參數(shù)跳轉(zhuǎn)到 next.jsp 頁(yè)面中。
在 next.jsp 頁(yè)面中獲取對(duì)應(yīng)參數(shù)的方式如下:
//內(nèi)嵌的 java 代碼 <%String paramA = request.getParameter("paramA"); %> //如果引入了 EL {param.paramA}
優(yōu)點(diǎn):簡(jiǎn)單性和多瀏覽器支持(沒(méi)有瀏覽器不支持URL)。
缺點(diǎn):
1)傳輸?shù)臄?shù)據(jù)只能是字符串,對(duì)數(shù)據(jù)類(lèi)型和大小都有一定的限制;
2)傳輸數(shù)據(jù)的值會(huì)在瀏覽器地址欄里面被看到,安全性等級(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è)面中獲取對(duì)應(yīng)參數(shù)的方式與 (1)是類(lèi)似的。
優(yōu)點(diǎn):
1)簡(jiǎn)單性和多瀏覽器支持(同樣沒(méi)有瀏覽器不支持 form);
2) 可以提交的數(shù)據(jù)量比 URL 方式要大的多;
3)傳輸?shù)闹禃?huì)在瀏覽器的地址欄中顯示出來(lái),但是有一點(diǎn)黑手段的同樣能從頁(yè)面源碼中將參數(shù)列表構(gòu)造出來(lái);
缺點(diǎn):
1)傳輸?shù)臄?shù)據(jù)也只能是字符串,對(duì)數(shù)據(jù)類(lèi)型有一定的限制;
3. 設(shè)置 Cookie
用客戶(hù)端的認(rèn)證憑證小小 Cookie 當(dāng)然也能實(shí)現(xiàn) JSP 頁(yè)面的傳值。
<% Cookie c=new Cookie("paramA","A"); c.setMaxAge(60*60); //cookie 有效期1分鐘 response.addCookie(c); //將cookie 添加到 http響應(yīng)中 %>
想要在 next.jsp 頁(yè)面讀取 cookie,需要調(diào)用 request.getCookies()
方法來(lái)獲得一個(gè)javax.servlet.http.Cookie
對(duì)象的數(shù)組。
然后遍歷這個(gè)數(shù)組,使用getName()
方法和getValue()
方法來(lái)獲取每一個(gè)cookie的名稱(chēng)和值。
//內(nèi)嵌的 java 代碼 <% Cookie cookie = null; // 獲取cookies的數(shù)據(jù),是一個(gè)數(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>沒(méi)有發(fā)現(xiàn) Cookie</h2>"); } %> //EL 獲取方式 ${cookie.paramA.value}
優(yōu)點(diǎn):
1)Cookie 的值能夠持久化,即使客戶(hù)端機(jī)器關(guān)閉,下次打開(kāi)還是可以得到里面的值;
2) Cookie 可以幫助服務(wù)器端保存多個(gè)狀態(tài)信息,但是不用服務(wù)器端專(zhuān)門(mén)分配存儲(chǔ)資源,減輕了服務(wù)器端的負(fù)擔(dān)。
缺點(diǎn):
1)雖然安全性相比 URL 和 Form 要提高了許多,但是也存在黑手段獲取客戶(hù)端 cookie,暴露客戶(hù)信息。
4. 設(shè)置 Session
個(gè)人認(rèn)為 session 和 cookie 一個(gè)在服務(wù)端一個(gè)在客戶(hù)端。
在它們中添加鍵值對(duì)后,不僅僅是提供了頁(yè)面之間的傳遞,其實(shí)是一種數(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)缺點(diǎn)可以參照 Cookie。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- JAVASCRIPT實(shí)現(xiàn)的WEB頁(yè)面跳轉(zhuǎn)以及頁(yè)面間傳值方法
- JS父頁(yè)面與子頁(yè)面相互傳值方法
- javascript靜態(tài)頁(yè)面?zhèn)髦档娜N方法分享
- javascript不同頁(yè)面?zhèn)髦档母倪M(jìn)版
- JS中Iframe之間傳值及子頁(yè)面與父頁(yè)面應(yīng)用
- ajax的json傳值方式在jsp頁(yè)面中的應(yīng)用
- JavaScript實(shí)現(xiàn)在頁(yè)面間傳值的方法
- 詳解vuejs幾種不同組件(頁(yè)面)間傳值的方式
- 靜態(tài)頁(yè)面html中跳轉(zhuǎn)傳值的JS處理技巧
- JS實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)并傳值
相關(guān)文章
JSP學(xué)習(xí)之Java Web中的安全控制實(shí)例詳解
這篇文章主要介紹了JSP學(xué)習(xí)之Java Web中的安全控制,較為詳細(xì)的分析了JSP安全控制的常見(jiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09JSP中的字符替換函數(shù) str_replace() 實(shí)現(xiàn)!
JSP中的字符替換函數(shù) str_replace() 實(shí)現(xiàn)!...2006-10-10jsp include文件時(shí)的一個(gè)亂碼解決方法
做網(wǎng)站程序,一般對(duì)session的驗(yàn)證都會(huì)放到一個(gè)include文件里,在這個(gè)文件里通常也會(huì)顯示一些驗(yàn)證結(jié)果的信息。2009-03-03JSP中操作數(shù)據(jù)庫(kù)的常用SQL標(biāo)簽用法總結(jié)
這篇文章主要介紹了JSP中操作數(shù)據(jù)庫(kù)的常用SQL標(biāo)簽用法總結(jié),SQL標(biāo)簽封裝了數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的通用邏輯,可以簡(jiǎn)化數(shù)據(jù)庫(kù)操作,需要的朋友可以參考下2016-04-04jsp+Servlet編程實(shí)現(xiàn)驗(yàn)證碼的方法
這篇文章主要介紹了jsp+Servlet編程實(shí)現(xiàn)驗(yàn)證碼的方法,結(jié)合實(shí)例分析了jsp+servlet實(shí)現(xiàn)驗(yàn)證碼所需的相關(guān)類(lèi)與具體功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11jsp+servlet+javabean實(shí)現(xiàn)數(shù)據(jù)分頁(yè)方法完整實(shí)例
這篇文章主要介紹了jsp+servlet+javabean實(shí)現(xiàn)數(shù)據(jù)分頁(yè)方法,以完整實(shí)例形式詳細(xì)講述了jsp結(jié)合servlet與javabean操作PostgreSQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)分頁(yè)的具體步驟,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11JSP 獲取用戶(hù)的真實(shí)IP兩種實(shí)現(xiàn)方法詳解
這篇文章主要介紹了JSP 獲取用戶(hù)的真實(shí)IP兩種實(shí)現(xiàn)方法詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06