我需要知道我的 java webapp 在 webapp 启动时运行的 HTTP 和 HTTPS 端口
在发生任何 http 或 https 请求之前,是否可以从 Web 应用程序的 java 代码中找出为 Tomcat Web 服务器配置的 HTTP 和 HTTPS 端口。
我需要有关应用程序启动的这些信息。我不想等待有人发起 HTTP 请求并调用 getServerPort()。
我想要的是在 Web 应用程序启动时找出 HTTP 和 HTTPS 端口。
这可能吗?我对这个问题进行了很好的搜索,但几乎找不到任何解决方案。
Is it possible to find out the HTTP and HTTPS ports configured for a Tomcat webserver from the web application's java code before any http or https requests take place.
I need this information on application startup. I don't want to wait for someone to initiate an HTTP request and call getServerPort().
What I want is to figure out HTTP and HTTPS ports on startup of the webapplication.
Is this possible? I searched very well on this problem but hardly found any solutions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要在运行时访问此配置,一种方法是创建自己的 Valve,从
ValveBase
并将其注册到 server.xml 配置中(请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/valve .html)在您的引擎
下。重写setContainer(Container container)
方法。如果在引擎下注册,container
参数的类型应为StandardEngine
。由此,您可以调用getService()
来获取对服务
。该服务有一个方法findConnectors()
。返回一个Connector 数组
实例,反映为您的服务配置的连接器(端点)。从它们中,您可以通过调用 getPort() 来获取配置的端口。您需要在构建类路径中包含 catalina.jar。请注意,这是在服务器启动时调用的,因此如果稍后需要访问端口信息,则必须将端口信息存储在某些全局可用的存储中。
如果您不想在阀门中执行此操作,事情会变得有点脏,因为您必须使用内省并打破字段可见性遏制。
这是在
init()
方法中提取端口信息的标准过滤器示例。它需要 commons-lang3(对于 FieldUtils 类)。
To get access to this configuration at runtime, one way is to create your own Valve, extended from
ValveBase
and register it in the server.xml configuration (see http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html) under yourEngine
. Override thesetContainer(Container container)
method. If registered under the Engine, thecontainer
parameter should be of typeStandardEngine
. From that, you can callgetService()
to get a reference to theService
. The service has a methodfindConnectors()
. That returns an array ofConnector
instances, reflecting the configured connectors (endpoints) for your service. From them, you can get the configured port by callinggetPort()
.You will need to have catalina.jar on your build classpath. Note, this is invoked at server startup so you'll have to store the port information in some globally available storage if you need access to it later.
If you don't want to do it in a valve, things get a bit dirtier as you'll have to use introspection and break field visibility containment.
This is a sample of a standard filter that extracts port information in the
init()
methodIt requires commons-lang3 (for the FieldUtils class).
您提到过吗: http://tomcat.apache.org/tomcat-4.0 -doc/config/ajp.html
have you referred : http://tomcat.apache.org/tomcat-4.0-doc/config/ajp.html
在conf/server.xml 中的连接器配置中。
这是一个样本,
In the conf/server.xml, in the Connector configuration.
Here is a sample,