getAttribute()和getParameter()方法在HttpServletRequest类中的区别是什么?
getAttribute()
getParameter()
HttpServletRequest
getParameter()返回http请求参数。那些从客户端传递到服务器的信息。例如http://example.com/servlet?parameter=1。只能返回String
http://example.com/servlet?parameter=1
String
getAttribute()仅供服务器端使用——你用可以在同一个请求中使用的属性填充请求。例如,在servlet中设置一个属性,然后从JSP中读取它。可以用于任何对象,而不仅仅是字符串。
通常,参数是一个字符串值,最常见的是从客户端发送到服务器(例如表单post),并从servlet请求检索。令人沮丧的例外是ServletContext初始参数,它是在web.xml中配置的字符串参数,存在于服务器上。
属性是存在于指定范围内的服务器变量,即:
application
session
request
page
重要的是要知道属性不是参数。
属性的返回类型是对象,而参数的返回类型是字符串。在调用getAttribute(String name)方法时,请记住必须强制转换属性。
getAttribute(String name)
此外,有没有servlet特定的属性,没有会话参数。
这篇文章的目的是联系@Bozho的回复,作为对其他人有用的额外信息。
getAttribute和getParameter的区别在于,getParameter将返回由HTML表单提交的参数值或包含在查询字符串中的参数值。getAttribute返回一个你在请求中设置的对象,唯一可以使用它的方法是与RequestDispatcher结合使用。使用RequestDispatcher将请求转发到另一个资源(JSP / Servlet)。因此,在转发请求之前,您可以设置一个下一个资源可用的属性。
getParameter -用于从客户端的HTML页面获取你需要的信息
getParameter
getAttribute -用于获取先前在另一个或相同的JSP或Servlet页面中设置的参数。
getAttribute
基本上,如果您正在从一个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()将检索客户端已提交的值。您将在服务器端获得该值。
request.getParameter("testParam")
——<坚强> getAttribute (): request.getAttribute(),这都是服务器端完成的。你将属性添加到请求中,并将请求提交给另一个资源,客户端不知道这一点。所以所有处理这个问题的代码通常都在servlet中。
request.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.getParameter()
request.getAttribute ()
我们使用request.getAttribute()来获取添加到服务器端请求作用域的对象,即使用request.setAttribute()。你可以在这里添加任何类型的对象,Strings, Custom对象,实际上是任何对象。您将属性添加到请求并将请求转发到另一个资源,客户端不知道这一点。因此,处理这个问题的所有代码通常都在JSP/servlet中。你可以使用request.setAttribute()来添加额外的信息,并将当前请求转发/重定向到另一个资源。
request.setAttribute()
Strings
例如,考虑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中转发参数:
.getParameter()
<jsp:forward page="destination.jsp"> <jsp:param name="userName" value="hamid"/> </jsp:forward>
在destination.jsp中,你可以像这样访问userName:
destination.jsp
userName
request.getParameter("userName")