【頁面傳值6種方式】- 【JSP 頁面傳值方法總結:4種】 - 【跨頁面傳值的幾種簡單方式3種】


  JSP 頁面間傳遞參數是項目中經常需要的,這應該算是 web 基本功吧。

  試着將各種方式總結下來,需要時可以進行權衡利弊選擇最合適的方式。

1. URL 鏈接后追加參數

復制代碼
復制代碼
<a href="next.jsp?paramA=A&paramB=B...">URL 后面追加參數</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&paramB=B...")

window.location = "next.jsp?paramA=A&paramB=B..."

復制代碼
復制代碼

   上述幾種代碼執行時都將攜帶參數跳轉到 next.jsp 頁面中。

   在 next.jsp 頁面中獲取對應參數的方式如下:

//內嵌的 java 代碼
<%String paramA = request.getParameter("paramA"); %>

//如果引入了 EL

   優點:簡單性和多瀏覽器支持(沒有瀏覽器不支持URL)。

缺點:

   1)傳輸的數據只能是字符串,對數據類型和大小都有一定的限制;

   2)傳輸數據的值會在瀏覽器地址欄里面被看到,安全性等級低。

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 頁面中獲取對應參數的方式與 (1)是類似的。

優點:

1)簡單性和多瀏覽器支持(同樣沒有瀏覽器不支持 form);

2) 可以提交的數據量比 URL 方式要大的多;

3)傳輸的值會在瀏覽器的地址欄中顯示出來,但是有一點黑手段的同樣能從頁面源碼中將參數列表構造出來;

缺點:

1)傳輸的數據也只能是字符串,對數據類型有一定的限制;

3. 設置 Cookie

   用客戶端的認證憑證小小 Cookie 當然也能實現 JSP 頁面的傳值。

    <%  
Cookie c=new Cookie("paramA","A");
c.setMaxAge(60*60); //cookie 有效期1分鍾
response.addCookie(c); //將cookie 添加到 http響應中
%>

   想要在 next.jsp 頁面讀取 cookie,需要調用 request.getCookies() 方法來獲得一個javax.servlet.http.Cookie 對象的數組。

   然后遍歷這個數組,使用getName()方法和getValue()方法來獲取每一個cookie的名稱和值。

復制代碼
復制代碼
//內嵌的 java 代碼
<%
Cookie cookie = null;
// 獲取cookies的數據,是一個數組
Cookie[] cookies = request.getCookies();
if(cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
out.print("參數名 : " + cookie.getName());
out.print("<br>");
out.print("參數值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
out.print("------------------------------------<br>");
}
}else{
out.println("<h2>沒有發現 Cookie</h2>");
}
%>

//EL 獲取方式 $

復制代碼
復制代碼

優點:

1)Cookie 的值能夠持久化,即使客戶端機器關閉,下次打開還是可以得到里面的值;

2) Cookie 可以幫助服務器端保存多個狀態信息,但是不用服務器端專門分配存儲資源,減輕了服務器端的負擔。

缺點:

1)雖然安全性相比 URL 和 Form 要提高了許多,但是也存在黑手段獲取客戶端 cookie,暴露客戶信息。

4. 設置 Session

   個人認為 session 和 cookie 一個在服務端一個在客戶端。

   在它們中添加鍵值對后,不僅僅是提供了頁面之間的傳遞,其實是一種數據共享的解決方案。

 <%       
session.setAttribute("paramA","A");
response.sendRedirect("next.jsp");
%>

    想要在 next.jsp 讀取 session 的方法:

//內嵌java 片段
<%=session.getAttribute("paramA") %>

//EL 獲取方式

   Session 的優缺點可以參照 Cookie。

 

 

 

【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】

 

 

 

跨頁面傳值的幾種簡單方式3種

方法一:

通過URL傳值

eg:

 

location.href="跨頁面1-2.html?age=18&gender=man";

在下個頁面接收:

 

 

//1、location.search獲取get請求的參數   獲取到的數據,是以?開頭的
var search=location.search;
//2、如果還想要獲取確定的數據,可以解析字符串 function parse(search){
//從第二個字符開始截取 ,獲取到第二個開始后面所有的字符 var str=search.substring(1);
var result={};
//分割字符串 -->產生字符串數組
var strs=str.split("&");
//遍歷數組中的每一個元素
strs.forEach(function(v){
//偽代碼:v="age=18"
var keyvalue=v.split("=");
var name=keyvalue[0];
var value=keyvalue[1];
result[name]=value;
})
return result;
}

var r=parse(search);

方法二:

 

使用h5的localStorage,或者sessionStorage存儲對象類型

 

存儲對象的正確的方式:
var p2={name:"周瑜",age:16};
var s2=JSON.stringify(p2);      //將對象"序列化"JSON數據(字符串格式)localStorage.setItem("p2",s2);  //以字符串格式存儲信息var s2_2=localStorage.getItem("p2");    //獲取存儲的信息,也是字符串格式var p2_2=JSON.parse(s2_2);      //JSON數據反序列化為對象

 

 

localStroage和sessionStorage使用大致相同,他們的不同之處在於,localstroage是永久保存,而sessionstroage是會話存在,

當會話結束,sessionstroage保存值也會清空。

方法三:

使用cookie保存:

原生cookie

 

//1、保存一條數據
document.cookie="name=abc";
document.cookie="age=18";
//2、獲取所有數據
var cookie=document.cookie;
console.log(cookie);  //"name=abc; age=18; PHPSESSID=fr1njdv6apf3neoj5nehntrps7"
//之后可以解析字符串,獲取指定的數據內容//3、設置cookie的有效期
document.cookie="id=666;expires="+new Date("2017-10-22 08:00");

jQuery.cookie.js插件

 

 

 //第一種類型:會話cookie//    //1、設置值
// $.cookie("phone","13188886666");
// $.cookie("email","123@qq.com");// //2、獲取值
// var phone=$.cookie("phone");
// console.log(phone);// var email=$.cookie("email");
// console.log(email); //第二種類型:設置長期cookie(具有指定有效期)
// $.cookie("address","廣東深圳市",{
// expires:7 //expires不僅僅可以是日期類型的對象,也可以是以天為單位的數字
// });// $.cookie("tel","0755-88888888",{
// expires:1/24 //cookie值就會保存一小時
// });// $.cookie("birthday","1.1",{
// expires:new Date("2018-01-01 08:00") //對於這樣的過期時間,已經在內部處理好了時區問題
// }); //刪除指定的cookie
$.removeCookie("birthday");


使用cookie可用來跨頁面傳值-狀態保持

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM