2013-06-06 3 views
4

저는 이쪽에있는 로프 끝에 있습니다. 나는 아주 간단한 webapp를 얻으려고 노력하고있다. 그리고 나는 404 정적 파일이 아닌 tomcat을 얻는 것처럼 보이지 않는다.Tomcat이 정적 파일을 제공하지 않습니다.

  • I 7.0.39이 hey-world/src/main/webapp/index.html
  • web.xml에서 다음과 같습니다

  • 내 html 파일입니다 바람둥이 버전의 플러그인 Gradle을 사용하여 Tomcat 해요 : 그래서

    <servlet> 
        <servlet-name>Resteasy</servlet-name> 
        <servlet-class> 
         org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
        </servlet-class> 
        <init-param> 
         <param-name>javax.ws.rs.Application</param-name> 
         <param-value>HeyWorldApplication</param-value> 
        </init-param> 
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>default</servlet-name> 
        <url-pattern>/static/*</url-pattern> 
    </servlet-mapping> 
    
    <servlet-mapping> 
        <servlet-name>Resteasy</servlet-name> 
        <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
    

을 나는이 설정이 localhost:8080/hey-world/static/index.html을 파일에 매핑 할 것이라고 생각했지만 매번 404가되었다. gradle tomcat 플러그인의 일부 규칙에 문제가 있습니까?

+0

url-pattern은 어떤 URL이 어떤 서블릿에 매핑되는지 정의하며 정적 데이터 파일에 대한 경로를 정의하지 않으며 사실 그렇게해서는 안됩니다. – fge

+0

@fge이 코드는 프로덕션 코드가 아니기 때문에 tomcat에서 정적 파일을 제공하는 성능에 대해서는별로 관심이 없습니다. 마찬가지로 'WEB-INF'에 대한 액세스를 허용하는 보안 문제 (이 버전의 Tomcat에서 올바르게 이해 되었다면 이해할 수 있습니까?)에 대해서도 마찬가지입니다. 필자가 알기로는'url-pattern '을 기본 서블릿으로 라우팅하면'webapp' 디렉토리에서 파일을 제공하게 될 것입니다. – Chris

답변

3

web.xml/servlet-mapping에 사용되는 URL 패턴은 종종 약간 단순합니다. 내 생각에, Resteasy의/* 패턴은 다른 모든 매핑이 중요하지 않도록 포괄적으로 작동합니다.

디버깅을 위해 Resteasy-servlet을 모두 제거하고 매핑을 통해 사용자 정의 URL의 정적 파일을 서버 할 수 있는지 확인하는 것이 좋습니다. 작동하는 경우 다른 URL 패턴 (예 :/rest/*)으로 Resteasy를 다시 사용하십시오.

이것이 작동한다면, 모든 것이 실제로 잘 작동합니다./*에 대한 URL 매핑이 작동하는 것을 차단한다는 것입니다.

가장 쉬운 해결책은 기본 (매핑 없음) 당 서버 정적 파일을 사용하고 다른 URL에서 나머지 파일을 제공하는 것입니다.

두 개의 웹 앱을 사용하십시오. 하나는 컨텍스트 루트 "/ 정적"이고, 하나는 컨텍스트 루트 "/"입니다.

+0

그래서'Resteasy'를 주석 처리하는 것은'localhost : 8080/hey-world/index.html'에서 파일을 제공하기 시작했지만'localhost : 8080/hey-world/static/index.html'라는 404 바이트를 생각하게합니다. 문제는 정적 매핑에 무엇입니까? – Chris

+0

index.html을 webapp의 "정적"폴더에 넣는 것이 어떻습니까? 쉬운 솔루션이 항상 승리합니다. ;-) – haraldK

+0

이제는 서블릿 매핑이 전혀 수행하지 않는다고 생각합니다. 나는 정적 파일을 매핑을 사용하지 않기로 바꿨고 Resteasy를'/api/*'에 넣었지만 정적 파일은 괜찮지 만 404 로컬 호스트 : 8080/hey-world/api/path- ~ resteasy-stuff' – Chris