一, 使用 servlet 处理的局限性
可以通过:
request.setCharacterEncoding("UTF-8");
正确获取 UTF-8 编码的中文, 但是如果有很多 servlet 都需要获取中文, 那么就必须在每个 Servlet 中增加这段代码.
有一个简便的办法, 那就是通过 Filter 过滤器进行中文处理 , 那么所有的 Servlet 都不需要单独处理了.
二, 使用 Filter 处理
创建一个 EncodingFilter, 设置如下代码:
- package filter;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- 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.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class EncodingFilter implements Filter {
- @Override
- public void destroy() {
- }
- @Override
- public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
- throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- HttpServletResponse response = (HttpServletResponse) res;
- request.setCharacterEncoding("UTF-8");
- chain.doFilter(request, response);
- }
- @Override
- public void init(FilterConfig arg0) throws ServletException {
- }
- }
doFilter 方法的第一个参数 req, 是 ServletRequest 类型的, 不支持 setCharacterEncoding, 所以要先强制转换为 HttpServletRequest
三, 配置 web.xml
- <filter>
- <filter-name>EncodingFilter</filter-name>
- <filter-class>filter.EncodingFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>EncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
在 SpringMVC 中, web.xml 配置与上面类似:
- <filter>
- <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
来源: http://www.bubuko.com/infodetail-2585181.html