通常后处理的情况比较少见,之前都不大清楚还有这种操作:
(https://www.cnblogs.com/junzi2099/p/8022058.html)
也就是说,如下代码:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
chain.doFilter(request, response)之前是对请求就行预处理,调用chain.doFilter时,服务器会先调用后方的filter,如果后面没有filter了,那么再跳转到相应的servlet进行业务处理。处理完成之后,退出了servlet,回到chain.doFilter出继续执行下方的代码,下方可以写一些内容实现对响应的后处理。整个过程,doFilter方法一直处于调用栈的下方,请求是先经过filter再到servlet,退出servlet后再经过一遍filter再返回到客户端。就像在客户端和servlet中间建了一个门,进出都要经过一遍。 |