getAttribute()和getParameter()之间的区别


Answers:


328
  • getParameter()返回http请求参数。那些是从客户端传递到服务器的。例如http://example.com/servlet?parameter=1。只能退货String

  • getAttribute()仅用于服务器端使用-您在请求中填充可以在同一请求中使用的属性。例如,您在Servlet中设置了一个属性,并从JSP中读取了该属性。可以用于任何对象,而不仅仅是字符串。


3
我想当您${attrName}在jsp页面中使用类似内容时,这些是您使用request.getSession().setAttribute()?设置的属性。
ha9u63ar 2015年

由于请求属性存储在服务器端,我可以为服务器间重定向后获取请求设置请求属性吗?我想通过重定向请求中的属性将信息从一台服务器发送到JSF中的另一台服务器。到目前为止,我可以通过POST请求发送。
user2918640 '16

在这种情况下,“参数”似乎与“查询字符串”同义
BTRUE

getAttribute()不只是服务器端使用:你可以在前端属性数据-例如JSP页面,并显示它
parsecer

49

通常,参数是最常见的字符串值,它是从客户端发送到服务器(例如,表单发布)并从servlet请求中检索的。令人沮丧的例外是ServletContext初始参数,该参数是在web.xml中配置并存在于服务器上的字符串参数。

属性是存在于指定范围内的服务器变量,即:

  • application,适用于整个应用程序的生命周期
  • session,在整个会话期间可用
  • request,仅在请求的生命周期内可用
  • page (仅JSP),仅可用于当前的JSP页面

“通常,参数是一个字符串值”除了字符串,我们还能发送什么?
亲爱的

^与request.setAttribute一样的对象
Arijit

37

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 = you,浏览器上的输出为

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

getAttribute()和之间的基本区别getParameter()是,第一种方法提取一个(序列化的)Java对象,而另一种方法提供一个String值。对于这两种情况,都给出了一个名称,以便可以查找和提取其值(字符串或Java Bean)。


4
这是一个很好的例子。这应该是公认的答案。公认的答案是正确的,但是对于新手来说,一个例子可以澄清一切。谢谢。
CapturedTree

26

至关重要的是要知道属性不是参数

属性的返回类型为Object,而参数的返回类型为String。致电时getAttribute(String name)方法时,请记住必须强制转换属性。

此外,没有servlet特定的属性,也没有会话参数

撰写此帖子的目的是联系@Bozho的回复,作为可能对其他人有用的其他信息。


9

getAttribute和getParameter之间的区别在于,getParameter将返回由HTML表单提交的或包含在查询字符串中的参数的值。getAttribute返回您在请求中设置的对象,唯一可以使用的方法是与RequestDispatcher结合使用。您可以使用RequestDispatcher将请求转发到另一个资源(JSP / Servlet)。因此,在转发请求之前,您可以设置一个属性,该属性可用于下一个资源。


5

- 的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中始终返回对象。


4

getParameter -用于从客户端的HTML页面获取所需的信息

getAttribute -这用于获取先前在另一个或同一JSP或Servlet页面中设置的参数。

基本上,如果要转发或只是从一个jsp / servlet到另一个jsp / servlet,则除非您选择将它们放在Object中并使用set-attribute存储在Session变量中,否则无法获得所需的信息。

使用getAttribute,可以检索Session变量。


3

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

“参数”是从客户端(通常是从HTML表单)发送到服务器的名称/值对。参数只能具有字符串值。有时(例如,使用GET请求),您会看到这些编码直接编码到URL中(在?之后,每个以name = value的形式出现,并且每对之间用&分隔)。有时,使用POST等方法时,它们会包含在请求的正文中。

“属性”是服务器本地的存储机制-除非明确实现,否则存储在作用域属性中的任何内容都不会在服务器外部传输。属性具有字符串名称,但存储对象值。请注意,属性特定于Java(它们存储Java对象),而参数则与平台无关(它们只是由通用字节组成的格式化字符串)。

共有四个属性范围:“页面”(仅适用于JSP和标记文件),“请求”(仅限于当前客户端的请求,在请求完成后销毁),“会话”(存储在客户端的会话中,无效)会话终止后),“应用程序”(在应用程序的整个部署生存期内供所有组件访问)。

最重要的是:从客户端获取数据时使用参数,在服务器上存储对象以供应用程序内部使用时使用范围属性。


3

您应该使用的另一种情况.getParameter()是在jsp中使用参数转发时:

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

在中destination.jsp,您可以userName像这样访问:

request.getParameter("userName")

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.