引數和屬性的區別是什麼意思
在JAVA WEB開發中經常遇到獲取請求引數的值和在request物件中set或者get屬性,初學者往往容易混淆,那麼二者之間關係到底如何呢?下面就跟著小編一起來看看吧。
引數***parameter***和屬性***Attribute***的區別
區別:
來源不同:
引數***parameter***是從客戶端***瀏覽器***中由使用者提供的,若是GET方法是從URL中提供的,若是POST方法是從請求體***request body***中提供的;
屬性***attribute***是伺服器端的元件***JSP或者Servlet***利用requst.setAttribute******設定的
操作不同:
引數***parameter***的值只能讀取不能修改,讀取可以使用request.getParameter******讀取;
屬性***attribute***的值既可以讀取亦可以修改,讀取可以使用request.setAttribute******,設定可使用request.getAttribute******
資料型別不同:
引數***parameter***不管前臺傳來的值語義是什麼,在伺服器獲取時都以String型別看待,並且客戶端的引數值只能是簡單型別的值,不能是複雜型別,比如一個物件。
屬性***attribute***的值可以是任意一個Object型別。
共同點
二者的值都被封裝在request物件中。
jsp中屬性和引數有什麼區別
JSP中的getParameter***String name***和getAttribute***String name***有何區別?
也就是Parameter***引數*** 和Attribute***屬性***的區別?
在Java中有屬性 和 方法之分,這個屬性和Attribute***屬性***是不是一樣的?
引數就是方法中******裡面的內容,Parameter和這個引數一樣嗎?
HttpServletRequest類既有getAttribute******方法,也由getParameter******方法,這兩個方法有以下區別:
***1***HttpServletRequest類有setAttribute******方法,而沒有setParameter******方法
***2***當兩個Web元件之間為連結關係時,被連結的元件通過getParameter******方法來獲得請求引數,例如假定welcome.jsp和authenticate.jsp之間為連結關係,welcome.jsp中有以下程式碼:
<a href= "authenticate.jsp?username=weiqin "> authenticate.jsp </a>
或者:
<form name= "form1 " method= "post " action= "authenticate.jsp ">
請輸入使用者姓名: <input type= "text " name= "username ">
<input type= "submit " name= "Submit " value= "提交 ">
</form>
在authenticate.jsp中通過request.getParameter*** "username "***方法來獲得請求引數username:
<% String username=request.getParameter*** "username "***; %>
***3***當兩個Web元件之間為轉發關係時,轉發目標元件通過getAttribute******方法來和轉發源元件共享request範圍內的資料。假定authenticate.jsp和hello.jsp之間為轉發關係。authenticate.jsp希望向hello.jsp傳遞當前的使用者名稱字,如何傳遞這一資料呢?先在authenticate.jsp中呼叫setAttribute******方法:
<%
String username=request.getParameter*** "username "***;
request.setAttribute*** "username ",username***;
%>
< page= "hello.jsp " />
在hello.jsp中通過getAttribute******方法獲得使用者名稱字:
<% String username=***String***request.getAttribute*** "username "***; %>
Hello: <%=username %>
***4***從更深的層次考慮,request.getParameter******方法傳遞的資料,會從Web客戶端傳到Web伺服器端,代表HTTP請求資料。request.getParameter******方法返回String型別的資料。
request.setAttribute******和getAttribute******方法傳遞的資料只會存在於Web容器內部,在具有轉發關係的Web元件之間共享。這兩個方法能夠設定Object型別的共享資料。
——getParameter得到的都是String型別的。或者是
——getAttribute則可以是物件。
——getParameter******是獲取POST/GET傳遞的引數值;
——getAttribute******是獲取物件容器中的資料值;
——getParameter:用於客戶端重定向時,即點選了連結或提交按扭時傳值用,即用於在用表單或url重定向傳值時接收資料用。
——getAttribute:用於伺服器端重定向時,即在sevlet中使用了forward函式,或struts中使用了mapping.findForward。getAttribute只能收到程式用setAttribute傳過來的值。
另外,可以用setAttribute,getAttribute傳送接收物件.而getParameter顯然只能傳字串。
setAttribute是應用伺服器把這個物件放在該頁面所對應的一塊記憶體中去,當你的頁面伺服器重定向到另一個頁面時,應用伺服器會把這塊記憶體拷貝另一個頁面所對應的記憶體中。這樣getAttribute就能取得你所設下的值,當然這種方法可以傳物件。session也一樣,只是物件在記憶體中的生命週期不一樣而已。
getParameter只是應用伺服器在分析你送上來的request頁面的文字時,取得你設在表單或url重定向時的值。
猜你喜歡