【问题标题】:web.xml required in Spring applicationsSpring 应用程序中需要的 web.xml
【发布时间】:2015-08-21 05:33:23
【问题描述】:

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 文件夹中的 jars 中定义的。

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

【问题讨论】:

  • “不知何故它似乎是必需的” 这很模糊。没有web.xml 也能工作吗?如果没有,你会收到错误吗?

标签: java spring deployment web.xml


【解决方案1】:

您不能只排除 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、过滤器等)都可以使用注释进行配置。

【讨论】:

  • 这是完全错误的。无需 web.xml 即可完全构建 Spring Web 应用
  • @PouyanKhodabakhsh,回到过去你不能:)
【解决方案2】:

幸运的是,您现在可以创建完全免费的 XML 应用程序。 有或没有 Spring Boot 的此类配置有各种不同的选项。

使用纯 Spring 你可以使用AbstractAnnotationConfigDispatcherServletInitializer

使用 Spring Boot,您可以拥有SpringBootServletInitializer

这是我的Github repository,有一堆基于这两种方法的项目。

servlet 的版本由类路径中的 Servlet API 定义。例如:

<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 实现。

过滤器作为bean注册到Spring上下文中。

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 2013-10-03
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2015-07-27
    • 2018-09-04
    • 2021-09-21
    相关资源
    最近更新 更多