SpringBoot1.5.12.RELEASE註冊Servlet三大元件【Servlet、Filter、Listener】
阿新 • • 發佈:2018-12-04
SpringBoot1.5.12.RELEASE註冊Servlet三大元件【Servlet、Filter、Listener】
1.理由:由於SpringBoot預設是以jar包的方式啟動嵌入式的Servlet容器來啟動SpringBoot的web應用,沒有web.xml檔案。
2.註冊方式
import com.atguigu.springboot.filter.MyFilter; import com.atguigu.springboot.listener.MyListener; import com.atguigu.springboot.servlet.MyServlet; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Arrays; //該類放在主啟動類同目錄或其子目錄下,讓其自動掃描並加入IOC容器中 @Configuration public class MyServerConfig { //ServletRegistrationBean------>註冊Servlet @Bean public ServletRegistrationBean myServlet(){ ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet"); registrationBean.setLoadOnStartup(1); return registrationBean; } //FilterRegistrationBean------>註冊Filter @Bean public FilterRegistrationBean myFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new MyFilter()); registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet")); return registrationBean; } //ServletListenerRegistrationBean------>註冊Listener @Bean public ServletListenerRegistrationBean myListener(){ ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener()); return registrationBean; } }
3.例子:SpringBoot幫我們自動SpringMVC的時候,自動的註冊SpringMVC的前端控制器;DIspatcherServlet;DispatcherServletAutoConfiguration中:
@Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME) @ConditionalOnBean(value = DispatcherServlet.class, name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME) public ServletRegistrationBean dispatcherServletRegistration( DispatcherServlet dispatcherServlet) { ServletRegistrationBean registration = new ServletRegistrationBean( dispatcherServlet, this.serverProperties.getServletMapping()); //預設攔截: / 所有請求;包靜態資源,但是不攔截jsp請求; /*會攔截jsp //可以通過server.servletPath來修改SpringMVC前端控制器預設攔截的請求路徑 registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME); registration.setLoadOnStartup( this.webMvcProperties.getServlet().getLoadOnStartup()); if (this.multipartConfig != null) { registration.setMultipartConfig(this.multipartConfig); } return registration; }