Tomcat의 루트에 내 응용 프로그램 배포


132

내 응용 프로그램의 war 파일이 있습니다. 루트 수준에서 배포해야합니다. 현재 URL은 http://localhost:8080/war_name/application_name입니다.


1
문제가 정확히 무엇인지 지정할 수 있습니까? tomcat에 war 파일을 배포 할 때 응용 프로그램은 .war 확장자없이 URL : localhost : 8080 / war_name 을 사용하여 액세스 합니다.
ashishjmeshram

1
예, 그렇습니다. 내 앱에 액세스해야합니다. " localhost / application_name ", 내 war 파일의 이름을 "ROOT.war"로 바꾸면 달성 할 수 있지만 내 war 파일 크기가 약 120MB이므로 메모리 예외가 발생합니다.
iamjustcoder

1
@ user661660-다른 문제가있는 것 같습니다-이름을 바꾸면 ROOT.war작동합니다. OutOfMemoryException스택 추적 및 세부 정보를 제공하여 에 대해 다른 질문을하는 것이 좋습니다 . -XmxJVM 을 구성 하여 해결할 수 있습니다 .
Rob Hruska

.lang.OutOfMemoryError : PermGen space 2011 년 3 월 16 일 오전 9:52:52 com.ebay.kernel.logger.Logger 로그 심각 : Perfmon 스레드 java.lang.OutOfMemoryError에서 오류 발생 : PermGen 공간 스레드 "CalClient : NotifyThreadDestroyThread-0 "java.lang.OutOfMemor yError : 스레드"MetricsSnapshotScheduler "의 PermGen 공간 예외 java.lang.OutOfMemoryError : PermG en space 2011 년 3 월 16 일 오전 9:53:36 오전 com.ebay.kernel.logger.Logger 로그 심각 : Perfmon 오류 스레드 java.lang.OutOfMemoryError : 스레드 "CalClient : NotifyThreadDestroyThread-0"의 PermGen 공간 예외 java.lang.OutOfMemor yError : PermGen 공간
iamjustcoder

1
@ user661660-아마도이 질문에 대한 답변 중 일부가 도움 될 수 있습니다.
Rob Hruska

답변:


220

몇 가지 옵션이 있습니다.

  1. ROOT/Tomcat에서 기본 제공 디렉토리를 제거하고 ROOT.war배포 하기 전에 war 파일의 이름을 바꿉니다 .

  2. (예제에서 war_name.war와 같이) 전쟁을 전개 하고 war 파일을 사용 하도록 컨텍스트 루트 를 구성 conf/server.xml하십시오.

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>

첫 번째는 더 쉽지만 조금 더 복잡합니다. 두 번째 방법은 아마도 더 우아한 방법 일 것입니다.


3
Tomcat이
자동 배포

4
@Dejel-기술적으로 아무것도 없습니다. 나는 그것을 아주 조금했다; 작업이 완료됩니다. 자신의 war 파일의 이름을 컨테이너의 구현 세부 사항으로 바꾸어야하는 것이 약간의 느낌입니다.
Rob Hruska

4
제공 한 링크에 따라 <Context> 요소를 server.xml 파일에 직접 배치하지 않는 것이 좋습니다
Nilesh

6
이 답변은 문서에서 명시 적으로 잘못된 형식으로 언급 된 기술을 권장합니다. 적절한 기술은 여기에 자세히 설명되어 있습니다 : stackoverflow.com/questions/41263245/…
Christopher Schultz

5
ROOT.war (으)로 +1 Tomcat 문서에 따르면 이중 배치를 피하기 위해 "path"를 지정할 때 매우주의해야합니다. "server.xml에서 컨텍스트를 정적으로 정의 할 때도 docBase가 호스트의 아래에 있지 않으면이 속성을 설정하지 않아야합니다 appBase 또는 deployOnStartup 및 autoDeploy가 모두 false입니다.이 규칙을 따르지 않으면 이중 배포가 발생할 수 있습니다. " -에서 tomcat.apache.org/tomcat-8.0-doc/config/context.html
앤서니 헤이워드

31

Tomcat v.7 (바닐라 설치)

conf / server.xml에서 </Host>닫는 태그 바로 앞에 파일 끝쪽에 다음 비트를 추가하십시오 .

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

참고 는 Docbase 속성. 중요한 비트입니다. 루트 웹앱을 변경하기 전에 app_name을 배포했는지 확인하거나 압축을 푼 웹앱 (app_name)을 Tomcat의 webapps 폴더에 복사하면됩니다. 시작, 루트 방문, app_name 참조!


13

이러한 변경 사항이있는 Tomcat 7의 경우 /에서 myAPP에 액세스하고 / ROOT에서 ROOT에 액세스 할 수 있습니다

<Context path="" docBase="myAPP">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

<Host>server.xml 의 섹션에 위의 추가


3
컨텍스트 경로는 빈 문자열이거나 '/'로 시작해야합니다. 경로 [ROOT]가이 기준을 충족하지 않고 [/ ROOT]로 변경되었습니다.
Nikita Bosik

11

나는 내 대답이 다른 대답과 겹친다는 것을 알고 있지만 이것은 몇 가지 장점이있는 완벽한 솔루션입니다. 이것은 Tomcat 8에서 작동합니다.

  1. 기본 응용 프로그램은 루트에서 제공됩니다
  2. 웹 인터페이스를 통한 war 파일 배포가 유지됩니다.
  3. 주 응용 프로그램은 포트 80에서 실행되며 관리자 만 관리 폴더에 액세스 할 수 있습니다 (* nix 시스템은 80에 바인딩하기 위해 수퍼 유저가 필요하지만 Windows에서는 문제가되지 않습니다).

즉, Tomcat을 한 번만 다시 시작하면 업데이트 된 war 파일을 문제없이 배포 할 수 있습니다.

1 단계 : server.xml 파일에서 커넥터 항목을 찾아서 다음 항목으로 바꾸십시오.

<Connector 
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

2 단계 : <Host ...>태그 내에 컨텍스트를 정의하십시오 .

<Context path="/" docBase="CAS">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

webapp 폴더의 모든 앱을 다루었습니다. 첫 번째는 루트와 기본 앱을 효과적으로 전환합니다. ROOT가 켜져 http://example.com/ROOT있고 기본 응용 프로그램이 켜져 http://example.com/있습니다. 비밀번호로 보호 된 웹앱에는 privileged="true"속성이 필요 합니다.

루트와 일치하는 CAS.war 파일을 배포 할 때 배포와 함께 <Context path="/" docBase="CAS">새로 고치지 않으므로 관리자 패널에서 해당 파일 을 다시로드해야합니다.

<Context path="/CAS" docBase="CAS">war 파일을 배포하기위한 관리자 옵션을 비활성화하므로 컨텍스트에를 포함하지 마십시오 . 당신은 두 가지 방법으로 응용 프로그램에 액세스 할 수있는이 수단 : http://example.com/http://example.com/APP/

3 단계 : 루트 및 관리자 폴더에 대한 원치 않는 액세스를 방지하려면 다음과 valve같이 컨텍스트 태그에 a 를 추가 하십시오.

<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        addConnectorPort="true"
        allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>

이는 기본 포트 8080을 사용할 때 내 도메인 (가짜 IP 주소) 및 로컬 호스트의 사람들에게 관리 웹 응용 프로그램 폴더에 대한 액세스를 제한하고 웹 인터페이스를 통해 war 파일을 동적으로 배포하는 기능을 유지합니다.

다른 IP 주소를 사용하는 여러 앱에이 기능을 사용하려는 경우 커넥터에 IP 주소를 추가 할 수 있습니다 ( address="143.21.2.1").

루트에서 여러 웹 앱을 실행하려는 경우 서비스 태그를 복제하고 (두 번째에 다른 이름 사용)의 docbase <Context path="/" docBase="CAS">를 예를 들어 변경할 수 있습니다 <Context path="/" docBase="ICR">.


6

가장 빠른 방법.

  1. ROOT 앱이 배포되어 있지 않은지 확인하십시오.

  2. 전쟁의 이름을 ROOT.war로 바꾸고 배치하면 구성 변경이 필요하지 않습니다.


6

를 제거하십시오 $CATALINA_HOME/webapps/ROOT. Update $CATALINA_HOME/conf/server.xml, Host 요소가 다음 텍스트와 같은지 확인하십시오.

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

Tomcat 8과 함께 작동합니다. Tomcat이 myApp두 번 배포되지 않도록 autoDeploy 및 deployOnStartup을 false로 설정해야합니다 .


WAR 업로드를 시도했지만 작동하지 않았습니다. 폭발 된 WAR에만 해당됩니까?
logixplayer

WAR 업로드를 시도했지만 @Jingguo의 예제를 기반으로 작동하지 않았습니다. 폭발 된 WAR에만 해당됩니까? 편집 : 그것은 실제로 폭발 전쟁에만 해당됩니다. 왜 이런거야? WAR 만 업로드하고이 두 단계를 피할 수 있습니까? 어떻게 작동시킬 수 있습니까?
logixplayer

@logixplayer. 내 솔루션은 WAR과 함께 작동합니다. 나는 그것을 폭발하지 않았다. $CATALINA_HOME/webapps/ROOT제거해야 한다는 점을 잊어 버렸습니다 . 제거한 후 다시 시도하십시오.
Jingguo Yao

말씀하신대로 루트를 삭제했습니다. WAR (폭발 된 디렉토리가 아님)를 배포했습니다. WEB-INF와 같은 내 항목으로 새로운 루트 디렉토리가 생성 된 것을 알았습니다. 사이트가 실행 중입니다. 이것이 작동하는 방식입니까?
logixplayer

나는 또한이 방법을 시도하고 브라우저에서 페이지를 열려고 할 때 서버를 계속 기다립니다. catalina.out은 서버가 시작되었다고 말합니다.
Asu

1

@Rob Hruska의 솔에 추가하면 server.xml의 섹션 내부 설정이 작동합니다.

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

참고 : 경우에 따라 override = "true"가 필요할 수 있습니다.


이것을 어디에 두어야하는지 언급하지 않았습니다. @Sudheer Palyam의 답변이 도움이되었습니다.
Kannan Ramamoorthy

1

에 추가 @Dima 당신이 사용하는 경우의 대답 maven패키지를 구축하기 위해, 당신이 당신의 WAR 파일 이름을 설정하는 그것을 말할 수 ROOT있는 pom.xml:

<build>
    <finalName>ROOT</finalName>
</build>

기본적으로 웹앱을 루트 컨텍스트 ( )에 tomcat배포 합니다.ROOT.war/


0

tomact manager url : -http : // localhost : 8080 / manager / html /을 연
다음 응용 프로그램에서 경로가 "/"인 응용 프로그램이 배포 된 것을 볼 수 있습니다
. 응용 프로그램의 war 파일 이름ROOT.war바꾸고 경로에 배치 하십시오 .- Tomcat을 시작하십시오. 추가 구성이 필요하지 않습니다. 이제 http : // localhost : 8080 에서 응용 프로그램 홈 페이지 또는 구성된 URL을 볼 수 있습니다 .
여기에 이미지 설명을 입력하십시오
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps


-1

내 서버에서 이것을 사용하고 있으며 루트 자동 배포가 정상적으로 작동합니다.

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>

이것은 / mysite에 배포되지 않고 / mysite
tine2k에
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.