让webapp知道托管它的主机和端口

时间:2014-11-26 17:38:17

标签: java tomcat servletcontextlistener

我使用tomcat 7.0托管基于java / jsp的webapps。我想让我的webapps能够调用来自其他webapps(在同一台机器上)的请求。要做到这一点,他们需要知道他们可以互相访问的URL。我不想这样硬编码(在代码中或在配置文件中),但我不知道如何让每个webapp都知道他们自己的access-url。具体来说,我希望webapps知道以下信息:

协议:http或https 主持人:my.machine.com 港口:1234 webapp context:webappName

有了这些信息,他们可以建立自己的访问权限网址:http://my.machine.com:1234/webappName/

当然Tomcat知道这些信息,但是如何将这些信息推送到我的java代码中呢?我正在考虑创建一个servletListener,它在应用程序启动时将这些信息存储在内存中,但我只找到了使用此代码获取webapp上下文的方法:

public void contextInitialized(ServletContextEvent servletContextEvent)
{
    ServletContext servletContext = servletContextEvent.getServletContext();        
    String webappContext = servletContext.getContextPath();
}

1 个答案:

答案 0 :(得分:1)

所有信息都可以从HttpServletRequest获得。

Protocol:  request.getProtocol(); // Returns HTTP/1.1
Scheme: request.getScheme(); //returns http or https
Context: request.getContextPath(); // return webappname
Request URL: request.getRequestURL() //return http://my.machine.com:1234/webappName/servletpath
Request URI: request.getRequestUri() // returns /servletpath
Host: request.getLocalAddr(); // returns 0:0:0:0:0:0:0:1 (if server is running on localhost)
Port: request.getLocalPort(); // returns 1234
Hostname: request.getServerName(); // returns my.machine.com
Port: request.getServerPort(); // returns 8080