@WebServlet请求的资源不可用

时间:2017-11-21 13:52:06

标签: maven tomcat docker servlets

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

启动Web应用程序时,会找到并执行@Weblistener带注释的类。当尝试使用其中一个servlet时,我得到一个“资源不可用”页面。

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

该应用程序在Eclipse中运行良好,但是当我在tomcat服务器上构建并运行它时,我收到此错误。

请告诉我您需要哪些信息。

这是我的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

1 个答案:

答案 0 :(得分:0)

我最终使用Eclipse的嵌入式Maven运行时在我的本地机器上构建war文件。当我尝试使用外部Maven安装时,我遇到了与上述相同的问题。

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

FROM tomcat:8.0-jre8

WORKDIR $CATALINA_HOME

COPY mysearchapp.war webapps/

CMD ["catalina.sh", "run"]

EXPOSE 8080
相关问题