在springboot中自定义Filter、Listener、Servlet、Interceptor

前提

在springboot启动类上加上@ServletComponentScan注解

@SpringBootApplication
@ServletComponentScan
public class SpbthymeleafApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpbthymeleafApplication.class, args);
    }
}

1.Filter


@WebFilter(filterName = "MyFilter",urlPatterns = {"/test/*"})
public class MyFilter implements Filter {

    private static Logger logger= LoggerFactory.getLogger(MyFilter.class);

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        logger.info("start");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
        String url=request.getRequestURI();
        logger.info(url);
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        logger.info("end");
    }
}

2.Listener

 监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。

监听器总共分为6类:

按监听的对象划分,可以分为

  • ServletContext对象监听器(ServletContextListener )
  • HttpSession对象监听器(HttpSessionListener )
  • ServletRequest对象监听器(ServletRequestListener )

 

    按监听的事件划分

  • 对象自身的创建和销毁的监听器
  • 对象中属性的创建和消除监听器
  • session中的某个对象的状态变化监听器

此处以HttpSessionListener和ServletContextListener为例

2.1 HttpSessionListener

@WebListener("myHttpSessionListener")
public class MyHttpSessionListener implements HttpSessionListener {
    private static Logger logger = LoggerFactory.getLogger(MyHttpSessionListener.class);

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        logger.info("session创建");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        logger.info("session销毁");
    }
}

2.2 ServletContextListener

@WebListener(value = "myListener")
public class MyContextListener implements ServletContextListener {
    private static Logger logger= LoggerFactory.getLogger(MyContextListener.class);


    @Override
    public void contextInitialized(ServletContextEvent sce) {
        logger.info("容器启动");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        logger.info("容器结束");
    }
}

3.Servlet

@WebServlet(name = "user", urlPatterns = "/user")
public class MyServlet extends HttpServlet {
    private static Logger logger = LoggerFactory.getLogger(MyServlet.class);
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        logger.info("servlet请求的URL",req.getRequestURI());
        PrintWriter writer = resp.getWriter();
        writer.write("请求成功");
        writer.flush();
    }
}

4.Interceptor

4.1  先新建一个类继承HandlerInterceptorAdapter,重写preHandle方法

@Component
public class MyInterceptor extends HandlerInterceptorAdapter {
    private static Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("拦截处理");
        return super.preHandle(request, response, handler);
    }
}

4.2 注册拦截器

@Configuration
public class registryInterceptor extends WebMvcConfigurationSupport {
    private static final String[] excludePathPatterns  = {"/images/*","/js/*"};
    @Autowired
    private  MyInterceptor myInterceptor;
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
        registry.addInterceptor(myInterceptor).addPathPatterns("/**")
                .excludePathPatterns(excludePathPatterns);
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值