2017-11-21 6 views
0

@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 
+0

URL이 무엇인지 모르겠지만 init 메소드를 만들고 loadOnStartup = 1을 Webservlet 주석에 추가했습니다. Init 메소드에서 나는 콘솔에 출력했다. -> 컨테이너를 시작할 때 print 명령의 결과를 볼 수 있었다. –

답변

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