Come modificare l'applicazione ROOT?


130

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:


129

Esistono tre metodi:

  • Innanzitutto, spegni Tomcat dalla sua bindirectory ( sh shutdown.sh). Quindi elimina tutto il contenuto della webappscartella Tomcat ( rm -fr *). Quindi rinominare il file WAR in ROOT.ware infine avviare Tomcat dalla bindirectory ( sh startup.sh).

  • Lascia il tuo file di guerra $CATALINA_BASE/webappssotto il suo nome originale. Disattiva autoDeploy e deployOnStartup nell'elemento Host nel server.xmlfile. 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.xmlin $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.

Riferimento


4
Ho provato il primo metodo e funziona! Bdw - NON è necessario eliminare tutto. Ho appena eliminato la cartella ROOT e rinominato la mia guerra in ROOT.war e funziona come un incantesimo.
Hostnik

So che non sta davvero seguendo le regole del sof ma scopalo ..... Grazie! Vorrei poter votare più di una volta. Super utile. A proposito, ho dovuto riavviare Tomcat prima che funzionasse, @hostnik.
brutto pasticcio

Il terzo metodo di @ danny-london non ha funzionato per me in Tomcat 7, ma funziona se si inserisce il file ROOT.xml nella $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 .
Michael Scheper,

Moderna alternativa all'avvio di Tomcat: sudo systemctl start tomcatxdove xsta per il numero di versione
EarthMind

24

L'aggiunta di un <Context>tag nel <Host>tag server.xmlper 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>

è vero anche per Tomcat 7?
Marcy Sutton,

4
Secondo la documentazione: per Tomcat 6, a differenza di Tomcat 4.x, NON è consigliabile posizionare gli elementi <Context> direttamente nel file server.xml. Questo perché rende la modifica della configurazione del contesto più invasiva poiché il file conf / server.xml principale non può essere ricaricato senza riavviare Tomcat.

avvisiamo che questo approccio ha effetti collaterali! myStrutsbook verrà distribuito due volte Una volta per localhost: 8080 e una volta per localhost: 8080 / myStrutsbook! e può causare errori di connessione al database e un maggiore utilizzo delle risorse
Ali.Mojtehedy

24

In Tomcat 7 con queste modifiche, sono in grado di accedere myAPPalle /e ROOTalle/ROOT

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

Aggiungi sopra alla <Host>sezione in server.xml


Solo la soluzione che stavo cercando! Grazie mille, Sudheer! Funziona come un incanto per me. Ehi! Ho un'altra domanda. Quando accedo al ROOT /ROOTe provo ad accedere alla pagina Manager usando le credenziali corrette, mi viene negato l'accesso. Sapresti come risolvere questo?
Saturniano,

@Sudheer Palyam Ho fatto lo stesso. Ho modificato il file server.xml e quindi ho avviato il server. Ma quando ho caricato / visitato il localhost: 8080, mi ha mostrato un errore di stato 404. Se cancello queste righe da server.xml, allora carica la porta sopra.
Sachin Kumar,

16

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.


@Vic hai ragione, ma Windows ha collegamenti simbolici, in XP e sopra penso che tu possa usare mklink. Si prega di notare che non l'ho fatto e ci sono altri motivi per non usare collegamenti simbolici.
MichaelStoner,


12

Puoi farlo in modo leggermente hack-y:

  1. Ferma Tomcat
  2. Spostare ROOT.war da parte e rm -rf webapps / ROOT
  3. Copia la webapp che desideri su webapps / ROOT.war
  4. Avvia Tomcat

2
Brutto o forse icky, ma hacky potrebbe essere il termine sbagliato dal momento che sembra essere il metodo ufficiale / supportato.
Brian Knoblauch,

3

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.


2

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



1

Il modo migliore per cambiare l'applicazione root di Tomcat. Testato su Tomcat 7 e 8.

  1. Passa alla directory di tomcat webapps:

    Esempio sulla mia macchina: ~/stack/apache-tomcat/webapps

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

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

  1. Riavvia Tomcat. Dopo il riavvio, l'applicazione sarà root.

0

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?


1
Sfortunatamente, cambiare il file di guerra in ROOT.war non è un'opzione per me. Jacques

un po 'in ritardo, ma ... per me non posso cambiarlo perché sto usando un sistema creato da una terza parte, che sembra aver codificato alcune posizioni in file jar .... quindi spostandolo su ROOT.war crea un problema, poiché l'applicazione originale cerca il proprio jar in una directory che si trova in [originalapp.war]
mur

0

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


-4

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.


1
Questa potrebbe essere una buona soluzione, ma la domanda di Jaques è su come cambiare l'applicazione predefinita; potrebbero esserci dei motivi per cui non può cambiare il contenuto della cartella ROOT.
JVMATL,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.