2011-03-09 69 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") 
相关问题