过滤器的作用:
作用:过滤器可以用手身份验证,目志记录,字符编码转换,数据压缩,权限检查
案例: 解决乱码
定义过滤器类,实现过滤器接口,
实现do Filter方法,设置转码
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
然后,放行(执行下一个)
首先创建过滤器EncodingFifer
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
在创建servlet
@WebServlet("/lifeServlet")
public class LifeServlet extends HttpServlet {
public LifeServlet(){
System.out.println("被实例化");
}
public void init() throws ServletException{
System.out.println("被初始化");
}
// public void service(HttpServletRequest request,HttpServletResponse response){
// System.out.println("方法被执行");
// }
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行了dopost");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
public void destroy(){
System.out.println("被销毁");
}
}
debug调试时可以发现,会先执行过滤器的
servletRequest.setCharacterEncoding("UTF-8"); servletResponse.setCharacterEncoding("UTF-8");
过滤操作,再执行
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("执行了dopost"); }
最后提交
1