【问题标题】:Difference between getAttribute() and getParameter()getAttribute() 和 getParameter() 之间的区别
【发布时间】:2011-07-11 18:05:53
【问题描述】:

HttpServletRequest 类中的getAttribute()getParameter() 方法有什么区别?

【问题讨论】:

标签: java jsp servlets


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

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

【讨论】:

  • 我想当你在jsp页面中使用${attrName}之类的东西时,这些是你使用request.getSession().setAttribute()设置的属性?
  • 由于请求属性存储在服务器端,我可以为服务器间的post-redirect-get请求设置请求属性吗?我想通过重定向请求中的属性将信息从一台服务器发送到 JSF 中的另一台服务器。我现在可以通过 POST 请求发送。
  • 在这种情况下,“参数”似乎是“查询字符串”的同义词
【解决方案2】:

通常,参数是一个字符串值,最常见的是从客户端发送到服务器(例如表单帖子)并从servlet request 检索。令人沮丧的例外是ServletContext initial parameters,它们是在 web.xml 中配置并存在于服务器上的字符串参数。

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

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

【讨论】:

  • "一般来说,参数是一个字符串值" 除了 strings 我们还能发送什么?
  • ^Objects 与 request.setAttribute 一样
【解决方案3】:

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】:

了解属性不是参数至关重要。

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

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

写这篇文章的目的是连接@Bozho 的回复,作为对其他人有用的附加信息。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      -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 中总是返回对象。

      【讨论】:

        【解决方案7】:

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

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

        基本上,如果您正在转发或只是从一个 jsp/servlet 到另一个 jsp/servlet,除非您选择将它们放在一个 Object 中并使用 set-attribute 存储在一个会话变量。

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

        【讨论】:

          【解决方案8】:

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

          “参数”是从客户端发送到服务器的名称/值对 - 通常,来自 HTML 表单。参数只能有字符串值。有时(例如使用 GET 请求)你会看到这些 直接编码到 URL 中(在 ? 之后,每个都在表单中 name=value,每对用 &) 分隔。其他时候,他们是 在使用 POST 等方法时包含在请求的正文中。

          “属性”是一种服务器本地存储机制 - 没有存储任何内容 范围属性永远不会在服务器之外传输,除非您 明确地做到这一点。属性具有字符串名称,但存储 对象值。请注意,属性特定于 Java(它们存储 Java 对象),而参数是平台无关的(它们是 仅由通用字节组成的格式化字符串)。

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

          底线是:从 客户端,在服务器上存储对象时使用范围属性 仅供您的应用在内部使用。

          【讨论】:

            【解决方案9】:

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

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

            destination.jsp,你可以像这样访问userName

            request.getParameter("userName")
            

            【讨论】:

              【解决方案10】:

              getAttribute()getParameter() 的基本区别在于返回类型。

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

              【讨论】:

              • 你对这件事不以为然。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-25
              • 2020-05-10
              • 2014-09-20
              相关资源
              最近更新 更多