我有一个使用@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
答案 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