getParameter()和getAttribute()的区别

getParameter()getAttribute()
返回字符串返回任意类型(可以是对象类型)
获取的是客户端设置的数据获取的是服务器设置的数据
HttpServletRequest类只有getParameter()方法,服务器端不能添加参数,只能分析request页面的文本,取得设在表单或url的值。HttpServletRequest类有setAttribute()【将值放入到request对象内存中】和getAttribute()【服务器重定向到其他页面时获取对应值,达到一次请求多个页面共享对象】
从Web客户端传到Web服务器端,代表HTTP请求数据传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享
获取POST/GET传递的参数值,读取提交的表单中的值 用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。

两个Web组件之间为链接关系时:被链接的组件通过getParameter()方法来获得请求参数。
例:a.jsp和b.jsp为链接关系,a.jsp向b.jsp传递当前的用户名字

a.jsp使用get和post方式发送请求

<!--get方式,通过url连接键值对-->
	<a href="authenticate.jsp?username=weiqin">authenticate.jsp </a> 
<!--post方式,通过name传递-->
	<form name="form1" method="post" action="authenticate.jsp"> 
	  	姓名:<input type="text" name="username"> 
		<input type="submit" name="Submit" value="提交"> 
	</form> 

b.jsp中通过request.getParameter(“username”)方法来获得请求参数username

<!--获得Form元素,默认字符编码为ISO-8859-1,在执行操作之前,设置request的编码格式-->
<% 
	request.setCharacterEncoding("utf-8");
	String username=request.getParameter("username"); 
%> 

在这里插入图片描述
当两个Web组件之间为转发关系时:通过getAttribute()方法来转共享request范围内的数据。
例:a.jsp和b.jsp为转发关系,a.jsp向b.jsp传递当前的用户名字

a.jsp调用setAttribute()方法:

<% 
	String username=request.getParameter("username"); 
	request.setAttribute("username",username); 
%> 
<jsp:forward page="b.jsp" /> 

b.jsp中通过getAttribute()方法获得用户名字

<% String username=(String)request.getAttribute("username"); %> 
b: <%=username %> 

在这里插入图片描述

java自定义的Parameter的概念。

getParameter()定义在ServletRequest上,而不是HttpServletRequest上。
getParameter()获得的是:querystring【键值对形式在url地址上连接值】和body【用x-www-form-encoded编码的】的key/value对的并集。如果这些key有重复(比如url里写a=1,body里写a=2),使用getParameterValues既可以返回一个列表(a=[1,2])。如果body是其他格式,如multipart/form-data, getParameter就什么也拿不到,必须用其他的可以parse form data格式的库来做。
HttpServletRequest读取body的通用方法是从inputstream里直接读。但是如果body是x-www-form-data格式,并且开发者先调用了getParameter,底层的实现实际上是从request inputstream去读取所有数据并且解析。也就是说,当第一次调用getParameter后,开发者如果自己再去读取inputstream,就直接会遇到EOF。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值