Java 如何让两个域名指向同一个web应用程序并显示不同的内容?

Java 如何让两个域名指向同一个web应用程序并显示不同的内容?,java,web-applications,amazon-web-services,Java,Web Applications,Amazon Web Services,我有两个客户,每个客户都是一个设计几乎相同的餐厅网站 有主页、菜单页、联系我们页等等 我想用Java构建它,可能在我自己的AmazonAWS虚拟机上的Tomcat或GlassFish上运行 我的问题是,如果我在以下位置有一个web应用程序: 1.2.3.4/myapp 在哪里 显示餐厅A的网站,以及 1.2.3.4/myapp?clientid=2 显示餐厅B的网站 我如何设置事情,以便: www.restaurantA.com显示了1.2.3.4/myapp?clientid=1的内容 及

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

有主页、菜单页、联系我们页等等

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

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

1.2.3.4/myapp
在哪里

显示餐厅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的内容

?

非常感谢您的任何建议或想法

这是我目前在Tomcat中部署的一个解决方案。您可以根据源IP地址配置server.xml文件,将请求传递到特定的web应用程序,而不是使用?clientid=1和?clientid=2。在server.xml中:


然后在$TOMCAT_HOME/中,与webapps一起创建两个名为restaurantA和restaurantB的文件夹。将webapps作为ROOT.war部署到正确的文件夹中,然后重新启动Tomcat。在我看来,这个解决方案更干净,它完全将web应用程序彼此分离。

如果您只希望一个web应用程序根据原始URL提供不同的内容,您可以简单地使用javax.servlet.Filter。首先在web.xml中声明筛选器:

记住还要调用chain.doFilterrequest,response;如果您正在使用任何其他过滤器。现在您知道了原始域名,可以构建适当的响应。我通过在doFilter方法中设置特定于域的属性来实现这一点,如下所示:

request.getServerName()
request.setAttribute("title", titleMap.get(request.getServerName()));
<title><%=request.getAttribute("title")%></title>
其中titleMap是从筛选器的init方法中的DB加载的HashMap。例如,要在JSP中使用该值,您可以按如下方式访问它:

request.getServerName()
request.setAttribute("title", titleMap.get(request.getServerName()));
<title><%=request.getAttribute("title")%></title>

如果您想看到一个工作示例,请查看并。这两个网站实际上是使用我刚才描述的过滤技术的完全相同的webapp。

您考虑过每个网站使用一个EC2实例吗?您可以创建一个基本AMI,然后从中创建实例,每个实例都将获得自己的弹性IP。@smcg感谢您的建议,但我想要的是一个应用程序在一台服务器上运行,并有两个完全由数据库驱动的网站。这样我就可以添加更多的客户端,而不必添加更多的服务器。@Mihai感谢您提供的信息,非常有用。然而,理想情况下,我希望只运行一个web应用程序,可以为多个网站提供内容。