我有两个客户,每个客户都是设计几乎相同的餐厅网站。
有一个主页、一个菜单页面、一个联系我们页面等等。
我想用 Java 构建它,可能在我自己的 Amazon AWS 虚拟机上的 Tomcat 或 GlassFish 上运行。
我的问题是,如果我有一个网络应用程序:
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
?
非常感谢任何建议或想法!
最佳答案
如果您只希望一个 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()));
其中 titleMap
是从 Filter
的 init()
中的数据库加载的 HashMap
方法。例如,要在 JSP 中使用该值,您可以像这样访问它:
<title><%=request.getAttribute("title")%></title>
如果您想查看工作示例,请查看 http://thermodynamiccomputing.org/和 http://fnode.xeiam.com/ 。这两个网站实际上是使用我刚才描述的过滤技术的完全相同的网络应用程序。
关于java - 如何让两个域名指向同一个Web应用程序并显示不同的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144324/