SpringBoot 整合Servlet、Filter和Listener,都有两种方式
方式一采用注解 一、SpringBoot和Servlet整合1、用注解整合
1)创建一个Servlet类继承HttpServlet类,用注解@WebServlet配置Servlet映射
@WebServlet(urlPatterns = "/index")
public class IndexServlet extends HttpServlet {
@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 {
System.out.println("IndexServlet 的doXxx() 方法被调用了...");
resp.getWriter().print("IndexServlet doXxx()!");
}
}
2)在SpringBoot的启动类上加注解@ServletComponentScan,扫描注解并初始化
@SpringBootApplication
@ServletComponentScan
public class Springbootdemo1Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo1Application.class, args);
}
}
二、SpringBoot和Filter整合
1、用注解整合
1)创建一个MyFilter类实现Filter,用注解@WebFilter配置Filter映射
@WebFilter(filterName = "MyFilter", urlPatterns = {"/index"})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init...");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
String url = req.getRequestURI();
//拦截器配置拦截有所url地址的时候/*,会出现连续拦截两次的情况,原因是因为浏览器发出访问了图标favicon.ico的请求
if(url.contains("favicon.ico")){
return;
}
System.out.println("doFilter...进来了");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("doFilter...出去了");
}
@Override
public void destroy() {
System.out.println("destroy...");
}
}
2)在SpringBoot的启动类上加注解@ServletComponentScan,扫描注解并初始化
@SpringBootApplication
@ServletComponentScan
public class Springbootdemo1Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo1Application.class, args);
}
}
三、SpringBoot和Listener整合
常用的Web事件的六大监听接口如下:
ServletContextListener:用于监听Web的启动及关闭
ServletContextAttributeListener:用于监听ServletContext范围内属性的改变
ServletRequestListener:用于监听用户请求
ServletRequestAttributeListener:用于监听ServletRequest范围属性的改变
HttpSessionListener:用于监听用户session的开始及结束
HttpSessionAttributeListener:用于监听HttpSession范围内的属性改变
1、用注解整合
1)创建一个MyListernner类实现六大监听接口之一即可(根据业务),用注解@WebListener配置Listernner映射
@WebListener
public class MyListernner implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("MyListernner初始化啦...");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("MyListernner摧毁啦...");
}
}
2)在SpringBoot的启动类上加注解@ServletComponentScan,扫描注解并初始化
@SpringBootApplication
@ServletComponentScan
public class Springbootdemo1Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo1Application.class, args);
}
}
创建的Servlet、Filter和Listener都不使用那些映射与扫描注解,只需要在@Configuration类中加入类似以下的代码即可注入。
public class IndexServlet extends HttpServlet {
...
}
@Configuration
public class WebConfig {
@Bean
public ServletRegistrationBean getIndexServletBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new IndexServlet());
bean.addUrlMappings("/index");
return bean;
}
@Bean
public FilterRegistrationBean getMyFilterBean(){
FilterRegistrationBean bean = new FilterRegistrationBean(new MyFilter());
bean.addUrlPatterns("/*");
return bean;
}
@Bean
public ServletListenerRegistrationBean getMyListennerBean(){
ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new MyListernner());
return bean;
}
}
效果和方式一相同
常用的Web事件的六大监听接口使用:六大监听器的web简单使用
end~