Jak zmienić aplikację ROOT?

131

Próbuję zmienić domyślną aplikację serwera WWW Tomcat 6 na inną aplikację niż „ROOT” (w folderze webapps). Jaki jest najlepszy sposób, aby to zrobić?

user247702
źródło

Odpowiedzi:

130

Istnieją trzy metody:

  • Najpierw zamknij Tomcata z jego binkatalogu ( sh shutdown.sh). Następnie usuń całą zawartość webappsfolderu Tomcat ( rm -fr *). Następnie zmień nazwę pliku WAR na ROOT.wari na koniec uruchom Tomcata z binkatalogu ( sh startup.sh).

  • Pozostaw swój plik wojenny $CATALINA_BASE/webappspod jego oryginalną nazwą. Wyłącz autoDeploy i deployOnStartup w elemencie Host w server.xmlpliku. Jawnie zdefiniuj wszystkie konteksty aplikacji w programie server.xml, określając zarówno atrybuty path, jak i docBase . Musisz to zrobić, ponieważ wyłączyłeś wszystkie mechanizmy automatycznego wdrażania Tomcat, a Tomcat nie będzie już wdrażał twoich aplikacji, chyba że znajdzie ich kontekst w pliku server.xml.

    druga metoda: aby wprowadzić zmiany w dowolnej aplikacji, musisz zatrzymać i ponownie uruchomić Tomcat.

  • Umieść plik WAR poza $CATALINA_BASE/webapps(musi znajdować się na zewnątrz, aby zapobiec podwójnemu wdrożeniu). Umieść plik kontekstu o nazwie ROOT.xmlw $CATALINA_BASE/conf/. Pojedynczy element w tym pliku kontekstowym MUSI mieć atrybut docBase wskazujący lokalizację pliku WAR. Elementu ścieżki nie należy ustawiać - .xmlw tym przypadku pochodzi on od nazwy pliku ROOT.xml. Szczegółowe informacje można znaleźć w dokumentacji kontenera kontekstu .

Odniesienie


źródło
4
Wypróbowałem pierwszą metodę i działa! Bdw - NIE musisz usuwać wszystkiego. Właśnie usunąłem folder ROOT i zmieniłem nazwę mojej wojny na ROOT.war i działa jak urok.
hostnik
Wiem, że tak naprawdę nie przestrzega zasad sof, ale pieprzyć to ..... Dzięki! Chciałbym móc zagłosować za więcej niż raz. Super pomocny. BTW, musiałem zrestartować Tomcata, zanim to zadziała, @hostnik.
paskudny pasty
Trzecia metoda @ Danny-london nie działała dla mnie w Tomcat 7, ale działa, jeśli umieścisz plik ROOT.xml w $CATALINA_BASE/conf/[enginename]/[hostname]katalogu (co jest dla mojej raczej podstawowej konfiguracji $CATALINA_HOME/conf/Catalina/localhost). Zapoznaj się z dokumentacją kontenera kontekstu .
Michael Scheper
Nowoczesna alternatywa dla uruchomienia Tomcata: sudo systemctl start tomcatxgdzie xoznacza numer wersji
EarthMind
24

Dodanie <Context>tagu do <Host>tagu w server.xmlTomcat 6 rozwiąże problem.

Jeśli używasz path=""pustego, możesz użyć adresu URL takiego jak http://localhost/first.do.

W zestawie atrybutów znaczników kontekstu docBase="E:\struts-ITRCbook\myStrutsbook"i reloadable="true", następnie zakończyć tag kontekstowe.

Powinien wyglądać mniej więcej tak:

<Host name="localhost"  appBase="webapps" 
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
    </Context>
</Host>
ze.
źródło
czy dotyczy to również tomcat 7?
Marcy Sutton,
4
Zgodnie z dokumentacją: W przypadku Tomcat 6, w przeciwieństwie do Tomcat 4.x, NIE zaleca się umieszczania elementów <Context> bezpośrednio w pliku server.xml. Dzieje się tak, ponieważ sprawia, że ​​modyfikowanie konfiguracji kontekstu jest bardziej inwazyjne, ponieważ nie można ponownie załadować głównego pliku conf / server.xml bez ponownego uruchomienia serwera Tomcat.
powiadommy, że takie podejście ma efekt uboczny! myStrutsbook zostanie wdrożony dwukrotnie Raz dla localhost: 8080 i raz dla localhost: 8080 / myStrutsbook! i może powodować błędy połączenia z bazą danych i większe wykorzystanie zasobów
Ali.Mojtehedy
24

W Tomcat 7 po tych zmianach mogę uzyskać dostęp myAPPpod adresem /i ROOTpod adresem/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

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

Sudheer Palyam
źródło
Właśnie takie rozwiązanie, którego szukałem! Wielkie dzięki, Sudheer! U mnie działa jak urok. I hej! Mam jeszcze pytanie. Kiedy uzyskuję dostęp do ROOTa /ROOTi próbuję zalogować się na stronę Menedżera przy użyciu poprawnych poświadczeń, odmawia mi się dostępu. Czy wiesz, jak to naprawić?
Saturnian
@Sudheer Palyam Zrobiłem to samo. Zmieniłem plik server.xml, a następnie uruchomiłem serwer. Ale kiedy załadowałem / odwiedziłem localhost: 8080, pokazał mi błąd statusu 404. Jeśli usunę te linie z server.xml, to załaduje powyższy port.
Sachin Kumar
16

Domyślną aplikacją ROOT jest zwykle Tomcat Manager - co może być przydatne, więc miałem ochotę ją mieć.

Więc sposób, w jaki zrobiłem ROOT mojej aplikacji i zachowałem TCmgr, był taki.

zmieniono nazwę ROOT na coś innego

mv ROOT TCmgr

następnie utworzył dowiązanie symboliczne, w którym ROOT wskazuje aplikację, którą chcę ustawić jako domyślną.

ln -s <your app> ROOT

pracował dla mnie i wydawał się najłatwiejszym podejściem.

nestochan
źródło
@Vic masz rację, ale okna mają dowiązania symboliczne, w XP i nowszych myślę, że możesz użyć mklink. Pamiętaj, że nie zrobiłem tego i istnieją inne powody, aby nie używać dowiązań symbolicznych.
MichaelStoner
12

Możesz to zrobić w nieco hakerski sposób:

  1. Zatrzymaj Tomcat
  2. Przenieś ROOT.war na bok i rm -rf webapps / ROOT
  3. Skopiuj aplikację internetową, którą chcesz, do webapps / ROOT.war
  4. Uruchom Tomcat
gareth_bowles
źródło
2
Brzydki lub może obrzydliwy, ale hacky może być złym terminem, ponieważ wydaje się, że jest to oficjalna / obsługiwana metoda.
Brian Knoblauch,
3

Alternatywnym rozwiązaniem byłoby utworzenie serwletu, który wysyła przekierowanie do żądanej domyślnej aplikacji internetowej i odwzorowuje ten serwlet na wszystkie adresy URL w aplikacji internetowej ROOT.

package com.example.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("/myRootWebapp");
  }
}

Dodaj powyższą klasę do
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet.
I dodaj następujące informacje do
CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml:

  <servlet>
    <display-name>Redirect</display-name>
    <servlet-name>Redirect</servlet-name>
    <servlet-class>com.example.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

W razie potrzeby można łatwo zmodyfikować serwlet RedirectServlet tak, aby akceptował parametr init, aby umożliwić ustawienie domyślnej aplikacji internetowej bez konieczności modyfikowania źródła.

Nie jestem pewien, czy zrobienie tego miałoby jakiekolwiek negatywne konsekwencje, ale przetestowałem to i wydaje się, że działa.

Jonathan Dixon
źródło
2

konfiguracja context.xml nie działa dla mnie. Tomcat 6.0.29 narzeka, że ​​docBase znajduje się w appBase: ... W przypadku Tomcat 5 to faktycznie zadziałało.

Więc jednym rozwiązaniem jest umieszczenie aplikacji w folderze ROOT.

Innym bardzo prostym rozwiązaniem jest umieszczenie pliku index.jsp w ROOT, który przekierowuje do mojej aplikacji w następujący sposób: response.sendRedirect ("/ MyApplicationXy");

Z poważaniem, Jan

Jan
źródło
1

Najlepszy sposób na zmianę aplikacji root Tomcat. Przetestowano na Tomcat 7 i 8.

  1. Przejdź do katalogu Tomcat Webapps:

    Przykład na moim komputerze: ~/stack/apache-tomcat/webapps

  2. Zmień nazwę, zamień lub usuń folder ROOT. Moja rada to zmiana nazwy lub utworzenie kopii zapasowej. Przykład zmiany nazwy ROOT na RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. Przenieś plik war z aplikacją do katalogu Tomcat webapps (jest to katalog, w którym znajdował się stary folder ROOT, na moim komputerze: ~ / stack / apache-tomcat / webapps)

Plik wojenny musi mieć nazwę ROOT.war . W razie potrzeby zmień nazwę aplikacji: yourApplicationName.war -> ROOT.war

  1. Zrestartuj tomcat. Po ponownym uruchomieniu Twoja aplikacja będzie rootem.
Jackkobec
źródło
0

Popatrzę na moje dokumenty; istnieje sposób na określenie konfiguracji, aby zmienić ścieżkę głównej aplikacji internetowej z innej niż ROOT (lub ROOT.war), ale wydaje się, że zmieniła się między Tomcat 5 i 6.

Znajdź to:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

Wygląda więc na to, że zmiana ścieżki głównej (w ROOT.xml) jest możliwa, ale trochę zepsuta - musisz przenieść WAR poza katalog automatycznego wdrażania. Zastanów się, jeśli zapytam, dlaczego zmiana nazwy pliku na ROOT.war nie jest wykonalnym rozwiązaniem?

Don Werve
źródło
1
Niestety zmiana pliku wojny na ROOT.war nie jest dla mnie opcją. Jacques
trochę późno, ale ... dla mnie nie mogę tego zmienić, ponieważ używam systemu stworzonego przez osobę trzecią, która wydaje się mieć zakodowane niektóre lokalizacje do plików jar ... więc przenoszę go do ROOT.war sprawia problem, ponieważ oryginalna aplikacja szuka swojego własnego pliku jar w katalogu znajdującym się w [originalapp.war]
mur
0

Niezbyt dobre rozwiązanie, ale jednym ze sposobów jest przekierowanie z aplikacji ROOT do YourWebApp. W tym celu musisz zmodyfikować plik ROOT index.html.

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

LUB

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

Źródła: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

abbas
źródło
-4

W Tomcat 7 (na serwerze Windows) nie dodałem ani nie edytowałem niczego w żadnym pliku konfiguracyjnym. Właśnie zmieniłem nazwę folderu ROOT na coś innego i zmieniłem nazwę folderu aplikacji na ROOT i działało dobrze.

Dov
źródło
1
To może być dobre obejście, ale pytanie Jaquesa dotyczy tego, jak zmienić domyślną aplikację; mogą istnieć powody, dla których nie może zmienić zawartości folderu ROOT.
JVMATL