Spring应用程序中需要web.xml

时间:2015-06-06 08:14:58

标签: java spring deployment web.xml

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中定义的。

为什么会发生这种情况的任何线索?

2 个答案:

答案 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。