1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SpringBoot Web原生组件注入(Servlet Filter Listener)

SpringBoot Web原生组件注入(Servlet Filter Listener)

时间:2022-03-15 22:21:39

相关推荐

SpringBoot Web原生组件注入(Servlet Filter Listener)

一、使用原生Servlet API(推荐)

@Slf4j@WebFilter(urlPatterns={"/css/*","/images/*"}) //mypublic class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("MyFilter初始化完成");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {log.info("MyFilter工作");chain.doFilter(request,response);}@Overridepublic void destroy() {log.info("MyFilter销毁");}}-------------------------------------------------------------------------------@WebServlet(urlPatterns = "/my")public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("66666");}}-------------------------------------------------------------------------------@Slf4j@WebListenerpublic class MySwervletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {log.info("MySwervletContextListener监听到项目初始化完成");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {log.info("MySwervletContextListener监听到项目销毁");}}

利用@ServletComponentScan扫描进来

@MapperScan("com.aa.admin.mapper")@ServletComponentScan(basePackages = "com.aa.admin")@SpringBootApplication(exclude = RedisAutoConfiguration.class)public class Boot05WebAdminApplication {public static void main(String[] args) {SpringApplication.run(Boot05WebAdminApplication.class, args);}}

二、使用RegistrationBean

ServletRegistrationBean, FilterRegistrationBean, and ServletListenerRegistrationBean

@Configurationpublic class MyRegistConfig {@Beanpublic ServletRegistrationBean myServlet(){MyServlet myServlet = new MyServlet();return new ServletRegistrationBean(myServlet,"/my","/my02");}@Beanpublic FilterRegistrationBean myFilter(){MyFilter myFilter = new MyFilter();// return new FilterRegistrationBean(myFilter,myServlet());FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","/css/*"));return filterRegistrationBean;}@Beanpublic ServletListenerRegistrationBean myListener(){MySwervletContextListener mySwervletContextListener = new MySwervletContextListener();return new ServletListenerRegistrationBean(mySwervletContextListener);}}

三、扩展:DispatchServlet 如何注册进来

容器中自动配置了 DispatcherServlet 属性绑定到 WebMvcProperties;对应的配置文件配置项是 spring.mvc。

@Configuration(proxyBeanMethods = false)@Conditional({DispatcherServletAutoConfiguration.DispatcherServletRegistrationCondition.class})@ConditionalOnClass({ServletRegistration.class})@EnableConfigurationProperties({WebMvcProperties.class})@Import({DispatcherServletAutoConfiguration.DispatcherServletConfiguration.class})protected static class DispatcherServletRegistrationConfiguration {protected DispatcherServletRegistrationConfiguration() {}@Bean(name = {"dispatcherServletRegistration"})@ConditionalOnBean(value = {DispatcherServlet.class},name = {"dispatcherServlet"})public DispatcherServletRegistrationBean dispatcherServletRegistration(DispatcherServlet dispatcherServlet, WebMvcProperties webMvcProperties, ObjectProvider<MultipartConfigElement> multipartConfig) {DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(dispatcherServlet, webMvcProperties.getServlet().getPath());registration.setName("dispatcherServlet");registration.setLoadOnStartup(webMvcProperties.getServlet().getLoadOnStartup());multipartConfig.ifAvailable(registration::setMultipartConfig);return registration;}}

通过 ServletRegistrationBean 把 DispatcherServlet 配置进来。springboot默认映射的是 / 路径。

Tomcat-Servlet;

多个Servlet都能处理到同一层路径,精确优选原则

A: /my/

B: /my/1

如果访问 /my/1 那么由B处理,如果访问/my/2,那么由A处理

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。