servlet3.0 定义编码过滤器
servlet3.0中,不用再在web.xml中建立映射,直接用注解器即可,这个样子看起来有点像pyhton中的装饰器(不知道功能实现是否一样)。
tomcat使用的的编码方式:iso8859-1,而我们做其他事情的时候一般都是用utf-8,比如插入数据库的时候,如果不用utf-8,则会出现乱码。
解决方法有很多:
1.修改tomcat中的默认编码格式
2. 在要处理的servlet中加上,这两句话,但是我们不止有一个servlet,那么多的servlet都需要加上,有点太麻烦了。
3.用过滤器修改编码格式。
第一和第二种方法都有其局限性,我来重点介绍第三种方法。‘
在新建文件的时候新建一个filter文件:
在doFilter()中写要执行的操作
这里是将request和response中的编码格式都设置成utf-8,一个最简单的编码过滤器
package com.filter; 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.annotation.WebFilter; @WebFilter(urlPatterns = "/*")// '/*'表示所有的文件都要过滤 public class EncodeFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); chain.doFilter(request, response); return ; } public void init(FilterConfig fConfig) throws ServletException { } @Override public void destroy() { } }
注意:在 chain.doFilter(request, response);后一定要加 return;不加会出现404错误,。