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