如何在 Apache-Tomcat Web 应用程序中获取浏览器 URL?

Posted

技术标签:

【中文标题】如何在 Apache-Tomcat Web 应用程序中获取浏览器 URL?【英文标题】:How to get browser URL in Apache-Tomcat Web Application? 【发布时间】:2011-08-04 16:38:09 【问题描述】:

我已经通过 mod_proxy 使用 Apache-Tomcat 连接器配置了我的 Web 应用程序 - 见下文。

<IfModule mod_proxy.c>
ProxyPass /myapp http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp http://127.0.0.1:8080/myapp
</IfModule>

另外,我使用子域是为了通过读取 URL 直接识别客户端 - 请参见下面的示例。

Client1 类型

http://client1.mydomain.com/myapp

Client2 类型

http://client2.mydomain.com/myapp

现在,我想读取 URL 并解析客户端名称(client1 或 client2)。我的 Web 应用程序的其余部分是根据客户端的身份驱动的(当然,在身份验证之后)。但问题是,当我尝试使用 HttpServletRequest 的 getRequestURL 获取 URL 时,我得到的是 http://127.0.0.1:8080/myapp 而不是 client1.mydomain 或 client2.mydomain。我想这是由于 Apache 被用作主要调度程序,并且对 Apache httpd 的请求被转发到 localhost Tomcat。

我不想更改 URL 的结构(如 client1.mydomain.com/client1),也不想通过 UI 向用户询问客户端信息。我如何做到这一点?

【问题讨论】:

【参考方案1】:

我通过使用 AJP 连接器而不是 mod_proxy 解决了这个问题。

<Location /myapp>
ProxyPass ajp://localhost:8009/myapp
ProxyPassReverse ajp://localhost:8009/myapp
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>

AJP 连接器将请求从 apache 转发到 tomcat,保留浏览器 URL(而 mod_proxy 将其更改为 localhost:8080/myapp),因此我能够从中读取和解析客户端名称。

现在我可以呈现特定于客户端的数据,而无需实际提示用户输入他/她的客户端名称。

【讨论】:

以上是关于如何在 Apache-Tomcat Web 应用程序中获取浏览器 URL?的主要内容,如果未能解决你的问题,请参考以下文章

Linux技巧分享apache-tomcat简单搭建网站

Tomcat中部署web应用 ---- Dubbo服务消费者Web应用war包的部署

Tomcat中部署web应用 ---- Dubbo服务消费者Web应用war包的部署

将自己的web项目发布到centos

Linux CentOS下部署Java Web项目

apache-tomcat集成了tomcat和apache了吗