过滤器的作用和意义:
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。
例如,某网站里的功能,有很多界面有验证“是否登录”业务,如果使用过滤器的话就可以简化很多本来需要在Servlet中写入的代码段。化繁为简。
这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。
过滤器的写法:
@WebFilter("*.do") public class CharacterEncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器正在启动。"); System.out.println("过滤器正在初始化!"); }
//在这个方法里面写。 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { System.out.println("-------------------过滤器开始工作!-------------------"); //设置编码格式。 request.setCharacterEncoding("UTF-8"); //获取账号密码的关键字信息。 HttpServletResponse resp = (HttpServletResponse) response; HttpServletRequest req = (HttpServletRequest) request; Map w = (Map) req.getSession().getAttribute("W"); //如果没有登录则重定向到登录界面 if (w == null){ resp.sendRedirect("/shop/views/login.jsp"); System.out.println("-------------------过滤器拦截成功!-------------------"); }else { //放行数据。 filterChain.doFilter(req,resp); } } @Override public void destroy() { System.out.println("我被销毁啦。"); } }
实现过滤的方法:
*.do 意为:
所有@WebServlet的映射路径带.do的都会进行拦截。
例如:/scart.do、/Addcart.do
原文:https://www.cnblogs.com/lxr521/p/10759311.html