@Weblistener
및 @WebServlet
어노테이션을 모두 사용하는 webapp가 있습니다.@WebServlet 요청한 리소스를 사용할 수 없습니다.
웹 응용 프로그램을 시작할 때 @Weblistener
주석이있는 클래스가 발견되어 실행됩니다. 서블릿 중 하나를 사용하려고 할 때 "자원을 사용할 수 없음"페이지가 표시됩니다.
web.xml
에 서블릿을 추가로 정의하면 시작시 urcat이 동일한 URL 패턴이 두 번 사용되었다는 메시지가 표시되어 @WebServlet
이 올바르게 스캔되고 있음을 나타냅니다.
응용 프로그램이 Eclipse에서 제대로 작동하지만 빌드하고 Tomcat 서버에서 실행할 때이 오류가 발생합니다.
필요한 정보를 알려주십시오.
여기
<?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>
여기
@WebServlet(name="SearchServlet", displayName="SearchServlet", urlPatterns={"/search"})
public class Search extends HttpServlet {
가 여기 내 받는다는 파일
<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>
내가 도커를 통해 응용 프로그램을 실행하고의 서블릿 클래스 중 하나 내 web.xml을합니다. 여기 내 프로젝트의 루트 폴더에있는 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
URL이 무엇인지 모르겠지만 init 메소드를 만들고 loadOnStartup = 1을 Webservlet 주석에 추가했습니다. Init 메소드에서 나는 콘솔에 출력했다. -> 컨테이너를 시작할 때 print 명령의 결과를 볼 수 있었다. –