2 votes

Comment faire en sorte qu'Apache Tomcat serve ma page Web à partir de 'www.myapp.com' plutôt que de 'www.myapp.com/myapp' ?

Désolé, je n'ai pas pu trouver de titre plus descriptif sans expliquer toute la situation.

J'utilise IIS7 avec Tomcat7. J'ai créé une application web en utilisant GWT, l'ai empaqueté dans un fichier war et l'ai déployé sur Tomcat.
En tapant l'URL de mon site Web, disons "www.myapp.com", la page par défaut de Tomcat s'affiche. Je pense que c'est parce que c'est ce qui se trouve dans le répertoire %TOMCAT_HOME%/webapps/Root. Je peux accéder à ma webapp par "www.myapp.com/myapp" et toutes les fonctionnalités que j'attends sont présentes.

Comment puis-je configurer Tomcat pour que ma webapp soit accessible par "www.myapp.com" plutôt que par "www.myapp.com/myapp" ?

J'ai essayé de configurer server.xml dans %TOMCAT_HOME%/conf en ajoutant une nouvelle balise 'host' pour mon application web :

        <Host name="myapp.com" debug="0" appBase="webapps/myapp" unpackWARs="true">
              <Alias>www.myapp.com</Alias>
              <Context path="" docBase="." debug="0" reloadable="true"/> 
        </Host>

En ajoutant la balise Host ci-dessus et en tapant "www.myapp.com", j'accède directement à mon application Web. Le problème est que lorsque je fais quelque chose dans l'application qui fait un appel à la servlet (j'utilise GWT RPC), j'obtiens des erreurs :

com.google.gwt.user.client.rpc.StatusCodeException : 404

Erreur de serveur 404 - Fichier ou répertoire non trouvé.

La ressource que vous recherchez a peut-être été supprimée, son nom a été modifié ou elle est temporairement indisponible.

Je ne sais pas pourquoi j'obtiens cette erreur, alors que la saisie de "www.myapp.com/myapp" sans les balises "Host" ajoutées fonctionnait bien auparavant.

Je suis nouveau dans Tomcat, et je ne suis pas sûr de savoir comment résoudre ce problème. Toute aide serait grandement appréciée. Merci

EDIT :

a) Sections d'hôtes à partir de server.xml (l'hôte par défaut est www.myapp.com) :

<Host name="localhost"  appBase="C:/Tomcat 7.0/webapps" unpackWARs="true" autoDeploy="true"></Host>

<Host name="www.myapp.com" appBase="C:/Tomcat 7.0/myapp" unpackWARs="true" autoDeploy="true">       </Host>

b) workers.properties (j'ai essayé de changer l'hôte ici à www.myapp.com sans succès) :

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13

c) uriworkermap.properties :

/*=worker1

3voto

Mark Thomas Points 7165

Vous avez deux options.

  1. Renommez votre WAR en Root.war.

  2. Déplacez votre WAR en dehors de l'appBase de Tomcat, puis ajoutez un nouveau fichier $CATALINA_BASE/Catalina/localhost/Root.xml avec le contenu suivant :

    <Context docBase="path/to/WAR" />

Cela suppose que vous utilisez les noms par défaut pour le moteur et l'hôte. Si ce n'est pas le cas, ajustez le chemin en conséquence. Il s'agit de $CATALINA_BASE/<nom_du_moteur>/<nom_de_l'hôte>/Root.war.

Maintenant que vous utilisez plusieurs hôtes avec l'option 1, vous devez faire ce qui suit puisque appBase != docBase. Si vous essayez d'utiliser la même valeur pour eux, toutes sortes de mauvaises choses vont se produire.

Il existe plusieurs façons de parvenir à une solution fonctionnelle à partir de ce que vous avez. Je vous suggère les suivantes : 1. Créez un répertoire appelé C:/Tomcat 7/webapps-myapp/Root. 2. Copiez le contenu de C:/Tomcat 7/myapp dans ce nouveau répertoire. 3. Supprimez C:/Tomcat 7/myapp 4. Changez l'appBase de l'hôte MyApp en "webapps-myapp" (ou le chemin complet).

Cela déploiera l'application de C:/Tomcat 7/myapp comme l'application racine (par défaut) dans l'hôte virtuel myapp. Cela suppose que vous avez déployé l'application myapp dans C:/Tomcat 7/myapp.

-1voto

paulsm4 Points 39422

À partir de l'application Tomcat 7 docs :

http://tomcat.apache.org/tomcat-7.0-doc/config/host.html

Si vous utilisez l'implémentation standard de l'hôte, les éléments suivants sont requis suivantes s'effectuent automatiquement au premier démarrage de Catalina, si si la propriété deployOnStartup est définie sur true (valeur par défaut) par défaut) :

Any XML file in the Host's xmlBase directory (by default $CATALINA_BASE/conf/[engine_name]/[host_name]) is assumed to be a

Le descripteur XML du contexte contient un élément Context (et son sous-éléments associés) pour une seule application Web. Les applications web associées à chacun de ces fichiers descripteurs XML de contexte seront déployées en premier.

The docBase attribute of this <Context> element must only be set if the docBase is outside the Host's appBase. For web applications

situé dans l'appBase de l'hôte, la docBase sera le nom du fichier fichier XML avec ".xml" remplacé par ".war" pour une application web ou le nom du fichier XML sans ".xml" pour un répertoire. répertoire.

The path attribute must not be set. The context path used will be a slash character ("/") followed by the name of the XML file (less the

.xml). Les chemins contextuels à plusieurs niveaux peuvent être définis à l'aide de #, par exemple, foo#bar.xml pour un chemin contextuel de /foo/bar. L'application Web par défaut par défaut, dont le chemin d'accès au contexte est /, peut être défini à l'aide d'un fichier appelé Root.xml.

Any web application archive file within the Host's appBase directory that has not already been deployed as a result of a context

XML, n'a pas de répertoire correspondant du même nom. nom (sans l'extension ".war"), et n'est pas exclu par la commande deployIgnore sera déployé ensuite. Le chemin d'accès au contexte utilisé sera un caractère de barre oblique ("/") suivi du nom de l'archive de l'application Web moins l'extension ".war". La seule exception à cette règle est qu'une exception à cette règle : une archive d'application Web nommée "Root.war" sera déployée avec un chemin de contexte de /. Des contextes à plusieurs niveaux peuvent être définis en utilisant #, par exemple, utiliser un WAR nommé foo#bar.war pour un chemin de contexte de /foo/bar.

If the unpackWARs attribute is true, the web application archive file will be expanded to a directory of the same name (without the

".war" extension".

Note: If you re-deploy an updated WAR file while Tomcat is stopped, be sure to delete the associated expanded directory before

redémarrer Tomcat, de sorte que le fichier WAR mis à jour sera réexpansé lorsque Tomcat redémarre.

If copyXML is true (it is false by default), any web application archive file within the Hosts's appBase directory that does not have a

le descripteur XML du contexte correspondant (avec une extension ".xml" plutôt que plutôt qu'une extension ".war") dans la xmlBase de l'hôte sera analysé pour voir s'il contient un descripteur XML de contexte (situé dans le répertoire /META-INF/context.xml) et s'il en trouve un, le descripteur sera copié dans le répertoire xmlBase et renommé.

Finally, any sub-directory within the Host's appBase that has not already been deployed as a result of a context XML descriptor and is

non exclus par deployIgnore seront déployés. Le chemin du contexte utilisé utilisé sera un caractère de barre oblique ("/") suivi du nom du répertoire, sauf si le nom du répertoire soit Root, auquel cas le chemin du contexte sera /. Des contextes multi-niveaux peuvent être définis en utilisant #, par exemple, utiliser un répertoire nommé foo#bar pour un chemin contextuel de /foo/bar.

If copyXML is true (it is false by default), any directory within the Hosts's appBase directory that does not have a corresponding

Le descripteur XML du contexte dans la xmlBase de l'hôte sera analysé pour voir si s'il contient un descripteur XML de contexte (situé dans le répertoire /META-INF/context.xml) et si un tel descripteur est trouvé, il sera copié dans le répertoire xmlBase et renommé.

Le point principal dans tout ça :

a web application archive named "ROOT.war" will be deployed with a context path of /.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X