?
web的工程中,有时会遇到编码的错误,在这儿就写一下我读到的问题,以及解决方法。
?
解决方法1:加入过滤器。
?
步骤: 定义一个过滤器,并在web.xml中声明。(假如你没有用到spring架构)
? ? ? ? ? ? ? ? ?(如果你用到了Spring架构,则就不需要定义一个过滤器,因为spring自身会有一个过滤器,只需要在web.xml中引用就可以了)
?
过滤器如下:
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; public class SetCharacterEncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; protected boolean ignore = true; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig=filterConfig; this.encoding=filterConfig.getInitParameter("encoding"); String value=filterConfig.getInitParameter("ignore"); if(value==null) this.ignore=true; else if(value.equalsIgnoreCase("true")) this.ignore=true; else this.ignore=false; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (ignore || (request.getCharacterEncoding() == null)) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void destroy() { this.encoding = null; this.filterConfig = null; } protected String selectEncoding(ServletRequest request) { return (this.encoding); } }
?
在web.xml中引用(没有用到spring时的web.xml配置)
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.common.util.SetCharacterEncodingFilter</filter-class> <!-- 变量设置,将SetCharacterEncodingFilter类中的变量进行设置,系统将自动将变量赋值 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
?
(spring的配置)
? ??
因为spring中自带过滤器,所以仅需要在web.xml中引用就可以了
?
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
?
?
?
但是有的时候,即使是配置了过滤器,仍然有乱码。这时就需要配置tomcat了
?
解决方法2:配置tomcat。
?
在tomcat的service.xml中的Connector节点,加入一句话:useBodyEncodingForURI="true" ?URIEncoding="UTF-8"
?
举例:(最后一句话)
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
?
这样,大部分的中文乱码均可以解决了。
?