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

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



답변

몇 가지 옵션이 있습니다.

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

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

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

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


답변

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 참조!


답변

이러한 변경 사항이있는 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 의 섹션에 위의 추가


답변

나는 내 대답이 다른 대답과 겹친다는 것을 알고 있지만 이것은 몇 가지 장점이있는 완벽한 솔루션입니다. 이것은 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">.


답변

가장 빠른 방법.

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

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


답변

를 제거하십시오 $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로 설정해야합니다 .


답변

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

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

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