1

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

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

我想用 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

?

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

4

2 回答 2

0

这是Tomcat我目前已部署的解决方案。您可以配置文件以根据源地址将请求传递给特定的 Web 应用程序,而不是使用?clientid=1and 。在:?clientid=2server.xmlIPserver.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创建两个名为restaurantAand的文件夹restaurantBROOT.war在正确的文件夹中部署您的 webapps并重新启动Tomcat。在我看来,这个解决方案要干净得多,它完全将 Web 应用程序彼此分开。

于 2012-08-27T15:09:10.330 回答
0

如果您只希望一个 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>

然后创建一个名为DomainNameFilterimplements的类javax.servlet.Filter。在该doFilter()方法中,您可以像这样获取原始 URL:

request.getServerName()

chain.doFilter(request, response);如果您使用任何其他过滤器,请记住也致电。现在您知道了原始域名,您可以构建适当的响应。我通过在doFilter()方法中设置特定于域的属性来做到这一点,如下所示:

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

在'方法中从数据库加载的 a 是titleMap哪里。例如,要在 JSP 中使用该值,您可以像这样访问它:HashMapFilterinit()

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

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

于 2012-08-28T07:44:07.317 回答