@WebServlet请求的资源不可用

我有一个@Weblistener应用程序使用@Weblistener@WebServlet注释。

启动Web应用程序时,会find并执行@Weblistener注释类。 尝试使用其中一个servlet时,出现“资源不可用”页面。

如果我在web.xml另外定义servlet,tomcat会在启动时抱怨同一个urlpattern已经被使用了两次,这表明@WebServlet正在被正确扫描。

该应用程序在Eclipse中工作正常,但是当我在tomcat服务器上构build并运行它时,出现此错误。

请让我知道你需要哪些信息。

这是我的web.xml

 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" metadata-complete="false" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>MySearchApp</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> 

这是一个servlet类

 @WebServlet(name="SearchServlet", displayName="SearchServlet", urlPatterns={"/search"}) public class Search extends HttpServlet { 

这是我的maven文件

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.test</groupId> <artifactId>mysearchapp</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>biosearch Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> ...... </dependencies> <build> <finalName>mysearchapp</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> </plugin> </plugins> </build> </project> 

我通过Docker运行应用程序。 这是我的Dockerfile,它位于我的项目的根文件夹中。

 FROM freedomkk/tomcat-maven:8 ENV BUILD_DIR /tmp/mysearchapp WORKDIR $BUILD_DIR COPY . $BUILD_DIR RUN mvn clean && \ mvn compile war:war -e && \ cp target/mysearchapp.war $CATALINA_HOME/webapps/ WORKDIR $CATALINA_HOME CMD ["bin/catalina.sh", "run"] EXPOSE 8080 

我最终用Eclipse的embedded式Maven运行时在本地机器上构build了war文件。 当我尝试使用外部Maven安装时,我遇到了同样的问题,如上所述。

Dockerfile变得更简单了。 我仍然认为Maven解决scheme更加优雅。

 FROM tomcat:8.0-jre8 WORKDIR $CATALINA_HOME COPY mysearchapp.war webapps/ CMD ["catalina.sh", "run"] EXPOSE 8080