getAttribute()和getParameter()的区别

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

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

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

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

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

  • application,在整个应用程序的生命周期内可用
  • session,在会话的生命周期内可用
  • request,只对请求的生命周期有效
  • page(仅JSP),仅对当前JSP页面可用

重要的是要知道属性不是参数

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

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

这篇文章的目的是联系@Bozho的回复,作为对其他人有用的额外信息。

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

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

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

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

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

-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"的输入框的发布形式中获取值,即"Client param"。然后它会把它打印出来,所以你应该在屏幕上看到“Client Param”。因此request.getParameter()将检索客户端已提交的值。您将在服务器端获得该值。

——<坚强> getAttribute (): request.getAttribute(),这都是服务器端完成的。你将属性添加到请求中,并将请求提交给另一个资源,客户端不知道这一点。所以所有处理这个问题的代码通常都在servlet中。

. getAttribute总是返回对象

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

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

request.getParameter ()

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

request.getAttribute ()

我们使用request.getAttribute()来获取添加到服务器端请求作用域的对象,即使用request.setAttribute()。你可以在这里添加任何类型的对象,Strings, Custom对象,实际上是任何对象。您将属性添加到请求并将请求转发到另一个资源,客户端不知道这一点。因此,处理这个问题的所有代码通常都在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吗?客户=你,浏览器上的输出为

From Which Page : *first.jsp*
Data From Client : you

getAttribute()getParameter()之间的基本区别是,第一个方法提取一个(序列化的)Java对象,另一个方法提供一个String值。对于这两种情况,都会给出一个名称,以便可以查找和提取它的值(无论是字符串还是java bean)。

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

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

. 一个“属性”是一个服务器-本地存储机制-没有存储在 作用域属性永远不会传输到服务器之外,除非您 明确地让它发生。属性有字符串名称,但存储 对象的值。注意,属性是特定于Java的(它们存储 Java对象),而参数是与平台无关的(它们是 只有由通用字节组成的格式化字符串) 属性总共有四个作用域:"page"(用于jsp和标签 仅限文件),“请求”(仅限于当前客户端的请求, 请求完成后销毁),“会话”(存储在 客户端会话,会话终止后无效), "application"(存在,供所有组件在整个过程中访问

.应用程序的部署生命周期 底线是:在获取数据时使用参数 客户端,在服务器上存储对象时使用范围属性

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

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

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

request.getParameter("userName")