【问题标题】:how to get two domain names to point to the same web app and show different content?如何让两个域名指向同一个网络应用程序并显示不同的内容?
【发布时间】:2012-08-27 14:48:54
【问题描述】:

我有两个客户,每个都是一个设计几乎相同的餐厅网站。

有一个主页、一个菜单页面、一个联系我们页面等等。

我想用 Java 构建它,可能在我自己的 Amazon AWS 虚拟机上运行在 Tomcat 或 GlassFish 上。

我的问题是,如果我在以下位置有一个 Web 应用程序:

1.2.3.4/myapp

在哪里

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的内容

?

非常感谢任何建议或想法!

【问题讨论】:

  • 您是否考虑过为每个网站使用一个 EC2 实例?您可以创建一个基础 AMI,然后从中创建实例,每个实例都会获得自己的弹性 IP。
  • @smcg 感谢您的建议,但我想要的是在一台服务器上运行一个应用程序,该服务器具有两个完全由数据库驱动的网站。这样我就可以添加更多客户端,而无需添加更多服务器。

标签: java web-applications amazon-web-services


【解决方案1】:

如果您只希望一个 web 应用根据原始 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()));

其中titleMapHashMap,它是在Filterinit() 方法中从数据库加载的。例如,要在 JSP 中使用该值,您可以这样访问它:

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

如果您想查看一个工作示例,请查看 http://thermodynamiccomputing.org/http://fnode.xeiam.com/。这两个网站实际上是使用我刚才描述的过滤技术的完全相同的 webapp。

【讨论】:

    【解决方案2】:

    这是我目前在Tomcat 中部署的一个解决方案。除了使用?clientid=1?clientid=2,您可以配置server.xml 文件以根据源IP 地址将请求传递到特定的Web 应用程序。在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。在正确的文件夹中将您的 webapps 部署为 ROOT.war 并重新启动 Tomcat。在我看来,这个解决方案更干净,它完全将 Web 应用程序彼此分离。

    【讨论】:

    • @Mihai 感谢您提供的信息,非常有用。但理想情况下,我希望只运行一个可以为多个网站提供内容的网络应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2014-11-23
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多