我正在尝试将在JDK 1.8中编译的WAR文件部署到AWS Tomcat Elastic Beanstalk实例。弹性beanstalk实例使用JDK 8和Tomcat 8,所以我不明白为什么在部署WAR文件时遇到404错误。如果有任何帮助,我使用gradle构建和WAR应用程序。
日志太大而无法粘贴,我也不知道什么是重要的,所以我将捆绑的zip上传到我的Dropbox,你可以在这里找到: https://www.dropbox.com/s/d1ssmz76pbqkn20/BundleLogs-1487348401257.zip?dl=0
我的web.xml也太长,无法粘贴到问题中,所以我会在此处链接到它:https://www.dropbox.com/s/4m7v3fhcczs0ina/web.xml?dl=0
我知道在Stack Overflow上提供链接是因为它们的可变性,这是不好的做法,所以一旦找到解决方案,我将编辑问题直接包含相关的代码段。
答案 0 :(得分:3)
你的错误很简单:
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的第二个映射
答案 1 :(得分:2)
我不太确定这是否解决了你的问题。我有一个类似的问题,它在扩展SpringBootServletInitializer后得到修复。这是因为我的应用程序使用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);
}
}