我需要知道我的java webapp在webapp启动时运行的HTTP和HTTPS端口

时间:2011-09-20 07:16:08

标签: java tomcat servlets

在发出任何http或https请求之前,是否可以从Web应用程序的java代码中找到为Tomcat Web服务器配置的HTTP和HTTPS端口。

我在应用程序启动时需要这些信息。我不想等待某人发起HTTP请求并调用getServerPort()。

我想要的是在启动webapplication时弄清楚HTTP和HTTPS端口。

这可能吗?我在这个问题上搜索得很好但很难找到任何解决方案。

3 个答案:

答案 0 :(得分:5)

要在运行时访问此配置,一种方法是创建自己的Valve,从ValveBase扩展并在{{1}下的server.xml配置(请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html)中注册它}}。覆盖Engine方法。如果在引擎下注册,则setContainer(Container container)参数应为StandardEngine类型。在此之后,您可以致电container以获取对Service的引用。该服务有一个方法getService()。这将返回一组Connector个实例,反映您的服务的已配置连接器(端点)。通过调用findConnectors(),您可以从中获取配置的端口。

您需要在构建类路径上安装catalina.jar。请注意,这是在服务器启动时调用的,因此如果您以后需要访问它,则必须将端口信息存储在某些全局可用的存储中。

如果您不想在阀门中进行操作,那么事情会变得更脏,因为您必须使用内省并打破现场可见性限制。

这是标准过滤器的示例,用于提取getPort()方法

中的端口信息
init()

它需要commons-lang3(对于FieldUtils类)。

答案 1 :(得分:0)

答案 2 :(得分:-1)

在conf / server.xml中,在Connector配置中。

以下是一个示例,

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" />