近来在学习Filter拦截器,@WebFilter中是没有指定顺序的参数,查看了一些博客后再加上验证得到的结果如下:
第一个拦截器
@WebFilter(filterName = "Filter1",urlPatterns = "/*")
public class MyFilter1 implements Filter {
//其他方法忽略
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("Myfilter1>>doFilter1");
chain.doFilter(req,resp);//放行
}
}
第二个拦截器
@WebFilter(filterName = "Filter2",urlPatterns = "/*")
public class MyFilter1 implements Filter {
//其他方法忽略
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("Myfilter2>>doFilter2");
chain.doFilter(req,resp);//放行
}
}
Servlet
@javax.servlet.annotation.WebServlet(name = "Servlet",urlPatterns = "")
public class MyServlet extends javax.servlet.http.HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
resp.getWriter().write("我是Servlet");
}
}
其执行结果为:
Myfilter1>>doFilter
Myfilter2>>doFilter2
service
@WebFilter(filterName = "Filter1",urlPatterns = "/*")
public class MyFilter1 implements Filter {
//其他方法忽略
System.out.println("Myfilter1>>doFilter");
//设置请求响应字符编码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("我是Filter1:修改字符编码为utf-8
");
resp.getWriter().write("我是MyFilter1");
chain.doFilter(req,resp);//放行
}
}
@WebFilter(filterName = "Filter1",urlPatterns = "/*")
public class MyFilter1 implements Filter {
//其他方法忽略
System.out.println("Myfilter1>>doFilter");
//此处响应操作使用的非utf-8编码
//此行代码如果注释掉的话,输出就没有问题了
resp.getWriter().write("我是MyFilter1");
chain.doFilter(req,resp);//放行
}
}
@WebFilter(filterName = "Filter2",urlPatterns = "/*")
public class MyFilter2 implements Filter {
//其他方法忽略
System.out.println("Myfilter2>>doFilter");
//设置请求响应编码为utf-8
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("我是MyFilter2");
chain.doFilter(req,resp);//放行
}
}
上面的两个拦截器后响应输出的中文字符都变成了乱码