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 request.getParameter中文乱码解决方法 在 Java Web 开发中,request....无论是通过转码、Tomcat 配置还是重写 `getParameter` 方法,我们都可以解决 request.getParameter() 获取 URL 中文参数乱码的问题。
在Java的Web应用中,处理request对象中的中文参数是一个常见的挑战,尤其是在JSP中使用`request.getParameter()`时可能会出现乱码问题。这个问题的复杂性主要源于字符编码在多个环节的转换过程中可能出现不一致,...
表单提交出现乱码的原因是 POST 方式将信息提交到 Tomcat 时,Tomcat 内部编码(iso-8859-1)与接收时(request.getParameter())的编码不一致造成乱码。 解决方法 A:接收参数时进行编码转换,例如: ``` String ...
- 示例代码:`String keyword = URLDecoder.decode(request.getParameter("keyWord"), "utf-8");` - 注意:解码时指定的编码格式需要与客户端发送时保持一致。 3. **修改Tomcat配置**: - 修改Tomcat的`server....
request.getAttribute() 用于获取当前请求中的属性,而 request.getParameter() 用于获取当前请求中的参数。 2. response.sendRedirect() 和 forward() 区别? response.sendRedirect() 用于重定向到一个新的 URL...
- 接收含有汉字的表单信息时,需要设置请求对象的编码,例如使用 `request.setCharacterEncoding("UTF-8")` 来确保汉字能正确解码。 第四章: 1. 表单数据处理: - JSP 页面如果需要处理表单数据,通常会使用 `...
当在Tomcat服务器上处理包含中文的URL时,如果直接通过`request.getParameter()`获取参数,可能会因为默认的编码格式ISO-8859-1不支持中文,导致中文参数变成乱码。为了解决这个问题,开发者通常会采用以下步骤: 1...
这行代码应该在处理请求参数(如`request.getParameter()`)之前添加,确保请求的字符编码为UTF-8。注意,这只能处理POST请求,因为GET请求的参数已经由浏览器编码,此时设置请求编码无效。 示例代码: ```jsp ...
String param = URLDecoder.decode(request.getParameter("paramName"), "UTF-8"); ``` 总结来说,解决Tomcat下的中文乱码问题,关键在于确保JSP页面的编码与服务器设置一致,并在处理表单提交时正确设置请求的字符...
在JSP开发中,处理URL编码传递...通过正确使用`URLEncoder.encode()`进行编码,以及适当地解码`request.getParameter()`返回的值,可以有效地解决乱码问题。同时,保持整个应用的编码规范,有助于减少类似问题的发生。
以下将详细解释这个问题的原因、影响以及如何解决。 首先,我们要明白字符编码的基本原理。在计算机中,字符是以特定编码方式存储的,如ASCII、UTF-8、GBK等。当数据在不同系统之间传递时,如果编码不一致,就可能...
若JSP页面已经指定了`charset=gbk`,则无需更改Tomcat配置,只需在Action或Servlet中对获取的参数进行转换,如`String checkname = new String(request.getParameter("checkname").getBytes("ISO-8859-1"), "GBK");...
这个问题的复杂性源于在数据传输过程中涉及的多次字符编码和解码操作,以及浏览器、Web服务器(如Tomcat)的不同配置。以下是解决这个问题的关键知识点: 1. **JSP文件的字符编码**: JSP文件本身需要定义正确的...
本文总结了Tomcat 4.0 和 4.1 版本下常见的中文问题及其解决方案,包括JSP页面中文显示问题、POST和GET方式提交表单中文乱码问题以及Cookie中中文字符处理问题。通过以上方法,可以有效解决Tomcat中文环境中出现的...
Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...
无论是GET还是POST方式提交,当使用`request.getParameter`获取参数时,如果没有进行正确的编码转换,都可能导致乱码。这是因为Tomcat服务器默认使用ISO-8859-1编码处理请求参数。 对于POST请求,一种解决方法是...
服务器端使用`request.getParameter("param")`获取表单中的值,此时会对接收到的值进行解码。默认情况下,`Request`使用的是“ISO-8859-1”编码格式。因此,当数据是以“UTF-8”编码,而服务器却以“ISO-8859-1”...
- **修改Tomcat配置**:在`server.xml`的`Connector`节点添加`useBodyEncodingForURI="true"`属性,使得Tomcat使用`request.setCharacterEncoding()`设定的编码对GET参数进行编码。 4. **其他特殊情况** - **上传...
例如,可以通过`request.getParameter()`方法获取表单提交的数据。 示例代码: ```jsp String username = request.getParameter("username"); request.setAttribute("username", username); %> <%= ...
String info = new String(request.getParameter("info").getBytes("ISO-8859-1"), "GBK"); %> ``` #### 2. 修改Tomcat配置 更彻底的解决方案是修改Tomcat服务器的配置文件`server.xml`,在Connector元素中添加`...