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)