一、使用Servlet API注入Web原生组件
使用@ServletComponentScan(value = "srpingboot2.admin")
来指定原生Servlet组件都放在哪里
使用@WebServlet(urlPatterns = "/my")
来声明一个Servlet,会直接响应,不会经过Spring的拦截器
使用@WebFilter(urlPatterns={"/css/*","/images/*"})
来声明一个过滤器
使用@WebListener
来声明一个监听器
二、使用RegistrationBean
使用SpringBoot的自动配置类来注入三大组件
@Configuration
public class MyRegistConfig {
@Bean
public ServletRegistrationBean myServlet() {
MyServlet myServlet = new MyServlet();
return new ServletRegistrationBean(myServlet,"/myservlet");
}
@Bean
public FilterRegistrationBean myFilter() {
MyFilter myFilter = new MyFilter();
//return new FilterRegistrationBean(myFilter,myServlet());
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(myFilter);
filterRegistrationBean.setUrlPatterns(Arrays.asList("/myservlet","/css/*"));
return filterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean myListener() {
MyServletContextListener myServletContextListener = new MyServletContextListener();
return new ServletListenerRegistrationBean(myServletContextListener);
}
}
三、DispatcherServlet
注入原理
DispatcherServletAutoConfiguration
自动配置类给容器中配置了一个DispatcherServlet
,属性绑定到WebMvcProperties
,对于的配置项是spring.mvc
然后通过DispatcherServletRegistrationBean
把DispatcherServlet
注册中容器中,默认映射的是/
路径
根据最长路径匹配原则,会精确优先进行匹配,DispatcherServlet
默认的映射路径是/
,自定义的MyServlet
映射路径是/my
。整个系统容器中有这两个Servlet
,当发送/my
请求时,根据精确优先匹配原则,会交给MyServlet
来处理,直接交给Tomcat,而不会走Spring
的处理流程。只有经过DispatcherServlet
处理才会触发Spring拦截器的处理流程