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

标签 java web-applications amazon-web-services

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

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

我想用 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 是从 Filterinit() 中的数据库加载的 HashMap方法。例如,要在 JSP 中使用该值,您可以像这样访问它:

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

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

关于java - 如何让两个域名指向同一个Web应用程序并显示不同的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144324/

相关文章:

amazon-web-services - 找不到Terraform AWS凭证文件

amazon-web-services - AWS API Gateway 上的自动化测试

security - 可以在没有 SSL 的情况下设计和测试安全的 Web 应用程序吗?

asp.net - 模型-存储库-服务-验证器- View - View 模型- Controller 设计模式(?)

java - 尝试设置 JEditorPane 的 url 时出错

java - iCal 同步可以在 Java 中使用吗?如何使用java连接ical服务器?

Tomcat webapps 目录

ios - S3TransferManager-示例 | IAM getList 政策问题

java - Quartz 作业未更新数据库

Java 图像不显示?