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的概念。
是草莓味的啊 发布了25 篇原创文章 · 获赞 2 · 访问量 2138 私信 关注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。