之前的博客在Servlet学习中提到过中文问题的处理;但是那种处理方法过于复杂 且不好用
最主要的就是以下的语句:
request.setCharacterEncoding("UTF-8");
正确获取UTF-8编码的中文,如果有很多servlet都需要获取中文,那么就必须在每个Servlet中增加这段代码。才能在每个web页面显示时不会导致中文乱码。
这样造成在写每一个模块的servlet时,都得记着加上request.setCharacterEncoding(“UTF-8”);这一语句
在Filter中进行中文处理会更简便——通过Filter过滤器进行中文处理 ,那么所有的Servlet都不需要单独处理了。
示例: 常见的处理就是 Servlet的CRUD内容 多个控制器(servlet)里再进行操作时 数据会进行更改比如属性名。 大致分为 增删改查四个 servlet
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
基本这四个 servlet为了不中文乱码 都在第一行加入了—— request.setCharacterEncoding(“UTF-8”);
为了操作简便 引入filter则—— 创建 Filter类,直接一劳永逸
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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);
}
注意 doFilter方法要设置三个参数 其中FilterChain 更为重要,Filter FilterChain 等等都是抽象接口类型
doFilter方法的第一个参数req,是ServletRequest 类型的,不支持setCharacterEncoding,所以要先强制转换为HttpServletRequest
配置web.xml:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>Filters.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<url-pattern>/*</url-pattern>
表示为所有的访问都使用该Filter ,都得经过该过滤器
|