request.getAttribute()和 request.getParameter()区别:
a、request.getParameter()获取的类型是String;request.getAttribute()获取的类型是Object。
b、request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数;request.getAttribute()获取的是对象容器中的数据值/对象。
c、request.setAttribute()和request.getAttribute()可以发送、接收对象;request.getParamter()只能接收字符串,官方不开放request.setParamter()(也就是没有这个方法)
d、特别注意:request.getParamter()无法接收通过request.setAttribute()设置的值
解决方法:
request.setAttribute("name", "达维营");//设置request作用域,其接收只能使用request.getAttribute()
request.getRequestDispatcher("hi").forward(request, response);
// 接收:
String name = (String) request.getAttribute("name");//获取作用域
用request.getParameter获取数据中文
若需要使用request.getParamter()接收非直接浏览器POST/GET请求的值,可以通过以下方法:
request.setCharacterEncoding("utf-8");
//request.setCharacterEncoding("GBK"); // 注意:传递汉字时要设置编码格式,如不设置,汉字会显示为??;经测试utf-8与GBK两种编码格式都可以
// 将参数与网址进行拼接
request.getRequestDispatcher("hi?name=达维营").forward(request, response);
// 接收:
String name = request.getParameter("name");
request.getParameter获取数据中文显示为双问号??
(一)通过上面的方法可以解决。
即使用:
request.setCharacterEncoding("UTF-8");将请求体中的字符集转换为UTF-8
(二)网上有人通过以下方法解决(这种方法解决不了上面代码传值)
Tomcat的默认编码格式是ISO-8859-1,解决思路是在传输和接收端都将编码统一设置为UTF-8
String name =new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");