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


当前回答

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

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

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

request.getParameter("userName")

其他回答

request.getParameter ()

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

request.getAttribute ()

We use request.getAttribute() to get an object added to the request scope on the server side i.e. using request.setAttribute(). You can add any type of object you like here, Strings, Custom objects, in fact any object. You add the attribute to the request and forward the request to another resource, the client does not know about this. So all the code handling this would typically be in JSP/servlets. You can use request.setAttribute() to add extra-information and forward/redirect the current request to another resource.

例如,考虑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值。对于这两种情况,都会给出一个名称,以便可以查找和提取它的值(无论是字符串还是java bean)。

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

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

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

request.getParameter("userName")

getAttribute()和getParameter()之间的基本区别是返回类型。

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

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

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

基本上,如果您正在从一个jsp/servlet转发或只是从一个jsp/servlet转到另一个jsp/servlet,那么除非您选择将它们放在一个对象中并使用set-属性存储在一个会话变量中,否则就无法获得所需的信息。

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

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

A "parameter" is a name/value pair sent from the client to the server - typically, from an HTML form. Parameters can only have String values. Sometimes (e.g. using a GET request) you will see these encoded directly into the URL (after the ?, each in the form name=value, and each pair separated by an &). Other times, they are included in the body of the request, when using methods such as POST. An "attribute" is a server-local storage mechanism - nothing stored in scoped attribues is ever transmitted outside the server unless you explicitly make that happen. Attributes have String names, but store Object values. Note that attributes are specific to Java (they store Java Objects), while parameters are platform-independent (they are only formatted strings composed of generic bytes). There are four scopes of attributes in total: "page" (for JSPs and tag files only), "request" (limited to the current client's request, destroyed after request is completed), "session" (stored in the client's session, invalidated after the session is terminated), "application" (exist for all components to access during the entire deployed lifetime of your application). The bottom line is: use parameters when obtaining data from the client, use scoped attributes when storing objects on the server for use internally by your application only.