Returns
the value of a request parameter as a String, or null if the parameter does not
exist. Request parameters are extra information sent with the request. For HTTP
servlets, parameters are contained in the query string or posted form data.
You
should only use this method when you are sure the parameter has only one value.
If the parameter might have more than one value, use getParameterValues.
If you
use this method with a multivalued parameter, the value returned is equal to
the first value in the array returned by getParameterValues.
If the
parameter data was sent in the request body, such as occurs with an HTTP POST
request, then reading the body directly via getInputStream
or getReader
can interfere with the execution of this method.
在英文api文档里面,对这个方法进行了很详细的阐述,我翻译一下:
返回一个字符串格式的请求参数值,如果这个请求参数不存在,那么返回null,请求参数 是 一个请求的扩展信息
就http servlets,请求参数包含在querystring 或者post提交的数据里面
当你确定这个请求参数只有唯一值,那么你使用这个方法,如果有多个值的话,你要使用getParameterValues.了,
如果你使用这个方法解析多值参数,那么将会返回getParameterValues结果的第一个值
如果参数数据经过request
body 传来的,比如 http post 请求,直接经过getInputStream or getReader 读取body,会影响这个方法的执行
网站上,经常有人说 这个方法 会先对参数进行解码,学的时候不求甚解,现在我们来看看到底是怎么回事:
就tomcat来说
具体实现 源码 是org.apache.catalina.core.ApplicationHttpRequest.getParameter(String)
它调用了 专门的 org.apache.catalina.core.ApplicationHttpRequest.parseParameters()方法来转换参数
该方法又调用了 org.apache.catalina.core.ApplicationHttpRequest.mergeParameters()来merge 参数
我们来读下它的源码
/**
* Merge the parameters from the saved query parameter string (if any), <br>
* and the parameters already present on this request (if any), <br>
* such that the parameter values from the query string show up first if there are duplicate parameter names.
*/
private void mergeParameters(){
if ((queryParamString == null) || (queryParamString.length() < 1))
return;
HashMap queryParameters = new HashMap();
String encoding = getCharacterEncoding();
if (encoding == null)
encoding = "ISO-8859-1";
try{
RequestUtil.parseParameters(queryParameters, queryParamString, encoding);
}catch (Exception e){
;
}
Iterator keys = parameters.keySet().iterator();
while (keys.hasNext()){
String key = (String) keys.next();
Object value = queryParameters.get(key);
if (value == null){
queryParameters.put(key, parameters.get(key));
continue;
}
queryParameters.put(key, mergeValues(value, parameters.get(key)));
}
parameters = queryParameters;
}
可以看到
,先会使用 encoding 对参数进行编码 ,这里调用了 getCharacterEncoding()
这就是 为什么过滤器 ,过滤中文,会使用 request.setCharacterEncoding(CharsetType.UTF8); 的原因
如果不设置值,默认 使用ISO-8859-1
上面就是 很多网站,很多攻略 所说的 request.getParameter()会内部对参数解码 的实现过程
分享到:
相关推荐
java servlet 请求 时 tomcat request.getParameter 乱码
request.getParameter() 和request.getAttribute() 区别
encType="multipart/form-data" 根据上传不同,主要分两步,可以有效的解决request.getParameter(String s)是null值
解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
今天跟大家分享几个解决java Web开发中,request.getParameter()获取URL中文参数乱码的解决办法,需要的朋友可以参考下
本篇文章小编为大家介绍,基于request.getAttribute与request.getParameter的区别详解。需要的朋友参考下
// String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // this.login(request,response); // }else if("register".equals(method...
String xm = request.getParameter("xm"); String rxsj = request.getParameter("rxsj"); String yx = request.getParameter("yx"); String zy = request.getParameter("zy"); String sf = request.getParameter("sf...
在后台通过Request取值为null,是因为只设置了id属性,而取值候用的是name属性,问题就出现在这里
String canshu=request.getParameter("canshu"); YonghuService yhs=new YonghuServiceImpl(); if(canshu.equals("tianjia")){ String gysname=request.getParameter("proName"); String gysmiaoshu=...
解决当FORM的ENCTYPE="multipart/form-data" 时action方法或者控制层用request.getParameter()获取不到值的方法 ?
getParameter()获得的是String类型,多个参数名相同默认获取第一个getParameterValues()获得的是数组,多个参数名相同时,值在同
String version = request.getParameter("version"); //获取神州付支付接口的版本号 String merId = request.getParameter("merId"); //获取商户ID String payMoney = request.getParameter("payMoney"); //获取...
您的姓名是:<%=request.getParameter("name")%> 您的密码是:<%=request.getParameter("pwd")%> 你的职业是:<%=request.getParameter("career")%> 喜欢的城市有:<%=request.getParameter("city")%>...
JSP用过滤器解决request getParameter中文乱码问题.docx
String sourceLan = request.getParameter("source"); String targetLan = request.getParameter("target"); String q = request.getParameter("q"); Translate.setHttpReferrer("leyibo.com"); msg = ...
很全面的了解request的属性和用法,叫你如何是使用request
String startTime=request.getParameter("startyear")+"-"+request.getParameter("startmonth")+"-"+ request.getParameter("startday"); String endTime=request.getParameter("endyear")+"-"+request....
String signature=request.getParameter("signature"); String timestamp=request.getParameter("timestamp"); String nonce=request.getParameter("nonce"); String echostr=request.getParameter...
int userTell = Integer.parseInt(request.getParameter("mobile")); String userAddress = request.getParameter("address"); String userPri = request.getParameter("auth"); User user=new User(); ...