Sto cercando di modificare l'applicazione predefinita di un server Web Tomcat 6 in un'applicazione diversa da "ROOT" (all'interno della cartella webapps). Qual è il modo migliore per farlo?
Sto cercando di modificare l'applicazione predefinita di un server Web Tomcat 6 in un'applicazione diversa da "ROOT" (all'interno della cartella webapps). Qual è il modo migliore per farlo?
Risposte:
Esistono tre metodi:
Innanzitutto, spegni Tomcat dalla sua bin
directory ( sh shutdown.sh
). Quindi elimina tutto il contenuto della webapps
cartella Tomcat ( rm -fr *
). Quindi rinominare il file WAR in ROOT.war
e infine avviare Tomcat dalla bin
directory ( sh startup.sh
).
Lascia il tuo file di guerra $CATALINA_BASE/webapps
sotto il suo nome originale. Disattiva
autoDeploy e deployOnStartup nell'elemento Host nel server.xml
file. Definire esplicitamente tutti i contesti dell'applicazione in server.xml
, specificando sia il percorso
che gli attributi docBase . Devi farlo perché hai disabilitato tutti i meccanismi di distribuzione automatica di Tomcat e Tomcat non distribuirà più le tue applicazioni a meno che non trovi il loro contesto nel server.xml
.
secondo metodo: per apportare modifiche a qualsiasi applicazione, dovrai interrompere e riavviare Tomcat.
Posizionare il file WAR all'esterno di $CATALINA_BASE/webapps
(deve essere all'esterno per impedire la doppia distribuzione). Inserire un file di contesto denominato ROOT.xml
in $CATALINA_BASE/conf/
. Il singolo elemento in questo file di contesto DEVE avere un
attributo docBase che punta alla posizione del file WAR. L'elemento path non deve essere impostato .xml
, in questo caso deriva dal nome del file ROOT.xml
. Consultare la documentazione per il contenitore Contesto per i dettagli.
$CATALINA_BASE/conf/[enginename]/[hostname]
directory (che per la mia configurazione piuttosto semplice è $CATALINA_HOME/conf/Catalina/localhost
). Fare riferimento alla documentazione relativa al contenitore di contesto .
sudo systemctl start tomcatx
dove x
sta per il numero di versione
L'aggiunta di un <Context>
tag nel <Host>
tag server.xml
per Tomcat 6 risolverà il problema.
Se usi path=""
vuoto puoi usare un URL come http://localhost/first.do
.
Nel tag di contesto impostare gli attributi docBase="E:\struts-ITRCbook\myStrutsbook"
e reloadable="true"
, quindi, terminare il tag di contesto.
Dovrebbe assomigliare a qualcosa di simile a questo:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
</Context>
</Host>
In Tomcat 7 con queste modifiche, sono in grado di accedere myAPP
alle /
e ROOT
alle/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Aggiungi sopra alla <Host>
sezione in server.xml
/ROOT
e provo ad accedere alla pagina Manager usando le credenziali corrette, mi viene negato l'accesso. Sapresti come risolvere questo?
L'app predefinita di ROOT è in genere Tomcat Manager, che può essere utile, quindi mi è venuta voglia di tenerlo in giro.
Quindi il modo in cui ho creato la mia app ROOT e mantenuto TCmgr era così.
rinominato ROOT in qualcos'altro
mv ROOT TCmgr
quindi creato un collegamento simbolico in base al quale ROOT punta all'app che desidero rendere predefinita.
ln -s <your app> ROOT
ha funzionato per me e mi è sembrato l'approccio più semplice.
Secondo i documenti Apache Tomcat, è possibile modificare l'applicazione creando un file ROOT.xml. Vedi questo per maggiori informazioni:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"L'applicazione Web predefinita può essere definita utilizzando un file chiamato ROOT.xml."
Puoi farlo in modo leggermente hack-y:
Una soluzione alternativa sarebbe quella di creare un servlet che invia un reindirizzamento alla webapp predefinita desiderata e mappare quel servlet a tutti gli URL nella webapp 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");
}
}
Aggiungi la classe sopra a
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet
.
E aggiungi quanto segue a 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>
E se lo si desidera, è possibile modificare facilmente RedirectServlet per accettare un parametro di avvio per consentire di impostare la webapp predefinita senza dover modificare l'origine.
Non sono sicuro se questo avrebbe implicazioni negative, ma l'ho provato e sembra funzionare.
la configurazione context.xml non ha funzionato per me. Tomcat 6.0.29 si lamenta del fatto che docBase sia all'interno dell'appBase: ... Per Tomcat 5, in realtà ha funzionato.
Quindi una soluzione è quella di mettere l'applicazione nella cartella ROOT.
Un'altra soluzione molto semplice è quella di mettere un index.jsp su ROOT che reindirizza alla mia applicazione in questo modo: response.sendRedirect ("/ MyApplicationXy");
Cordiali saluti, Jan
Ho un problema durante la configurazione di Tomcat server.xml
e l'aggiunta dell'elemento Context. Semplicemente non vuole usare la mia configurazione:
http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
Se sei in un Unix-like
sistema:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Fatto.
Per me va bene.
Il modo migliore per cambiare l'applicazione root di Tomcat. Testato su Tomcat 7 e 8.
Passa alla directory di tomcat webapps:
Esempio sulla mia macchina: ~/stack/apache-tomcat/webapps
Rinomina, sostituisci o elimina la cartella ROOT. Il mio consiglio è di rinominare o creare una copia per il backup. Esempio rinominare ROOT in RENAMED_ROOT:
mv ROOT RENAMED_ROOT
Sposta il file di guerra con la tua applicazione nella directory di tomcat webapps (è una directory in cui era la vecchia cartella ROOT, sulla mia macchina: ~ / stack / apache-tomcat / webapps)
Il file di guerra deve avere un nome ROOT.war . Rinomina la tua applicazione se è necessario: yourApplicationName.war -> ROOT.war
Guarderò i miei documenti; c'è un modo per specificare una configurazione per cambiare il percorso dell'applicazione web root lontano da ROOT (o ROOT.war), ma sembra che sia cambiato tra Tomcat 5 e 6.
Trovato questo:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
Quindi, sembra che sia possibile cambiare il percorso di root (in ROOT.xml), ma un po 'rotto - devi spostare il tuo WAR fuori dalla directory di auto-deployment. Ti dispiace se ti chiedo perché rinominare il tuo file in ROOT.war non è una soluzione praticabile?
Non è un'ottima soluzione, ma un modo è reindirizzare dall'app ROOT a YourWebApp. Per questo è necessario modificare il ROOT index.html.
<html>
<head>
<title>Redirecting to /YourWebApp</title>
</head>
<body onLoad="javascript:window.location='YourWebApp';">
</body>
</html>
O
<html>
<head>
<title>Redirecting to /YourWebApp</title>
<meta http-equiv="refresh" content="0;url=YourWebApp" />
</head>
<body>
</body>
</html>
Riferimento: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html
In Tomcat 7 (sotto il server Windows) non ho aggiunto o modificato nulla a nessun file di configurazione. Ho appena rinominato la cartella ROOT in qualcos'altro e ho rinominato la mia cartella dell'applicazione in ROOT e ha funzionato bene.