getAttribute和getParameter区别

1.getAttribute是取得jsp中 用setAttribute設定的attribute
2.parameter得到的是string;attribute得到的是object
3.request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。

JSP中getParameter与getAttribute有何区别?
——说实话,这个问题当初我也困惑很久,我也知道怎么用,可是到底有什么区别,我也不是很清楚,后来找了很多资料才明白。昨天又有一位朋友问我这个问题,想我当初同样也困惑过,于是我就把这个问题贴出来,让同样困惑的朋友解惑。
——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123,或者是某个表单提交过去的数据。
——getAttribute则可以是对象。
——getParameter()是获取POST/GET传递的参数值;
——getAttribute()是获取对象容器中的数据值;
——getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
——getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。
——getParameter()是获取POST/GET传递的参数值;
——getAttribute()是获取SESSION的值;
另外,可以用setAttribute,getAttribute发送接收对象.而getParameter显然只能传字符串。
setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。
getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。

getParameter   返回的是String,   用于读取提交的表单中的值;      
getAttribute   返回的是Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活,可随时用;
 



多情况下,在请求转发时,把一些数据带到转发后的页面处理。这时,就可以使用request对象的setAttribute()方法将数据设置在request范围内存取。转发数据的方法使用如下:
-

在作用域中管理属性
很多情况下,在请求转发时,把一些数据带到转发后的页面处理。这时,就可以使用request对象的setAttribute()方法将数据设置在request范围内存取。
转发数据的方法使用如下:
request.setAttribute("key", Object);
方法说明如下。
参数key是键,为String类型。在转发后的页面取数据时,就通过这个键来获取数据。参数object是键值,为Object类型,代表需要保存在request范围内的数据。
获取转发数据的方法使用如下:
request.getAttribute(String name);
方法说明如下。
参数name表示键名。
在页面使用request对象的setAttribute("name",obj)方法,可以把数据obj设定在request范围内。请求转发后的页面使用getAttribute("name")方法;就可以取得数据obj。
本实例使用setAttribute()方法设置数据,然后在请求转发后取得设置的数据。程序开发步骤如下。
(1)创建名称为index.jsp的页面,该页面通过request对象调用setAttribute()方法存储数据,程序代码如下:
index.jsp关键代码:
<%
String uName = "tom";
String uSex = "man";
String uAge = "26";
String uCity = "长春";
String uTel = "13999999";
request.setAttribute("name", uNname);              //将uNname值存放在request对象中
request.setAttribute("sex", uSex);                   //将uSex值存放在request对象中
request.setAttribute("age", uAge);                  //将uAge值存放在request对象中
request.setAttribute("city", uCity);                  //将"city值存放在request对象中
request.setAttribute("tel", uTel);                    //将uTel值存放在request对象中
%>
<jsp:forward page="getAttribute.jsp" />
代码说明如下。
程序的末尾必须使用JSP动作元素<jsp:forward page=" getAttribute.jsp" />将请求转发到getAttribute.jsp页面。因此,在getAttribute.jsp页面才能取得请求转发页面的设置数据。
(2)创建名称为getAttribute.jsp的页面,该页面的主要功能是通过request对象调用getAttribute()方法显示数据,程序代码如下:
getAttribute.jsp关键代码:
<table border="1">
<tr>
<td>姓名:</td>
<td><%=request.getAttribute("name")%></td> <!--通过getAttribute()方法获取name对象的值-->
</tr>
<tr>
<td>性别:</td>
<td><%=request.getAttribute("sex")%></td>   <!--通过getAttribute()方法获取sex对象的值-->
</tr>
<tr>
<td>年龄:</td>
<td><%=request.getAttribute("age")%></td>   <!--通过getAttribute()方法获取age对象的值-->
</tr>
<tr>
<td>所在城市:</td>
<td><%=request.getAttribute("city")%></td>   <!--通过getAttribute()方法获取city对象的值-->
</tr>
<tr>
<td>电话:</td>
<td><%=request.getAttribute("tel")%></td>     <!--通过getAttribute()方法获取tel对象的值-->
</tr>
</table>
注意:
设置为request范围内存取的数据,只能在请求转发后的页面对其进行取值,其他页面不能对其取值。
(3)程序发布后,启动Tomcat服务器,在浏览器地址栏中输入如下地址:http://127. 0.0.1:8080/02,运行结果如图1所示。
图1  getAttribute()方法取得数据
完整代码:
index.jsp完整代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%
String uName = "城中狼";
String uSex = "男";
String uAge = "26岁";
String uCity = "长春";
String uTel = "12345678987";
request.setAttribute("name", uName);
request.setAttribute("sex", uSex);
request.setAttribute("age", uAge);
request.setAttribute("city", uCity);
request.setAttribute("tel", uTel);
%>
<jsp:forward page="getAttribute.jsp" />
getAttribute.jsp完整代码:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<body>
<table width="222" border="1" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#000000">
<tr bgcolor="#FFFFFF">
<td width="101">姓名:</td>
<td width="108"><%=request.getAttribute("name")%></td>
</tr>
<tr bgcolor="#FFFFFF">
<td>性别:</td>
<td><%=request.getAttribute("sex")%></td>
</tr>
<tr bgcolor="#FFFFFF">
<td>年龄:</td>
<td><%=request.getAttribute("age")%></td>
</tr>
<tr bgcolor="#FFFFFF">
<td>城市:</td>
<td><%=request.getAttribute("city")%></td>
</tr>
<tr bgcolor="#FFFFFF">
<td>电话:</td>
<td><%=request.getAttribute("tel")%></td>
</tr>
</table>
</body>
</html>
WEB-INF/ web.xml完整代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


当你在Servlet与JSP页面跳转时,经常会用到这两个方法。但是区别是什么呢。response.sendRedirect是重新将请求发给了客户端,让客户端再重新组织request,然后访问重定位的网址,因此,你在之前组装的request里的Attribute统统都没了。但是如果你用的是 Session,Session里的值还是有的。
而 request.getRequestDispatcher("servlet/PlatformList.jsp").forward(request,response); 是在服务器内部进行跳转,是带着request和response的。之前设置的request中的attribute当然也在。所以可以用 request的attribute或者session来传值,都可以。
然而,我在具体实验时,却遇到了 request.getRequestDispatcher("servlet/PlatformList.jsp").forward(request,response); 可以跳转过去,但是却获得不了request里的Attribute。而且自从用了 getServletContext().getRequestDispatcher进行跳转后,在JSP页面跳回Servlet的时候,地址也不用带上 servlet了,直接用XXXservlet就可以了。我很奇怪,目前也没有时间进行实验探讨了。因此先记录下来。反正目前功能实现了就好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值