2011-04-13 3 views
2

TOMCAT (tomcat/webapps/ROOT/war)에 war 파일을 배포 할 때 GWT RPC 호출이 작동하지 않는 것 같습니다. (바람둥이/웹 어플리케이션/ROOT/project.html 같은RPC 호출에 GWT Tomcat 문제가 발생했습니다.

The requested resource (/war/myproject/call) is not available.

내가 디렉토리 구조 변경 한 다음 직접 전쟁 컨텐츠 (전쟁이 아니라 디렉토리 자체)를 배포하는 경우 :

그것은 나에게 오류를 제공 project.css, 프로젝트, 등 ...) 다음 작동합니다.

내게 무슨 일이 일어 났는지 설명해 주시겠습니까?

<servlet> 
<servlet-name>callServlet</servlet-name> 
<servlet-class>com.myproject.server.dao.Call</servlet-class> 
</servlet> 

<servlet-mapping> 
<servlet-name>callServlet</servlet-name> 
<url-pattern>/myproject/call</url-pattern> 
</servlet-mapping> 

답변

4

하나의 Tomcat 서버에 여러 개의 응용 프로그램을 배포 할 수 있습니다. 각 응용 프로그램은 문맥이 각각입니다. 응용 프로그램은 webapps 폴더에 배포되고 각 폴더는 컨텍스트에 매핑되며 ROOT 폴더는 기본값 (컨텍스트 없음)입니다.

Tomcat에서 응용 프로그램에 액세스하려면 URL 다음에 컨텍스트을 지정하십시오. 당신이 webapps/Test 폴더에 Test을 응용 프로그램 (컨텍스트)가 있다면 예를 들어, 다음과 같이 액세스 할 :

http://localhost:8080/Test 

그러나 ROOT 폴더에있는 응용 프로그램은 어떤 상황이없고 단순히 localhost:8080로 이동하여 액세스 할 수 있습니다. 그리고 이것은 당신의 경우입니다. Tomcat은 ROOT 폴더에서 직접 응용 프로그램을 찾고 있지만 ROOT/war 폴더에 응용 프로그램이 있습니다. 즉 RPC 호출은 myproject 폴더가 ROOT/war 폴더가 아닌 ROOT 폴더 아래에있을 것으로 예상합니다. 그것이 작동하지 않는 이유입니다.

폴더가 ROOT 폴더 내에 있도록하려면 url-pattern/war/myProject/call으로 변경해야합니다.

+0

아주 좋은 대답, 일하러 @RemoteServiceRelative 경로를 변경하는 방법을 보여줘. –

+0

이제 주석이 @RemoteServiceRelativePath ("myProject")처럼 보일 것입니다. 나는 당신이 그것을 @RemoteServiceRelativePath ("war/myProject")로 바꿔서'url-pattern'을 따르도록 할 필요가 있다고 생각합니다. 하지만 나는 개인적으로 앱을 'ROOT' 폴더에 직접 배치하거나 다른 상황 (예 : 'webapps/MyProject'. – janhink

+0

글쎄, 내가 프로젝트를 cloudbees에 배포하는 경우입니다. 업로드 할 간단한 .war 파일을 선택합니다. http : // localhost : 8080/war/Myproject.html을 자동으로 배포하고 http : // localhost : 8080/Myproject.html을 사용하여 액세스 할 수 없습니다. –

0

모습처럼, 서블릿이 태그를 추가 즉 로 SERVLET 태그를 변경하는 당신을 위해 전쟁을 시도 초기화되지

<load-on-startup>1</load-on-startup> 

이 태그가 보장 : 나는에 문제가 있다고 생각

서블릿을로드해야합니다.

<servlet> 
<servlet-name>callServlet</servlet-name> 
<servlet-class>com.myproject.server.dao.Call</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
+0

작동하지 않습니다. 어쨌든 고맙습니다. –

+0

배포 후 서버를 다시 시작 했습니까? 시도해보십시오. 작동하지 않을 수 있습니다. – Imran

+0

@Imran, 나는 이것이 사소한 오류라고 생각합니다. 나는 Java로 자바를 컴파일하는 GWT를 사용하여 다시 컴파일하지 않았다 ... –

1

그럼 해결책을 찾았습니다. Tomcat의 작동 방식과 관련이 있습니다.

  1. 모든 파일을 선택하여 프로젝트 war 디렉토리 열고 (HTML/JSP, 이미지, WEB-INF 등 ...) 하나의 project.zip에
  2. 압축 모든 파일
  3. archieve project.zip의 이름을 project로 변경하십시오.
  4. 당신은 지금 내 알 톰캣/웹 어플리케이션/
  5. 다시 시작 Tomcat 서버에 전쟁
  6. 복사 project.war 프로젝트 디렉토리에 압축 해제 된 project.war webapps 디렉토리를 열 경우, 당신은 모두를 찾을 수 .war 내용 (html/jsp, 이미지, WEB-INF 등 ...)
  7. http://localhost/project 또는 http://localhost/project/index.html 또는 index.jsp에서 액세스하십시오.

오류는 다음과 같습니다. 나는 war 디렉토리 (내용이 아닌) 만 project.war로 압축하고있었습니다.

+0

및 @RemoteServiceRelativePath ("call"), /call

+0

나는 디폴트 URL을 남겨 두지 않았다 .GWT는 폴더 구조를 디자인하여 외부 서버 배포에 호환됩니다. –

+1

다행이 해결되었습니다. Maven을 사용하여 애플리케이션을 빌드하고 WAR 패키지를 생성하는 것이 좋습니다. 최소한 기초 학습은 정말 가치있는 일이며 많은 어려움을 줄여 줄 것입니다. 건배! – janhink

관련 문제