spring boot项目为什么没有web.xml
servlet3.0规范中,可以通过java配置(注解等)代替web.xml,spring boot就是使用java代替了web.xml。
其中javax.servlet.ServletContainerInitializer负责web容器启动阶段被回调,在onStartup方法里注册servlet、filter、listener等。
spring web包实现了这个类。
spring boot项目如何使用web.xml
虽然spring boot省去了web.xml,但如果还是想使用web.xml也是可以的。
简单说下就是,在项目的src/main/webapp/WEB-INF目录下放置web.xml。
详细参见:https://gwj41.iteye.com/blog/2384893
spring boot项目如何配置servlet、filter、listener
方式一,@Web注解:
采用原生Servlet3.0的注解进行配置,@WebServlet 、@WebListener、@WebFilter是Servlet3.0 api中提供的注解
通过注解可以完全代替web.xml中的配置。
@WebServlet(name = "MyServlet",urlPatterns = "*.do")
public class MyServlet extends HttpServlet {
//...
}
@WebFilter(urlPatterns = "/*", filterName = "MyFilter ")
public class MyFilter implements Filter {
//...
}
@WebListener
public class MyListener implements ServletContextListener {
//...
}
然后配置注解ServletComponentScan在spring boot启动类:
@SpringBootApplication
@ServletComponentScan
public class App{
public static void main(String[] args){
SpringApplication.run(App.class, args);
}
}
方式二,RegistrationBean:
使用spring boot提供的配置bean,配置bean不单是配置web.xml里面的配置,而且还可以配置spring mvc等配置。
如代替web.xml配置servlet、filter、listener:
ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean
public class MyXxxServlet extends HttpServlet {
//...
}
public class MyXxxFilter implements Filter {
//...
}
public class MyXxxListener implements ServletContextListener {
//...
}
@Configuration
public WebConfig{
@Bean
public ServletRegistrationBean servletRegistration() {//创建Servlet,并将它注册到web容器中
ServletRegistrationBean registration = new ServletRegistrationBean(new MyXxxServlet());
registration.addUrlMappings("*.do");//过滤.do请求
return registration;
}
@Bean
public FilterRegistrationBean<MyXxxFilter> registFilter() {//创建过滤器,并将它注册到web容器中
FilterRegistrationBean<ResourcesFilter> registration = new FilterRegistrationBean<MyXxxFilter>();
registration.setFilter(new MyXxxFilter());
registration.addUrlPatterns("/*");//过滤所有请求
registration.setName("MyXxxFilter");
registration.setOrder(1);
return registration;
}
@Bean
public ServletListenerRegistrationBean listenerRegistration(){//创建Listener,并将它注册到web容器中
ServletListenerRegistrationBean registration = new ServletListenerRegistrationBean(new MyXxxListener());
return registration;
}
}
方式三,web.xml:
继续使用web.xml来配置,在项目的src/main/webapp/WEB-INF目录下放置web.xml即可。