主要方法只有一个,也就是下面这个,代码逻辑很简单,如注释所解释
@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {String encoding = getEncoding();if (encoding != null) { //如果设置了encoding的值,则根据情况设置request和response的编码//若设置request强制编码或request本身就没有设置编码//则设置编码为encoding表示的值if (isForceRequestEncoding() || request.getCharacterEncoding() == null) { request.setCharacterEncoding(encoding);}//若设置response强制编码,则设置编码为encoding表示的值if (isForceResponseEncoding()) { //请注意这行代码,下面有额外提醒response.setCharacterEncoding(encoding);}}filterChain.doFilter(request, response);}# 额外提醒if (isForceResponseEncoding()) { response.setCharacterEncoding(encoding);}是在
filterChain.doFilter(request, response); 之前执行的,这也就是说这段代码的作用是设置response的默认编码方式,在之后的代码里是可以根据需求设置为其他编码的,即这里设置的编码可能不是最终的编码,网上很多文档说这里设置的是最终的编码方式,这是错的。