引數和屬性的區別是什麼意思

  在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重定向時的值。

猜你喜歡