Wdrażam moją aplikację w katalogu głównym w Tomcat

134

Mam akta wojenne mojej aplikacji. Muszę wdrożyć to na poziomie głównym. Bieżący adres URL to http://localhost:8080/war_name/application_name.

iamjustcoder
źródło
1
Czy możesz określić, na czym dokładnie polega Twój problem? Podczas wdrażania pliku wojny w tomcat aplikacja jest dostępna przy użyciu adresu URL: localhost: 8080 / war_name bez rozszerzenia .war.
ashishjmeshram
1
Tak, masz rację, muszę uzyskać dostęp do mojej aplikacji. „ localhost / nazwa_aplikacji”, to mogę osiągnąć, zmieniając nazwę mojego pliku wojennego na „ROOT.war”, ale jest to wyjątek z powodu braku pamięci, ponieważ rozmiar mojego pliku wojennego wynosi około
120 MB
1
@ user661660 - Wygląda na to, że masz inny problem - zmiana nazwy na ROOT.warpowinna działać. Proponuję zadać kolejne pytanie dotyczące twojego OutOfMemoryException, podając ślad stosu i szczegóły. Prawdopodobnie można to obejść, konfigurując -Xmxmaszynę JVM.
Rob Hruska
.lang.OutOfMemoryError: PermGen space 16 marca 2011 9:52:52 com.ebay.kernel.logger.Logger log POWAŻNE: Błąd w wątku Perfmon java.lang.OutOfMemoryError: PermGen space Wyjątek w wątku „CalClient: NotifyThreadDestroyThread-0 "java.lang.OutOfMemor yError: PermGen space Wyjątek w wątku" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG en space 16 marca 2011 9:53:36 com.ebay.kernel.logger.Logger log SEVERE: Błąd w Perfmon Wątek java.lang.OutOfMemoryError: PermGen space Wyjątek w wątku "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError: PermGen space
iamjustcoder
1
@ user661660 - Być może niektóre odpowiedzi na to pytanie mogą Ci pomóc.
Rob Hruska,

Odpowiedzi:

222

Masz kilka opcji:

  1. Usuń ROOT/gotowy katalog z tomcat i zmień nazwę pliku war na ROOT.warprzed jego wdrożeniem.

  2. Wdróż wojnę jako (z twojego przykładu) war_name.wari skonfiguruj kontekstowy katalog główny w, conf/server.xmlaby używał twojego pliku wojny:

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

Pierwsza jest łatwiejsza, ale trochę bardziej niezdarna. Drugi sposób to chyba bardziej elegancki sposób.

Rob Hruska
źródło
3
Jeśli Tomcat jest ustawiony na automatyczne wdrażanie, nie musisz się martwić o opcję 2.
Buhake Sindi
4
@Dejel - technicznie nic. Sam trochę to zrobiłem; wykonuje swoją pracę. Po prostu wydaje się trochę dziwne, że trzeba zmienić nazwę własnego pliku wojennego na coś, co jest szczegółem implementacji kontenera.
Rob Hruska
4
Zgodnie z podanym przez Ciebie linkiem NIE zaleca się umieszczania elementów <Context> bezpośrednio w pliku server.xml
Nilesh
6
Ta odpowiedź zaleca technikę, która jest wyraźnie wymieniona w dokumentacji jako zła forma. Właściwa technika jest szczegółowo opisana tutaj: stackoverflow.com/questions/41263245/ ...
Christopher Schultz,
5
+1 za nazwanie go ROOT.war. Zgodnie z dokumentacją Tomcat, musisz być bardzo ostrożny podczas określania „ścieżki”, aby uniknąć podwójnego wdrażania: „Nawet podczas statycznego definiowania kontekstu w pliku server.xml ten atrybut nie może być ustawiony, chyba że baza docBase nie znajduje się pod appBase lub zarówno deployOnStartup, jak i autoDeploy mają wartość false. Jeśli ta reguła nie będzie przestrzegana, prawdopodobnie nastąpi podwójne wdrożenie ”. - z tomcat.apache.org/tomcat-8.0-doc/config/context.html
Anthony Hayward,
32

na tomcat v.7 (instalacja waniliowa)

w pliku conf / server.xml dodaj następujący bit na końcu pliku, tuż przed </Host>tagiem zamykającym:

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

Zauważ, że atrybut docBase . To ważna kwestia. Upewnij się, że wdrożyłeś app_name przed zmianą głównej aplikacji internetowej lub po prostu skopiuj rozpakowaną aplikację internetową (nazwa_aplikacji) do folderu webapps swojego tomcat. Uruchom, odwiedź root, zobacz tam swoją nazwę_aplikacji!

Peter Perháč
źródło
13

W tomcat 7 z tymi zmianami mogę uzyskać dostęp do myAPP w / i ROOT w / 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>

Dodaj powyżej do <Host>sekcji w server.xml

Sudheer Palyam
źródło
3
Ścieżka kontekstu musi być pustym ciągiem lub zaczynać się od „/”. Ścieżka [ROOT] nie spełnia tych kryteriów i została zmieniona na [/ ROOT]
Nikita Bosik
11

Wiem, że moja odpowiedź w pewnym sensie pokrywa się z niektórymi innymi odpowiedziami, ale jest to kompletne rozwiązanie, które ma pewne zalety. Działa to na Tomcat 8:

  1. Główna aplikacja jest obsługiwana z katalogu głównego
  2. Utrzymywane jest rozmieszczanie plików wojennych za pośrednictwem interfejsu internetowego.
  3. Główna aplikacja będzie działać na porcie 80, podczas gdy tylko administratorzy mają dostęp do folderów zarządzania (zdaję sobie sprawę, że systemy * nix wymagają superużytkownika do powiązania z 80, ale w systemie Windows nie stanowi to problemu).

Oznacza to, że wystarczy raz ponownie uruchomić tomcat, a po zaktualizowanej wojnie pliki można wdrożyć bez problemu.

Krok 1: w pliku server.xml znajdź wpis łącznika i zamień go na:

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

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

Krok 2: Zdefiniuj konteksty w <Host ...>tagu:

<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>

Zwróć uwagę, że odniosłem się do wszystkich aplikacji w folderze aplikacji internetowych. Pierwsza skutecznie przełączy root i główną aplikację z pozycji. ROOT jest teraz włączony http://example.com/ROOTi główna aplikacja jest włączona http://example.com/. Aplikacje internetowe chronione hasłem wymagają privileged="true"atrybutu.

Podczas wdrażania pliku CAS.war, który pasuje do katalogu głównego ( <Context path="/" docBase="CAS">musisz go ponownie załadować w panelu administracyjnym, ponieważ nie jest on odświeżany podczas wdrażania.

Nie uwzględniaj <Context path="/CAS" docBase="CAS">w swoich kontekstach, ponieważ wyłącza ona opcję menedżera do rozmieszczania plików wojennych. Oznacza to, że możesz uzyskać dostęp do aplikacji na dwa sposoby: http://example.com/ihttp://example.com/APP/

Krok 3: Aby zapobiec niepożądanemu dostępowi do folderu głównego i menedżera, dodaj valvedo tych tagów kontekstowych w następujący sposób:

<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>

Zasadniczo ogranicza to dostęp do folderu aplikacji internetowej administratora do osób z mojej własnej domeny (fałszywy adres IP) i lokalnego hosta, gdy używają domyślnego portu 8080 i zachowuje możliwość dynamicznego wdrażania plików wojennych za pośrednictwem interfejsu internetowego.

Jeśli chcesz używać tego dla wielu aplikacji, które używają różnych adresów IP, możesz dodać adres IP do łącznika ( address="143.21.2.1").

Jeśli chcesz uruchamiać wiele aplikacji internetowych z katalogu głównego, możesz zduplikować tag Service (użyj innej nazwy dla drugiej) i zmienić na przykład bazę <Context path="/" docBase="CAS">danych na <Context path="/" docBase="ICR">.

KimvdLinde
źródło
6

Najszybszy sposób.

  1. Upewnij się, że nie masz wdrożonej aplikacji ROOT, cofnij wdrożenie, jeśli taką masz

  2. Zmień nazwę swojej wojny na ROOT.war, wdrażaj, to wszystko, bez konieczności zmiany konfiguracji

Dima
źródło
6

Usuń $CATALINA_HOME/webapps/ROOT. Zaktualizuj $CATALINA_HOME/conf/server.xml, upewnij się, że element Host wygląda jak następujący tekst:

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

Działa z Tomcat 8. autoDeploy i deployOnStartup muszą mieć wartość false, aby zapobiec myAppdwukrotnemu wdrożeniu programu Tomcat .

Jingguo Yao
źródło
Próbowałem wgrać WAR i nie udało się. Czy to tylko dla wybuchowych wojen?
logixplayer
Próbowałem wgrać WAR i nie udało mi się to na przykładzie @ Jingguo. Czy to tylko dla wybuchowych wojen? EDYCJA: To rzeczywiście TYLKO dla wybuchowych wojen. Dlaczego to? Czy nie mogę po prostu przesłać WOJNY i uniknąć tego podwójnego kroku? Jak mogę to zrobić?
logixplayer
@logixplayer. Moje rozwiązanie działa z WAR. Nie eksplodowałem. Zapomniałem wspomnieć, że $CATALINA_HOME/webapps/ROOTnależy to usunąć. Usuń go i spróbuj ponownie.
Jingguo Yao
Usunąłem ROOT, jak powiedziałeś. Wdrożyłem mój WAR (nie eksplodował katalogu). Zauważyłem, że został utworzony nowy katalog ROOT zawierający moje rzeczy, np. WEB-INF. Witryna działa. Czy tak to powinno działać?
logixplayer,
Próbowałem też tej metody i wszystko, kiedy próbuję otworzyć stronę w przeglądarce, po prostu czeka na serwer. Catalina.out mówi tylko, że serwer został uruchomiony.
Asu
1

Dodając do sol @Rob Hruska, to ustawienie w sekcji server.xml inside działa:

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

Uwaga: w niektórych przypadkach może być wymagane ustawienie override = "true".

AVM
źródło
nie wspomniałeś, gdzie to umieścić. Odpowiedź @Sudheer Palyam była pomocna.
Kannan Ramamoorthy,
1

Dodając do odpowiedzi @Dima , jeśli używasz mavendo budowania swojego pakietu, możesz nakazać mu ustawienie nazwy pliku WAR na ROOTin pom.xml:

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

Domyślnie tomcatwdroży aplikację internetową ROOT.warw kontekście głównym ( /).

Ali Tou
źródło
0

otwórz adres URL menedżera tomact: - http: // localhost: 8080 / manager / html /
następnie w aplikacjach zobaczysz aplikację ze ścieżką w postaci „/”,
po prostu Cofnij wdrożenie. Zmień nazwę pliku wojennego swojej aplikacji na ROOT.war i po prostu umieść na ścieżce: - uruchom Tomcata Nie jest wymagana dodatkowa konfiguracja. Teraz możemy zobaczyć naszą stronę główną aplikacji lub skonfigurowany adres URL pod adresem http: // localhost: 8080
wprowadź opis obrazu tutaj
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps

Anurag_BEHS
źródło
-1

Na moim serwerze używam tego, a autodeploy root działa dobrze:

   <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>
Mircea Stanciu
źródło
To nie zostanie wdrożone w / ale w / mysite
tine2k