1。使用ServletAPI注入Servlet:@ServletComponentScan(basePackages="com.atguigu.admin"):指定原生Servlet组件的放置位置@WebServlet(urlPatterns="/my"):作用:直接响应,不用Spring的拦截器?/*步骤:使用@WebServlet注解并设置匹配路径+@ServletComponentScan扫描Servlet组件继承HttpServlet类并重写方法*/@WebServlet(urlPatterns="/my")publicclassMyServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)抛出ServletException,IOException{resp.getWriter().write("666");}}@ServletComponentScan(basePackages="com.atguigu.admin")//扫描Servlet组件@SpringBootApplicationpublicclasspWebAdminAppot05{staticvoidmain(String[]args){SpringApplication.run(Boot05WebAdminApplication.class,args);}}注入Filter:@WebFilter(urlPatterns={"/css/*","/images/*"})/*step:使用@WebFilter注解并设置拦截路径实现Filter接口并重写方法*/@Slf4j@WebFilter(urlPatterns={"/css/*","/images/*"})publicclassMyFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{log.info("MyFilter初始化完成。。。。。。。。");}@OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{log.info("MyFilter执行过滤。。。。。。。。");filterChain.doFilter(servletRequest,servletResponse);}@Overridepublicvoiddestroy(){log.info("MyFilter销毁。。。。。。。。。");}}InjectListener:@WebListener/*Steps:使用@WebListener注解实现ServletContextListener接口和实现方法*/@Slf4j@WebListenerpublicclassMyListenerimplementsServletContextListener{//项目一运行就执行该方法@OverridepublicvoidcontextInitialized(ServletContextEventsce){log.info("MyListener监听项目初始化完成");}//该方法会在项目真正停止后执行(点击idea中的红色小方块按钮不起作用)@OverridepublicvoidcontextDestroyed(ServletContextEventsce){log.info("MyListener监听到项目已经终止");}}推荐使用这种方式:2.使用RegistrationBeanServletRegistrationBean,FilterRegistrationBean,ServletListenerRegistrationBean注释掉@WebServlet,@WebFilter,@WebListener@Slf4j//@WebServlet(urlPatterns="/my")请求";ri).write("666");}}@Slf4j//@WebFilter(urlPatterns={"/css/*","/images/*"})publicclassMyFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{log.info("MyFilter初始化完成。。。。。。。”);}@OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{log.info("MyFilter执行过滤。。。。。。。。");filterChain.doFilter(servletRequest,servletResponse);}@Overridepublicvoiddestroy(){log.info("MyFilter销毁。。。。。。。。。");}}@Slf4j//@WebListenerpublicclassMyListenerimplementsServletContextListener{@OverridepublicvoidcontextInitialized(ServletContextEventsce){log.info("MyListener监听项目初始化完成");}@OverridepublicvoidcontextDestroyed(ServletsContext)Event{log.info("MyListener听说项目已经终止");}}//将这个类标记为配置类,并保证每个@Bean方法被调用多少次返回的组件是单个的实例@Configuration(proxyBeanMethods=true)publicclassMyRegistConfig{@BeanpublicServletRegistrationBeanmyservlet(){MyServletmyServlet=newMyServlet();returnnewServletRegistrationBean(myServlet,"/my","/my2");}@BeanpublicFilterRegistrationBean()myFilterMyFiltermyFilter=newMyFilter();//第一种写法//Servlet拦截什么路径,我的Filter拦截什么路径//returnnewFilterRegistrationBean(myFilter,myservlet());/**第二种写法*可以设置拦截什么路径**/FilterRegistrationBe一个filterRegistrationBean=newFilterRegistrationBean(myFilter);filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","/css/*"));返回过滤器注册Bean;}@BeanpublicServletListenerRegistrationBeanmyListener(){MyListenermyListener=new)MyListener(;returnnewServletListenerRegistrationBean(myListener);}执行顺序:执行Listener的contextInitialized容器初始化方法->执行Filter的init初始化方法->执行Filter的doFilter方法->执行Servlet的doGet或doPost方法->执行Filter的destroy方法->执行Listener的contextDestroyed销毁方法扩展:如何注册DispatchServlet?DispatcherServlet是自动配置在容器中的,并且该属性绑定到WebMvcProperties类;对应的配置文件配置项(prefixprefix)是spring.mvc通过ServletRegistrationBean
