2012-11-22 67 views
2

我有一個工作的春天mvc應用程序。我想讓測試版用戶可以看到它。我買了域名/設置名稱服務器和所有DNS的東西。Spring mvc tomcat應用程序部署

訪問我的應用程序低谷本地主機這樣的:

localhost:8080/myApp 

但在現實世界我要訪問它像mydomain.com。所以我搜索了很多,發現人們推薦nginx作爲「最快」的東西。因此,安裝nginx的與以下配置:

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 

問題:

當我訪問mydomain.com我得到那個衆所周知的tomcat頁If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!

如果我手動去mydomain.com/myApp那麼一切都按預期工作。

問:

有沒有辦法對我來說,配置該做到以下幾點:

當我在地址欄mydomain.com我得到轉移到mydomain.com/myApp

或者I型在這種情況下完全關閉。有更簡單的方法來做到這一點?

更新:

每FVU建議,當我改變ROOT一些其他目錄,然後部署我的根目錄了,我從Tomcat得到404:

type Status report 

message 

description The requested resource is not available. 

我可以檢索從這個錯誤服務器日誌:

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! 

更新II:

當我改變配置:

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

該網站看起來像它的工作,但它確實沒有。鏈接不起作用,css/js不加載。

+0

最簡單的就是將你的應用程序安裝爲Tomcat中的根應用程序,[如這裏所述](http://stackoverflow.com/questions/715506/tomcat-6-how-to-change-the-root-application ) – fvu

+0

重新更新:請參閱http://stackoverflow.com/questions/5014651/webapproot-in-spring有關信息,解決方案和有用的指針wrt這個春天相關的問題 – fvu

+0

也可能是你沒有取消部署應用程序,你最初加載(as/myApp)?我只會在任何時候都保留一份副本。 – fvu

回答

2

如果配置nginx的proxy_pass http://localhost:8080/myApp/;,唯一的問題是讓他們使用,而不是默認的Tomcat的Servlet路徑預期的基礎URL路徑,如何創建鏈接和資源。

如果你能夠使用Spring框架3.1+,新配置文件功能可以幫助確定取決於活動的配置文件不同的基URL,如其他web框架做:路徑將在運行時決定,取決於服務器或環境。例如,假設至少有兩個屬性文件(production.properties和dev。屬性)宣佈對他們每個人的BaseURL領域:

  • production.properties

    baseurl = //yourdomain.com 
    
  • dev.properties

    baseurl = //localhost:8080/myApp 
    

然後用你喜歡的方式春天,負載的屬性,每一個不同的環境,例如:

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

與以往的要求,你可以在任何JSP模板頁面定義基礎標籤有:

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

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

最後,你可以聲明所有鏈接和資源相對路徑

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

如果由於任何原因,您在基本標籤上遇到問題,您也可以將其解除是每個鏈接$ {baseurl}:<link rel="stylesheet" href="${baseurl}/css/app.css">

使用此解決方案,每個服務器將有每個自己的活動配置文件,所有鏈接和資源在運​​行時更新,如預期。

相關問題