Spring Web应用程序只是使用servlet API 3.0的普通Web应用程序 在servlet API 3.0中,web.xml文件是可选的(大多数时候)。 我'我试图不在我的Spring应用程序中包含web.xml,但不知何故,似乎甚至需要使用Servlet 3.0
我在没有编写web.xml文件的情况下成功运行的Spring应用程序和Web应用程序之间的唯一区别是Spring过滤器和servlet是在lib文件夹的jar中定义的。
为什么会发生这种情况的任何线索?
答案 0 :(得分:2)
您不能只排除web.xml,因为您(至少)需要定义您使用的是哪个版本的Servlet API。
至少,您需要在web.xml
:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
其他所有内容(servlet,过滤器等)都可以使用注释进行配置。
答案 1 :(得分:0)
幸运的是,您现在可以创建完全无XML的Spring应用程序。 对于有或没有Spring Boot的配置,有各种不同的选项。
使用纯Spring,您可以使用AbstractAnnotationConfigDispatcherServletInitializer
使用Spring Boot,您可以拥有SpringBootServletInitializer。
这是我的Github repository,其中包含基于这两种方法的大量项目。
servlet的版本由您在类路径上的Servlet API定义。 E.g:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
或
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
您也没有指定servlet,因为Spring拥有自己的servlet DispatcherServlet实现。
过滤器在Spring上下文中注册为bean。