2017-03-16 1 views
0

WAR 파일이 WAR 파일 이름을 기반으로하지 않는 자체 컨텍스트 루트를 지정하도록 Tomcat 7을 구성하려면 어떻게해야합니까? 예 : A-1.0.0.war 및 B-1.0.0.war이 있고 동일한 Tomcat 인스턴스에 모두 배포하려고합니다. 배포가 끝나면 브라우저에서 localhost : 8080/portal을 가리키고 A-1.0.0.war의 내용을보고 싶습니다. localhost : 8080/rest/v1/helloworld에 대한 나머지 요청을 컬링하고 싶습니다. B-1.0.0.war에서.Tomcat 7의 WAR 파일 내에서 컨텍스트 루트 구성

나는 여러 가지 방법으로 구성을 시도해 보았지만 위의 시나리오에서는 위의 시나리오를 작성하지 않았습니다. 또한 Tomcat 문서가 너무 부족하여 완전히 이해할 수 없습니다. 내가 읽은 :

:

  1. Tomcat 7 html manager howto
  2. Tomcat host config
  3. deploying-war-file-to-tomcat-with-a-different-path

%의 CATALINA_HOME %의/conf의에서, 사람들을 소화 한 후/server.xml에 나는이 하나의 호스트 항목이

<Host name="localhost" appBase="webapps" 
      unpackWARs="true" autoDeploy="true" 
      deployXML="true" copyXML="true" > 
    <Context path="/portal" docBase="/www/" reloadable="true" swallowOutput="true"> 
     <WatchedResource>WEB-INF/web.xml</WatchedResource> 
     <Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/> 
    </Context> 
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
      prefix="localhost_access_log" suffix=".txt" 
      pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
</Host> 

이것은 t의 하나에서 얻은 A.war/META-INF/context.xml의 전체 내용입니다. 그는 WAR 파일 :

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/portal" docBase="ROOT/portal" /> 

내가 관리 콘솔을 통해 톰캣에 배포

, 나는 버튼을 "배포 할 WAR 파일의"를 사용하고,하지만 난 "배포 디렉토리 또는 WAR 파일에서 모든 필드를 지정하고 있지 않다 서버에 있습니다 "(왜냐하면 나는 이것들을 WAR 자체에서 가져 오기를 원하기 때문에 다른 누군가가 그것을 지정하지 않기를 바란다). webapps 디렉토리를 열면이 목록이 표시됩니다. 나는 portal/ 대신 A-1.0.0/ 디렉토리의 참조 기대 :이 도움이 경우

A-1.0.0/ 
B-1.0.0/ 
docs/ 
examples/ 
host-manager/ 
manager/ 
ROOT/ 
sample/ 
A-1.0.0.war 
B-1.0.0.war 
sample.war 

, 여기 내 시나리오에 몇 가지 뒷이야기입니다. 제 목표는 단일 .jar에 번들 된 응용 프로그램을 두 개의 .war 파일로 옮기는 것입니다. 현재, Spring MVC와 JSP 애플리케이션을 모두 포함하는 빌드 아티팩트로서 하나의 jar 파일을 생성하는 maven 프로젝트입니다. 내 클라이언트가 Java를 사용하여 명령 줄에서 응용 프로그램을 시작합니다. 내가 가고 싶은 곳은 Tomcat의 관리 콘솔을 통해 누군가가 WAR 파일을 배포 할 수있는 dev 서버에 Tomcat 7을 설치하는 것이다. 또한 WAR 파일 이름에 버전 번호를 넣음으로써 WAR를 처리하는 사람들이 배포하는 내용을 분명히 알 수 있습니다. 모든 빌드/릴리스 사이클에서 이전 전쟁의 배포를 취소하고 새로운 전쟁을 전개하기를 바랍니다. 부수적으로 - 전쟁으로 응용 프로그램을 배포하려고 시도한 것은 이번이 처음인데, 이렇게하는 것이 가장 좋은 연습을 놓친 것일 수 있으므로 좋은 방법이 아니라면 친절하게 수정하십시오.

답변

0

개인적으로 응용 프로그램 설치에 manager 응용 프로그램을 사용하지 마십시오. 수동으로 Tomcat을 구성하므로 manager 응용 프로그램으로 수행하는 방법을 말할 수는 없지만 여기서는 응용 프로그램의 컨텍스트 경로를 독립적으로 제어 할 수 있습니다 전쟁 파일 이름.

첫째, server.xml 내부 <Context>을 (Tomcat documentation 참조) 넣어을하지 않는 것이 좋습니다. 대신 .../conf/Catalina/localhost 폴더에 컨텍스트 XML 파일을 만들어야합니다. 톰캣 폴더 외부, 예를 들어,

  1. 시스템에 어디서든 전쟁 파일을 복사

    :하지만,

    그래서, 여기 단계입니다 /mywars/A-1.0.0.war.그것은 path 속성이 없음을

    <Context docBase="/mywars/A-1.0.0.war" reloadable="true" swallowOutput="true"> 
        <Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/> 
    </Context> 
    

    참고 :

  2. 파일 .../conf/Catalina/localhost/portal.xml을 만듭니다. 컨텍스트 경로는 파일 이름 (예 : /portal)에서 결정됩니다.

  3. 필요한 경우 Tomcat을 다시 시작하십시오.

    일반적으로 변경하기 전에 Tomcat을 종료하므로 여러 번의 변경으로 인해 여러 번의 재로드가 발생하지 않습니다.

META-INF/context.xml은 이와 같은 경우에도 사용하지 않습니다.

웹 응용 프로그램이 <Context> 요소 내에 <Parameter> 요소를 사용하여 구성한 Servlet Init Parameters를 사용하는 경우, 서로 다른 컨텍스트 경로를 사용하여 동일한 웹 응용 프로그램 (war 파일)을 여러 Tomcat 인스턴스에 여러 번 설치할 수도 있습니다 .../conf/Catalina/localhost 폴더에 여러 개의 XML 파일을 만들면됩니다.

+0

답변 해 주셔서 감사합니다. 이것은 Tomcat이'conf/Catalina/localhost /'폴더에서 xml 파일을 찾을 것이라는 것을 완전히 놓쳤다. 이제'conf// /'이 문서에서 의미하는 바를 이해합니다. 내가 내일 일하러 돌아올 때 이것을 시도 할 것이다. 하지만 다음 질문에 다음 달에 이전 1.0.0 버전보다 A-2.0.0.war를 배포하려면 다른 Context docBase = "Ax.yzwar"> (또는 기존 WAR 파일을 변경하여 새 WAR 파일의 이름과 일치 시키시겠습니까? 이제 버전 번호를 WAR 파일 이름에 넣는 것이 나쁜 생각이라고 생각합니다 ... –

+0

다른 컨텍스트 경로를 사용하여 두 버전을 계속 실행하지 않으려면 기존 xml 파일의'docBase'를 업데이트하십시오. – Andreas