在发出任何http或https请求之前,是否可以从Web应用程序的java代码中找到为Tomcat Web服务器配置的HTTP和HTTPS端口。
我在应用程序启动时需要这些信息。我不想等待某人发起HTTP请求并调用getServerPort()。
我想要的是在启动webapplication时弄清楚HTTP和HTTPS端口。
这可能吗?我在这个问题上搜索得很好但很难找到任何解决方案。
答案 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" />