2012-08-27 47 views
1

我有兩個客戶,每個客戶都是幾乎相同設計的餐廳網站。如何讓兩個域名指向同一個網絡應用並顯示不同的內容?

有一個主頁面,一個菜單頁面,一個聯繫我們頁面等等。

我想用Java構建它,可能運行在我自己的Amazon AWS虛擬機上的Tomcat或GlassFish上。

我的問題是,如果我有一個Web應用程序在:

​​

其中

1.2.3.4/myapp?clientid=1 

顯示A店的網站,並

1.2.3.4/myapp?clientid=2 

顯示餐廳B的網站

我如何設置的東西,所以:

www.restaurantA.com顯示1.2.3.4/myapp?clientid=1

www.restaurantB.com內容顯示1.2.3.4/myapp?clientid=2

的內容?

任何建議或想法,非常感謝!

+0

您是否考慮過在每個網站使用一個EC2實例?您可以創建一個基礎AMI,然後從中創建實例,每個實例都可以獲得自己的彈性IP。 – smcg

+0

@smcg感謝您的建議,但我想要的是一個應用程序在一臺服務器上運行,並帶有兩個完全由數據庫驅動的網站。這樣我就可以添加更多的客戶端而無需添加更多的服務器。 –

回答

1

如果您只希望一個webapp根據原始URL提供不同的內容,您可以簡單地使用javax.servlet.Filter。首先聲明過濾器在web.xml

<filter> 
    <filter-name>DomainNameFilter</filter-name> 
    <filter-class>com.whatever.blah.DomainNameFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>DomainNameFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

然後創建一個名爲DomainNameFilter類,它實現javax.servlet.Filter。在doFilter()方法,你可以抓住原始URL是這樣的:

request.getServerName() 

記得還呼籲chain.doFilter(request, response);如果您正在使用的任何其他過濾器。現在您知道了始發域名,您可以構建適當的響應。我已經通過設置doFilter()法域特定的屬性,這樣做到了這一點:

request.setAttribute("title", titleMap.get(request.getServerName())); 

其中titleMap是從數據庫中Filterinit()方法加載一個HashMap。如果你想看到一個工作示例,請http://thermodynamiccomputing.org/http://fnode.xeiam.com/

<title><%=request.getAttribute("title")%></title> 

:要在JSP中使用的值,例如,您將訪問它像這樣。這兩個網站實際上是使用我剛剛描述的過濾技術的完全相同的Web應用程序。

1

這是我目前部署的Tomcat中的解決方案。您可以將server.xml文件配置爲將請求傳遞給特定的Web應用程序,而不是使用?clientid=1?clientid=2,具體取決於源地址IP。在server.xml

<Host name="www.restaurantA.com" 
    appBase="restaurantA" 
    unpackWARs="true" 
    autoDeploy="true"> 
</Host> 
<Host name="www.restaurantB.com" 
    appBase="restaurantB" 
    unpackWARs="true" 
    autoDeploy="true"> 
</Host> 

然後在$TOMCAT_HOME/,沿着webapps創建兩個文件夾名爲restaurantArestaurantB。在正確的文件夾中將您的web應用程序部署爲ROOT.war,然後重新啓動Tomcat。我認爲這個解決方案更加清潔,並且它將Web應用程序彼此完全分開。

+0

@Mhaihai感謝您的信息,非常有用。不過理想情況下,我想只運行一個可以爲多個網站提供內容的網絡應用程序。 –

相關問題