通常情况下Tomcat中遇到乱码问题,解决的思路都是保证数据库+程序+页面编码三码一致就能解决,今天遇到乱码,奔着同样的思路去解决,可不灵光了。
问题描述:jforum开源论坛,官方下载下来安装后一切正常,没有乱码问题。现在jforum中增加了一个filter做自动登录,filter功能很简单,判断当前请求中有没有某个参数,有的话就执行自动登录,代码如下:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { String pal = req.getParameter("_PAL"); if(pal != null) { //do autologin... } chain.doFilter(req, res); }
可在web.xml中加了这个filter以后,所有post的中文全乱码了(不管有没有"_PAL"参数),去掉filter又好了,凌乱了,百思不得骑姐。
正常情况下就是想到在filter中增加request.setCharacterEncoding("UTF-8")之类的调用(其实在我的filter后面jforum进行类似这样的调用的,所以要搞明白为啥还要在我的filter里加),加了之后确实是好的。但明眼一看filter里没干啥呀,为啥filter就影响了这个呢?于是乎tomcat源码出动了,经过观看tomcat源码一番,终于明白,原来当request.getParameter方法执行的时候,tomcat就已经去解析整个请求中所有参数了(解析的时候就会应用上编码),而这之后的所有request.setCharacterEncoding调用对参数来说不再起作用(因为所有参数已经被解析过了),所以结论就是:如果要调用request.setCharacterEncoding进行编码设置,一定要在任何参数被访问之前调用。
相关推荐
当你在过滤器中调用`request.setCharacterEncoding("UTF-8")`时,它会确保POST请求的数据按照UTF-8格式进行解码,从而避免乱码的出现。这是因为POST请求的数据是在请求体中传递的,可以被这个方法覆盖其默认编码。 ...
对于 POST 方法,Tomcat 会使用 request.setCharacterEncoding 方法设置的编码来处理,如果未设置,则使用默认的 iso-8859-1 编码。然而,对于 GET 方法,Tomcat 并不会考虑使用 request.setCharacterEncoding 方法...
* 是否正确地使用了 request.setCharacterEncoding 和 response.setCharacterEncoding 方法 * 浏览器的编码方式是否正确 字符编码方式的设置是 JSP 中非常重要的一方面,正确地设置字符编码方式可以避免乱码问题的...
request.setCharacterEncoding("UTF-8"); ``` #### 四、总结 通过对Tomcat服务器的适当配置,可以有效地解决`request.getParameter`方法在处理中文参数时出现的乱码问题。具体而言,通过在`server.xml`文件中...
在 JSP/Servlet 中主要有四个地方可以设置编码,分别是 pageEncoding、contentType、request.setCharacterEncoding 和 response.setCharacterEncoding。下面我们将详细介绍每一个编码方式的作用和使用场景。 1. ...
解决乱码问题的方法有很多,一般情况下,使用 request.setCharacterEncoding(encoding) 方法就可以解决乱码问题。在 JSP 和 STRUTS 等框架中,可以使用过滤器来解决乱码问题。例如,在 TOMCAT 中,可以使用 ...
1. **设置请求的字符编码**:使用`request.setCharacterEncoding("UTF-8")`来指定请求参数的编码格式。 2. **设置响应的字符编码**:使用`response.setCharacterEncoding("UTF-8")`设置服务器响应数据的编码。 3. **...
request.setCharacterEncoding(encoding); } } // Pass control onto the next filter chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { ...
`useBodyEncodingForURI` 参数表示是否用 `request.setCharacterEncoding` 参数对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码,在默认情况下,该参数为 `false`。`URIEncoding` 参数指定对所有 GET ...
request.setCharacterEncoding("GBK"); // 设置请求的字符编码 chain.doFilter(request, response); // 继续执行后续操作 } @Override public void init(FilterConfig filterConfig) throws ServletException ...
<% request.setCharacterEncoding("gbk"); %> ``` 三、GET 数据和 URL 数据接收 在接收 GET 数据和 URL 数据时,可以在 Tomcat 配置文件 server.xml 的 Connector 标签中设置 useBodyEncodingForURI 为 true,或者...
第一种解决方法是通过contentType、pageEncoding或response.setCharacterEncoding设置网页编码。例如,使用GBK编码,可以使用以下代码: 或: 第二种解决方法是根据具体情况进行设置。例如,对于POST数据的接收,...
request.setCharacterEncoding("UTF-8"); ``` 这些代码将确保 request 和 response 的编码方式是一致的,从而解决中文乱码问题。 Tomcat 服务器的解决方案 在 Tomcat 服务器中,可以使用以下过滤器来解决中文乱码...
2. **手动设置`request`编码**:若选择`useBodyEncodingForURI="true"`,还需要在接收数据的JSP中设置`request.setCharacterEncoding()`。 推荐使用`useBodyEncodingForURI="true"`,因为它对所有应用有效,无需在...
对于客户端提交的数据,可以通过设置`request.setCharacterEncoding()`方法来指定接收数据的编码格式。例如,如果希望接收的数据为GB2312编码,则可以在处理请求前添加以下代码: ```java request.setCharacter...
具体做法是在获取参数前调用`request.setCharacterEncoding()`方法,指定字符集为GBK或其他所需编码格式。示例代码如下: ```jsp request.setCharacterEncoding("GBK"); %> <%=request.getParameter("info")%> ``...
request.setCharacterEncoding("gb2312"); 或者,使用过滤器来解决问题,例如: public class SetCharacterEncodingFilter implements Filter { private String encoding = null; private FilterConfig ...
`%request.setCharacterEncoding("UTF-8");%` 这行代码应该在处理请求参数(如`request.getParameter()`)之前添加,确保请求的字符编码为UTF-8。注意,这只能处理POST请求,因为GET请求的参数已经由浏览器编码,...
`request.setCharacterEncoding()`用于指定客户端发送到服务器的数据编码格式,而`response.setCharacterEncoding()`则指定了服务器返回给客户端的数据编码。这样做可以在当前页面内解决乱码问题,但只对当前JSP页面...