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ć?
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ć?
Odpowiedzi:
Istnieją trzy metody:
Najpierw zamknij Tomcata z jego bin
katalogu ( sh shutdown.sh
). Następnie usuń całą zawartość webapps
folderu Tomcat ( rm -fr *
). Następnie zmień nazwę pliku WAR na ROOT.war
i na koniec uruchom Tomcata z bin
katalogu ( sh startup.sh
).
Pozostaw swój plik wojenny $CATALINA_BASE/webapps
pod jego oryginalną nazwą. Wyłącz
autoDeploy i deployOnStartup w elemencie Host w server.xml
pliku. 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.xml
w $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ć - .xml
w tym przypadku pochodzi on od nazwy pliku ROOT.xml
. Szczegółowe informacje można znaleźć w dokumentacji kontenera kontekstu .
$CATALINA_BASE/conf/[enginename]/[hostname]
katalogu (co jest dla mojej raczej podstawowej konfiguracji $CATALINA_HOME/conf/Catalina/localhost
). Zapoznaj się z dokumentacją kontenera kontekstu .
sudo systemctl start tomcatx
gdzie x
oznacza numer wersji
Dodanie <Context>
tagu do <Host>
tagu w server.xml
Tomcat 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>
W Tomcat 7 po tych zmianach mogę uzyskać dostęp myAPP
pod adresem /
i ROOT
pod adresem/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Dodaj powyżej do <Host>
sekcji w server.xml
/ROOT
i próbuję zalogować się na stronę Menedżera przy użyciu poprawnych poświadczeń, odmawia mi się dostępu. Czy wiesz, jak to naprawić?
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.
Zgodnie z dokumentacją Apache Tomcat, możesz zmienić aplikację, tworząc plik ROOT.xml. Zobacz to, aby uzyskać więcej informacji:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
„Domyślną aplikację internetową można zdefiniować za pomocą pliku o nazwie ROOT.xml”.
Możesz to zrobić w nieco hakerski sposób:
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.
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
Mam problem z konfiguracją Tomcata server.xml
i dodaniem elementu Context. Po prostu nie chce używać mojej konfiguracji:
http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
Jeśli jesteś w Unix-like
systemie:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Gotowe.
Pracuje dla mnie.
Najlepszy sposób na zmianę aplikacji root Tomcat. Przetestowano na Tomcat 7 i 8.
Przejdź do katalogu Tomcat Webapps:
Przykład na moim komputerze: ~/stack/apache-tomcat/webapps
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
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
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?
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
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.