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

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

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

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

通常,参数是从客户端发送到服务器(例如表单帖)最常见的string值,并从servlet请求中检索。 令人沮丧的例外是ServletContext初始参数 ,这些参数是在web.xml中configuration并存在于服务器上的string参数。

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

  • application ,可用于整个应用程序的生命
  • session ,可用于session的生活
  • request ,只在请求的生命中可用
  • page (仅限JSP),仅适用于当前JSP页面

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

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

另外, 没有servlet特定的属性 ,并且没有会话参数

这篇文章的目的是为了连接@ Bozho的回应,作为其他信息,可用于其他人。

用request.getParameter()

我们使用request.getParameter()来提取请求参数(即通过发布html表单发送的数据)。 request.getParameter()总是返回String值,数据来自客户端。

request.getAttribute()

我们使用request.getAttribute()获取一个添加到服务器端的请求范围的对象,即使用request.setAttribute() 。 你可以在这里添加你喜欢的任何types的对象, Strings ,自定义对象,实际上是任何对象。 您将该属性添加到请求并将请求转发到另一个资源,客户端不知道这一点。 所以处理这个的所有代码通常都在JSP / servlet中。 您可以使用request.setAttribute()来添加额外信息,并将当前请求转发/redirect到另一个资源。

例如,考虑一下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对象,另一个提供String值。 对于这两种情况,都给出一个名称,以便查找和提取其值(可以是string或java bean)。

getAttribute和getParameter的不同之处在于,getParameter将返回由HTML表单提交的或包含在查询string中的参数的值。 getAttribute返回在请求中设置的对象,唯一可以使用的方法是与RequestDispatcher一起使用。 您使用RequestDispatcher将请求转发给其他资源(JSP / Servlet)。 因此,在转发请求之前,您可以设置一个可用于下一个资源的属性。

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

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

基本上,如果您正在转发或者从一个jsp / servlet转到另一个,那么除非您select将它们放入对象并使用set-attribute存储在Sessionvariables中,否则无法获得所需的信息。

使用getAttribute,你可以检索Sessionvariables。

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”的input框的“客户端参数”的发布表单中获取值。 它会打印出来,所以你应该看到屏幕上的“客户端参数”。 所以request.getParameter()将检索客户端提交的值。 你会得到服务器端的价值。

getAttribute(): request.getAttribute() ,这是所有服务器端完成的。 您将该属性添加到请求中,并将请求提交给另一个资源,客户端不知道这一点。 所以处理这个的所有代码通常都在servlets.getAttribute中总是返回对象。

另一种情况是,当使用.getParameter()时,使用jsp中的参数进行转发:

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

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

 request.getParameter("userName") 

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

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

一个“属性”是一个服务器本地存储机制 – 除非明确地做到这一点,否则任何存储在作用域属性中的东西都不会传输到服务器之外。 属性具有string名称,但存储对象值。 请注意,属性特定于Java(它们存储Java对象),而参数是平台无关的(它们只是由普通字节组成的格式化string)。

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

底线是:从客户端获取数据时使用参数,在服务器上存储对象时仅使用应用程序内部使用的作用域属性。

getAttribute()getParameter()之间的基本区别是返回types。

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