文章目录
  1. 1. 引入
  2. 2. 无法解决的问题

引入

tomcat9.0中,servlet-api.jar中的Filter接口有三个方法:

​ init(): public default void init(FilterConfig filterConfig);

​ doFilter(): public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain);

​ destory(): public default void destroy();

init()和destory()有default修饰,也就是说,

可以不实现init()和destory()方法,实现该接口的类会继承这两个方法

无法解决的问题

????????????????????????????????????????

定义MyFilter实现Filter接口,重写doFilter()方法,拦截路径/*,这样会拦截所有的资源。

接着,对请求和响应进行设置编码格式,再放行

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setCharacterEncoding("utf-8");
//浏览器的解码格式
response.setContentType("text/html;charset=utf-8");
//放行
chain.doFilter(request, response);
}

问题出现:

​ 访问静态资源全部变成document类型

​ 例如访问一个图片,该图片会以文档的形式被浏览器解析

问题定位:

​ 设置响应编码格式的问题,具体原因

​ 浏览器解析成text/html格式

​ response.setContentType(“text/html;charset=utf-8”);

解决:

​ 解决1

​ tomcat7不会出现该问题

​ 解决2:

​ 对静态资源,非静态资源进行判断

​ 如果是静态资源,不设置响应编码格式

​ 默认会自动设置响应格式

​ 例如:图片格式Content-Type:image/jpeg;charset=utf-8

​ 如果是非静态资源,再设置响应编码格式

文章目录
  1. 1. 引入
  2. 2. 无法解决的问题