- 论坛徽章:
- 0
|
很久没来CU了,今天就仔细回答一下这个问题吧
请求的提交分为两种:post和get
不过对于表单的处理,运用服务器一般是以ISO8859_1进行传输的(不管页面编码为什么),这样的话就需要在获取数据的地方进行转码,但这样的工作量会非常大,而且不便于维护。
所以常用的解决方法就是加Filter(仅适用于servlet2.3及以上)
在web.xml中注册
<filter>
<filter-name>Encodingfilter</filter-name>
<filter-class>
com.yumt.web.util.EncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> |
package com.yumt.web.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
/**
* 对web请求内容进行编码,解决乱码问�题
*/
public class EncodingFilter implements Filter {
protected String encoding;
protected FilterConfig filterConfig;
protected boolean ignore;
public EncodingFilter() {
encoding = null;
filterConfig = null;
ignore = true;
}
public void destroy() {
encoding = null;
filterConfig = null;
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
if (ignore || req.getCharacterEncoding() == null) {
String s = selectEncoding(req);
if (s != null) {
req.setCharacterEncoding(s);
}
}
HttpServletResponse httpResponse = (HttpServletResponse) res;
// HTTP 1.1
httpResponse.setHeader("Cache-Control", "no-cache");
// HTTP 1.0
httpResponse.setHeader("Pragma", "no-cache");
// prevents caching at the proxy server
httpResponse.setDateHeader("Expires", 0);
try {
chain.doFilter(req, res);
} catch (Exception e) {
}
}
public void init(FilterConfig filterconfig) throws ServletException {
filterConfig = filterconfig;
encoding = filterconfig.getInitParameter("encoding");
String s = filterconfig.getInitParameter("ignore");
if (s == null) {
ignore = true;
} else if (s.equalsIgnoreCase("true")) {
ignore = true;
} else if (s.equalsIgnoreCase("yes")) {
ignore = true;
} else {
ignore = false;
}
}
protected String selectEncoding(ServletRequest servletrequest) {
return encoding;
}
} |
这样的话将对post方式的所有数据进行转码。
但对于get的请求,一般通过设置URIEncoding="XXX"来处理,下班了后面写的简单了些,但已经能处理你的问题。 |
|