两个都是通过request对象获取参数的方法,两者获取参数的作用域是不同的。
1.getParameter(“参数名称”)
request.getParameter()是获取一个表单或者是跳转路径所包含的参数值,
返回结果为String字符串,当表单中包含多个同名参数时,只能获取第一个,如果获取所有的参数值可使用getParameterValues()方法,此方法返回的是一个数组。
此外,getParameter()是没有对应的setParameter()方法的。
声明类为HttpServletRequest。
获取表单的参数
<form name="form" method="post" action="/index.do">
用户姓名:<input type="text" name="username" value="张三">
性别:<input type="text" name="sex" value="男">
身高1:<input type="text" name="height" value="180">
身高2:<input type="text" name="height" value="185">
<input type="submit" name="submit" value="提交">
</form>
String username = getParameter("username"); ------------ 张三
String height= getParameter("height"); ------------ 180
String[] height=request.getParameterValues("height");
System.out.println(java.util.Arrays.toString(height)); ----------- [180,185]
获取url的参数
127.0.0.1:8080/test/index.do?username=zhangsan&sex=boy
String username = getParameter("username"); ----------- zhangsan
String height= getParameter("height"); ---------- 空(url未包含此参数)
2.getAttribute(“参数名称”)
request.getAttribute()是获取session作用域中的参数;
返回结果为符合规范的任意类型的数据,String、Map、List均可。
request.getAttribute()获取的值可以通过request.setAttribute(“参数名称”,参数)来设置的。
声明类为HttpServletRequest。
String username = "张三";
request.setAttribute("name",username);
String name = request.getAttribute("name"); ---------- 张三
拓展
当获取url的值中包含中文时,需要对url进行转码,获取到值之后,再对获取的值进行转码utf-8即可,转码方式如下。
url路径传中文参数
127.0.0.1:8080/test/index.do?username=encodeURI(encodeURI("张三"))&sex=encodeURI(encodeURI("男"))
String username = java.net.URLDecoder.decode(username, "UTF-8"); -----------张三
String sex= java.net.URLDecoder.decode(sex, "UTF-8"); -----------男
在最后解释下,当谷歌搜索框搜索时会出现%20的情况就是输入内容中包含空格,encode转码后成为%20了,涨姿势了吧。
<script type="text/javascript">
document.write(encodeURI("百 度"); ---------------- 百%20度
</script>