HttpServletRequest
類中的getAttribute()
和getParameter()
方法有什麼區別?getAttribute()和getParameter()之間的區別
回答
getParameter()
返回http請求參數。那些從客戶端傳遞到服務器。例如http://example.com/servlet?parameter=1
。只能返回String
getAttribute()
僅供服務器端使用 - 您可以使用可在同一請求中使用的屬性填充請求。例如 - 你在一個servlet中設置一個屬性,並從JSP中讀取它。可以用於任何對象,而不僅僅是字符串。
我想當你使用類似'$ { attrName}'在一個jsp頁面中,那些是你使用'request.getSession()。setAttribute()'設置的屬性。 – ha9u63ar 2015-04-29 14:56:27
由於請求屬性存儲在服務器端,我可以爲服務器間重定向 - 請求請求設置請求屬性嗎?我想通過重定向請求中的屬性將信息從一臺服務器發送到JSF中的另一臺服務器。我現在可以通過POST請求發送。 – user2918640 2016-03-11 05:29:19
在這種情況下,「參數」似乎與「查詢字符串」的代名詞「 – BTRUE 2018-01-30 22:22:31
通常,參數是最常見的用於從客戶機發送到服務器(例如,一個表格後),並檢索從servlet request已知的字符串值。令人沮喪的例外是ServletContext initial parameters,它們是在web.xml中配置並存在於服務器上的字符串參數。
屬性是一個服務器變量指定的範圍即在存在:
application
,可用於整個應用session
的壽命,可用於所述會話的壽命request
,僅適用於請求的生命page
(僅限JSP),僅適用於當前JSP頁面
重要的是要知道屬性不是參數。
屬性的返回類型是對象,而參數的返回類型是字符串。當調用getAttribute(String name)
方法時,請記住必須投射屬性。
此外,還有沒有servlet特定屬性,並且沒有會話參數。
本文的寫作目的是連接@ Bozho的回覆,作爲對其他人有用的附加信息。
getAttribute和getParameter之間的區別在於,getParameter將返回由HTML表單提交的或包含在查詢字符串中的參數的值。 getAttribute返回您在請求中設置的對象,唯一可以使用的方法是與RequestDispatcher一起使用。您使用RequestDispatcher將請求轉發給其他資源(JSP/Servlet)。因此,在轉發請求之前,您可以設置一個可用於下一個資源的屬性。
getParameter
- 是用來讓你從客戶端的HTML頁面
getAttribute
需要的信息 - 這是用於獲取在另一個或同一個JSP或Servlet的頁面之前設置的參數。
基本上,如果您正在轉發或者從一個jsp/servlet轉到另一個,那麼除非您選擇將它們放入對象並使用set-attribute存儲,否則無法獲得所需的信息一個Session變量。
使用getAttribute,您可以檢索Session變量。
- 的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中總是返回對象。
getAttribute()和getParameter()之間的基本區別是返回類型。
java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)
的情況下,你是不是打賭這件事。 – 2015-05-19 06:52:14
的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)。
這是一個很好的例子。這應該是被接受的答案。接受的答案是正確的,但對於新來者來說,一個例子澄清了一切。謝謝。 – CapturedTree 2017-02-26 03:57:30
從http://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribute
A 「參數」 是從客戶機向服務器發送一個 名稱/值對 - 典型地,從一個HTML表格。參數只能有字符串值。有時(例如,使用GET請求),您將看到這些直接編碼到URL中的這些 (在?之後,每個形式爲 name = value,並且每對由&分隔)。其他時候,當使用諸如POST之類的方法時,它們包含在請求正文中的 。
「屬性」是一個服務器本地存儲機制 - 除非你明確地做到這一點,否則範圍內的屬性永遠不會傳輸到服務器外。屬性具有字符串名稱,但存儲對象值 。請注意,屬性特定於Java(它們存儲 Java對象),而參數是平臺無關的(它們是 只是由通用字節組成的格式化字符串)。
總共有四個屬性範圍:「頁面」(僅適用於JSP和標籤 文件),「請求」(限於當前客戶的請求, 在請求完成後銷燬),「會話」在 客戶端會話中,在會話終止後失效), 「應用程序」(存在於應用程序的整個部署生命週期期間訪問的所有組件)。
底線是:從 客戶端獲取數據時使用參數,在服務器上存儲對象時使用範圍屬性 僅供您的應用程序在內部使用。
什麼時候應該使用.getParameter()
另一種情況是在JSP與參數轉發時:
<jsp:forward page="destination.jsp">
<jsp:param name="userName" value="hamid"/>
</jsp:forward>
在destination.jsp
,您可以訪問userName
這樣的:
request.getParameter("userName")
- 1. getNamedItem()與getAttribute()之間的區別?
- 2. .getAttribute(「name」)和.name之間有什麼區別?
- 3. 「WebGLRenderingContext。{isEnabled | getParameter}」之間的區別在於功能?
- 4. '+ ='和'= +'之間的區別?
- 5. {!!之間的區別!!}和{{}}
- 6. ==和case之間的區別?
- 7. '#','%'和'$'之間的區別
- 8. | =和^ = css之間的區別
- 9. 「%〜dp0」和「。\」之間的區別?
- 10. .eq之間的區別。和==
- 11. ==和.equals()之間的區別?
- 12. `%in%`和`==`之間的區別
- 13. SPFile和PublishingPage類別之間的區別
- 14. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
- 15. NSthread和NStimer和NSNotifcation之間的區別?
- 16. Java和C#和.NET之間的區別
- 17. sys.log()和console.log()和console.error()之間的區別?
- 18. $ .ajax()和$ .get()和$ .load()之間的區別
- 19. javascript中的/ * * /和//之間的區別
- 20. python中的[]和[,,]之間的區別
- 21. QWidget的setStyleSheet和QApplication之間的區別
- 22. CKeditor的getHtml()和getData()之間的區別
- 23. make中的「$(shell ...)」和「$$(...)」之間的區別
- 24. C中的/ +和+之間的區別?
- 25. Alamofire的responseJSON和responseData之間的區別
- 26. WordPress的:site_id和blog_id之間的區別?
- 27. '|'之間的區別和 '+' 的位操作
- 28. 春季的/ **和/ *之間的區別
- 29. Satchmo的local_settings.py和settings.py之間的區別
- 30. String.Compare和CultureInfo的CompareInfo之間的區別
在什麼類/包/ API?您是否嘗試閱讀相關方法的JavaDocs? – 2011-03-09 09:49:59
相關:[如何servlets工作?應用程序/會話/請求範圍?](http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC 2012-03-05 18:13:52