如果您只希望一個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
是從數據庫中Filter
的init()
方法加載一個HashMap
。如果你想看到一個工作示例,請http://thermodynamiccomputing.org/和http://fnode.xeiam.com/
<title><%=request.getAttribute("title")%></title>
:要在JSP中使用的值,例如,您將訪問它像這樣。這兩個網站實際上是使用我剛剛描述的過濾技術的完全相同的Web應用程序。
您是否考慮過在每個網站使用一個EC2實例?您可以創建一個基礎AMI,然後從中創建實例,每個實例都可以獲得自己的彈性IP。 – smcg
@smcg感謝您的建議,但我想要的是一個應用程序在一臺服務器上運行,並帶有兩個完全由數據庫驅動的網站。這樣我就可以添加更多的客戶端而無需添加更多的服務器。 –