2012-11-22 3 views
2

J'ai une application mvc de printemps. Je veux le rendre disponible pour les utilisateurs bêta. J'ai acheté des noms de domaine/setup nameservers et tous ces trucs DNS.Spring mvc tomcat application déployer

accéder à mon bac app hôte local comme celui-ci:

localhost:8080/myApp 

Mais dans le realworld Je veux y accéder comme mydomain.com. Donc j'ai beaucoup googlé, et j'ai trouvé que les gens recommandaient nginx pour ces choses comme "le plus rapide". nginx Installed Alors configuration suivante:

server { 

    listen 80; 

    server_name www.mydomain.com mydomain.com; 
    location/{ 
     proxy_set_header X-Forwarded-Host $host; 
     proxy_set_header X-Forwarded-Server $host; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_pass http://localhost:8080; 
    } 

} #end server 

Le problème:

Lorsque je visite mydomain.com je suis bien connu que la page tomcat If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!.

Si je vais manuellement à mydomain.com/myApp alors tout fonctionne comme prévu.

Question:

est-il un moyen pour moi de configurer ceci pour effectuer les opérations suivantes:

Quand je tape dans la barre d'adresse mydomain.com que je suis transféré à mydomain.com/myApp

Ou je suis complètement éteint dans ce cas. Il y a un moyen plus facile de le faire?

mise à jour:

Par suggestion FVU quand je change ROOT dans un autre répertoire puis déployer mon dans le répertoire ROOT je reçois 404 de tomcat:

type Status report 

message 

description The requested resource is not available. 

Je peux récupérer cette erreur le journal du serveur:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener 
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/tomcat_9090/webapps/myApp/] instead of [/tomcat_9090/webapps/ROOT 
/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 

Mise à jour II:

Lorsque je change la configuration à:

proxy_pass http://localhost:8080/myApp/; 

Le site ressemble à ça fonctionne, mais il ne vraiment pas. Les liens ne fonctionnent pas, css/js ne se charge pas.

+0

Le plus simple sera d'installer votre application en tant qu'application racine dans Tomcat, [comme expliqué ici] (http://stackoverflow.com/questions/715506/tomcat-6-how-to-change-the-root-application) – fvu

+0

Re mise à jour: voir http://stackoverflow.com/questions/5014651/webapproot-in-spring pour info, des solutions et des pointeurs utiles par rapport à cette question liée au printemps – fvu

+0

aussi, pourrait-il être que vous n'avez pas annuler le déploiement de l'application vous à l'origine chargé (comme/myApp)? Je ne laisserais qu'une copie chargée en tout temps. – fvu

Répondre

2

Si vous configurez nginx avec proxy_pass http://localhost:8080/myApp/;, la seule question est de savoir comment créer des liens et des ressources afin qu'ils utilisent le chemin de base url attendue, au lieu du chemin par défaut Tomcat Servlet.

Si vous êtes en mesure d'utiliser Spring Framework 3.1+, les nouveaux profils comportent pourrait aider à définir différents-url de base en fonction du profil actif, comme d'autres frameworks web font: le chemin sera décidé en exécution, en fonction du serveur ou de l'environnement.

Par exemple, en supposant au moins 2 fichiers de propriétés (production.properties et dev.propriétés) déclarer le champ baseurl sur chacun d'eux:

  • production.properties

    baseurl = //yourdomain.com 
    
  • dev.properties

    baseurl = //localhost:8080/myApp 
    

Ensuite, en utilisant votre chemin Spring préféré, la charge les propriétés pour chaque environnement différent, comme:

<util:properties id="properties" location="classpath:META-INF/default.properties" /> 
.... 
<beans profile="development"> 
    <util:properties id="properties" location="classpath:META-INF/dev.properties" /> 
</beans> 

Avec les exigences précédentes, vous pouvez définir la balise de base dans une page modèle JSP avec:

<spring:eval expression="@properties['baseurl']" var="baseurl" /> 

<base href="${baseurl}/" /> 

Enfin, vous pouvez déclarer tous les liens et ressources chemins relatifs:

<link rel="stylesheet" href="css/app.css"> 
<script src="js/libs/jquery-1.7.1.min.js"></script> 
<a href="">Home</a> 
<a href="about">About</a> 
... 

Si, pour une raison quelconque, vous rencontrez des problèmes avec l'étiquette de base , vous pouvez également décliner Chaque lien avec $ {baseurl}: <link rel="stylesheet" href="${baseurl}/css/app.css">

En utilisant cette solution, chaque serveur aura son propre profil actif, avec tous les liens et ressources mis à jour à l'exécution, comme prévu.

Questions connexes