2011-03-09 65 views
224

HttpServletRequest類中的getAttribute()getParameter()方法有什麼區別?getAttribute()和getParameter()之間的區別

+0

在什麼類/包/ API?您是否嘗試閱讀相關方法的JavaDocs? – 2011-03-09 09:49:59

+3

相關:[如何servlets工作?應用程序/會話/請求範圍?](http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC 2012-03-05 18:13:52

回答

264
  • getParameter()返回http請求參數。那些從客戶端傳遞到服務器。例如http://example.com/servlet?parameter=1。只能返回String

  • getAttribute()僅供服務器端使用 - 您可以使用可在同一請求中使用的屬性填充請求。例如 - 你在一個servlet中設置一個屬性,並從JSP中讀取它。可以用於任何對象,而不僅僅是字符串。

+3

我想當你使用類似'$ { attrName}'在一個jsp頁面中,那些是你使用'request.getSession()。setAttribute()'設置的屬性。 – ha9u63ar 2015-04-29 14:56:27

+0

由於請求屬性存儲在服務器端,我可以爲服務器間重定向 - 請求請求設置請求屬性嗎?我想通過重定向請求中的屬性將信息從一臺服務器發送到JSF中的另一臺服務器。我現在可以通過POST請求發送。 – user2918640 2016-03-11 05:29:19

+0

在這種情況下,「參數」似乎與「查詢字符串」的代名詞「 – BTRUE 2018-01-30 22:22:31

35

通常,參數是最常見的用於從客戶機發送到服務器(例如,一個表格後),並檢索從servlet request已知的字符串值。令人沮喪的例外是ServletContext initial parameters,它們是在web.xml中配置並存在於服務器上的字符串參數。

屬性是一個服務器變量指定的範圍即在存在:

  • application,可用於整個應用
  • session的壽命,可用於所述會話的壽命
  • request ,僅適用於請求的生命
  • page(僅限JSP),僅適用於當前JSP頁面
+0

」通常,參數是字符串值「除*字符串之外*我們可以發送什麼? – Honey 2016-11-08 16:31:25

+0

^對象與request.setAttribute – Arijit 2017-09-28 06:31:58

22

重要的是要知道屬性不是參數

屬性的返回類型是對象,而參數的返回類型是字符串。當調用getAttribute(String name)方法時,請記住必須投射屬性。

此外,還有沒有servlet特定屬性,並且沒有會話參數

本文的寫作目的是連接@ Bozho的回覆,作爲對其他人有用的附加信息。

9

getAttribute和getParameter之間的區別在於,getParameter將返回由HTML表單提交的或包含在查詢字符串中的參數的值。 getAttribute返回您在請求中設置的對象,唯一可以使用的方法是與RequestDispatcher一起使用。您使用RequestDispatcher將請求轉發給其他資源(JSP/Servlet)。因此,在轉發請求之前,您可以設置一個可用於下一個資源的屬性。

3

getParameter - 是用來讓你從客戶端的HTML頁面

getAttribute需要的信息 - 這是用於獲取在另一個或同一個JSP或Servlet的頁面之前設置的參數。

基本上,如果您正在轉發或者從一個jsp/servlet轉到另一個,那麼除非您選擇將它們放入對象並使用set-attribute存儲,否則無法獲得所需的信息一個Session變量。

使用getAttribute,您可以檢索Session變量。

3

- 的getParameter()

<html> 
<body> 
<form name="testForm" method="post" action="testJSP.jsp"> 
<input type="text" name="testParam" value="ClientParam"> 
<input type="submit"> 
</form> 
</body> 
</html> 

    <html> 
    <body> 
    <% 
    String sValue = request.getParameter("testParam"); 
    %> 
    <%= sValue %> 
    </body> 
    </html> 

request.getParameter("testParam")會得到一個名爲 「testParam」,這是 「客戶端參數」 輸入框的形式發佈的價值。它會打印出來,所以你應該在屏幕上看到「客戶端參數」。因此,request.getParameter()將檢索客戶端提交的值。你會得到服務器端的價值。

- getAttribute(): request.getAttribute(),這是所有服務器端完成的。您將該屬性添加到請求中,並將請求提交給另一個資源,客戶端不知道這一點。所以處理這個的所有代碼通常都在servlets.getAttribute中總是返回對象。

-6

getAttribute()getParameter()之間的基本區別是返回類型。

java.lang.Object getAttribute(java.lang.String name) 
java.lang.String getParameter(java.lang.String name) 
+2

的情況下,你是不是打賭這件事。 – 2015-05-19 06:52:14

20

的request.getParameter()

我們使用request.getParameter()以提取請求參數(即,通過發佈一個html形式發送的數據)。 request.getParameter()總是返回String值,並且數據來自客戶端。

request.getAttribute()

我們使用request.getAttribute()獲取對象添加到請求範圍在服務器端即,使用request.setAttribute()。你可以在這裏添加你喜歡的任何類型的對象,Strings,自定義對象,實際上是任何對象。您將該屬性添加到請求並將請求轉發到另一個資源,客戶端不知道這一點。所以處理這個的所有代碼通常都在JSP/servlet中。您可以使用request.setAttribute()添加額外信息並將當前請求轉發/重定向到其他資源。

例如,考慮約first.jsp,

//First Page : first.jsp 
<%@ page import="java.util.*" import="java.io.*"%> 
<% request.setAttribute("PAGE", "first.jsp");%> 
<jsp:forward page="/second.jsp"/> 

和second.jsp:

<%@ page import="java.util.*" import="java.io.*"%> 
From Which Page : <%=request.getAttribute("PAGE")%><br> 
Data From Client : <%=request.getParameter("CLIENT")%> 

從你的瀏覽器中運行first.jsp?CLIENT =你和瀏覽器上的輸出是

From Which Page : *first.jsp* 
Data From Client : you 

getAttribute()getParameter()之間的基本區別在於,在第一方法中提取(串行化)的Java對象,而另一個提供了字符串值。對於這兩種情況,都會給出一個名稱,以便查找和提取其值(字符串或java bean)。

+4

這是一個很好的例子。這應該是被接受的答案。接受的答案是正確的,但對於新來者來說,一個例子澄清了一切。謝謝。 – CapturedTree 2017-02-26 03:57:30

0

http://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribute

A 「參數」 是從客戶機向服務器發送一個 名稱/值對 - 典型地,從一個HTML表格。參數只能有字符串值。有時(例如,使用GET請求),您將看到這些直接編碼到URL中的這些 (在?之後,每個形式爲 name = value,並且每對由&分隔)。其他時候,當使用諸如POST之類的方法時,它們包含在請求正文中的 。

「屬性」是一個服務器本地存儲機制 - 除非你明確地做到這一點,否則範圍內的屬性永遠不會傳輸到服務器外。屬性具有字符串名稱,但存儲對象值 。請注意,屬性特定於Java(它們存儲 Java對象),而參數是平臺無關的(它們是 只是由通用字節組成的格式化字符串)。

總共有四個屬性範圍:「頁面」(僅適用於JSP和標籤 文件),「請求」(限於當前客戶的請求, 在請求完成後銷燬),「會話」在 客戶端會話中,在會話終止後失效), 「應用程序」(存在於應用程序的整個部署生命週期期間訪問的所有組件)。

底線是:從 客戶端獲取數據時使用參數,在服務器上存儲對象時使用範圍屬性 僅供您的應用程序在內部使用。

1

什麼時候應該使用.getParameter()另一種情況是在JSP與參數轉發時:

<jsp:forward page="destination.jsp"> 
    <jsp:param name="userName" value="hamid"/> 
</jsp:forward> 

destination.jsp,您可以訪問userName這樣的:

request.getParameter("userName") 
相關問題