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即可。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐