1.Filter执行顺序
Filter将按照 $ a~z _排列,其中不区分大小写,基本顺序与编译器中的排列顺序一致,以'_'开头的最后执行
2.常见错误
当过滤器地址设置重定向,且重定向地址使得过滤器成环型则会产生
request.getRequestDispatcher(request.getContextPath()+"/index.jsp").forward(request,response);
package com.zhang.shopping.filter; import com.zhang.shopping.util.Constants; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebFilter(value = "/*") public class SysFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; HttpSession session = request.getSession(); if(session.getAttribute(Constants.goods_list) == null || session.getAttribute(Constants.goods_context)==null){ request.getRequestDispatcher(request.getContextPath()+"/index.do").forward(request,response); } System.out.println(request.getContextPath()); System.out.println("SysFilter"); filterChain.doFilter(servletRequest,servletResponse); } public void destroy() { } }
package com.zhang.shopping.servlet; import com.zhang.shopping.service.shop.ShopService; import com.zhang.shopping.service.shop.ShopServiceImpl; import com.zhang.shopping.util.Constants; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "Shop",value = "/index.do") public class Shop extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getParameter("method"); System.out.println("进入get"); goods_context(req,resp); goods_list(req,resp,method); req.getSession().setAttribute(Constants.goods_context,Constants.GOODS_CONTEXT_LIST); req.getSession().setAttribute(Constants.goods_list,Constants.Goods_List); resp.sendRedirect("jsp/index.jsp"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); System.out.println("进入post"); } //获取商品 private boolean goods_list(HttpServletRequest request,HttpServletResponse response,String method){ ShopService shopService = new ShopServiceImpl(); boolean flag = false; if("手机".equals(method)){ flag = shopService.goods(1); }else if("男鞋".equals(method)){ flag = shopService.goods(2); }else if("女鞋".equals(method)){ flag =shopService.goods(3); }else if("手表".equals(method)){ flag = shopService.goods(4); }else if("自行车".equals(method)){ flag = shopService.goods(5); }else if("家具".equals(method)){ flag = shopService.goods(6); }else { flag = shopService.goods(0); } return flag; } //获取商品分类 private boolean goods_context(HttpServletRequest request,HttpServletResponse response){ ShopServiceImpl shopService = new ShopServiceImpl(); boolean flag = shopService.goods_context(); return flag; } }