将 WAR 部署到 AWS Tomcat 404 错误

Deploying WAR to AWS Tomcat 404 Error

我正在尝试将在 JDK 1.8 中编译的 WAR 文件部署到 AWS Tomcat Elastic Beanstalk 实例。 elastic beanstalk 实例使用 JDK 8 和 Tomcat 8,所以我不明白为什么在部署我的 WAR 文件时出现 404 错误。我正在使用 gradle 构建和 WAR 应用程序(如果有帮助的话)。

日志太大无法粘贴,我不知道什么重要,所以我将捆绑的 zip 上传到我的保管箱,您可以在这里找到: https://www.dropbox.com/s/d1ssmz76pbqkn20/BundleLogs-1487348401257.zip?dl=0

我的 web.xml 也太长了,无法粘贴到问题中,所以我将 link 放在这里:https://www.dropbox.com/s/4m7v3fhcczs0ina/web.xml?dl=0

我知道在 Stack Overflow 上给出 link 是不好的做法,因为它们的可变性,所以一旦找到解决方案,我将编辑问题以直接包含相关的代码段。

你的错误很简单:

org.xml.sax.SAXParseException; systemId: file:/var/lib/tomcat8/webapps/ROOT/WEB-INF/web.xml; lineNumber: 477; columnNumber: 23; Error at (477, 23) : The servlets named [TextHistoryServlet] and [TextHistoryServlet] are both mapped to the url-pattern [/TextHistoryServlet] which is not permitted

在那条线附近你会看到:

<servlet-mapping>
    <servlet-name>CsvParseServlet</servlet-name>
    <url-pattern>/CsvParseServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>TextHistoryServlet</servlet-name>
    <url-pattern>/TextHistoryServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>TextHistoryServlet</servlet-name>
    <url-pattern>/TextHistoryServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>SurveyServlet</servlet-name>
    <url-pattern>/SurveyServlet</url-pattern>
</servlet-mapping>

移除 TextHistoryServlet 的第二个映射

我不太确定这是否解决了您的问题。我有一个类似的问题,它在扩展 SpringBootServletInitializer 后得到修复。这是 deone,因为我的应用程序使用 Tomcat 8,Java 8 平台运行,这就像一个容器。通常在容器中部署war时需要扩展SpringBootServletInitializer。

这是一个示例Application.java

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}