一尘不染

在没有请求的情况下从tomcat获取服务器端口号

tomcat

是否有可用的Tomcat API或配置可以告诉应用程序(可能在启动时)在没有请求的情况下在哪个端口上运行?

想象一个场景,其中有两个Web应用程序在同一个Tomcat中运行,并且其中一个需要从另一个中调用Web服务。我们不希望该请求离开Tomcat(如果您使用Apache服务器名称或绝对URL,则该请求将发出并再次返回,并且可以转到任何实例)并再次进入。为此,我知道机器名称,但无法获取端口号。我知道我可以对这些信息进行硬编码,但是我不想这样做,因为我希望我的war文件与应用服务器无关。

我知道,如果我们有HTTPServletRequest,就可以找到它

这仅适用于Tomcat 6,不适用于Tomcat 7


阅读 306

收藏
2020-06-16

共1个答案

一尘不染

对于任何对我们如何解决此问题感兴趣的人,这里是模拟代码

Server server = ServerFactory.getServer();
        Service[] services = server.findServices();
        for (Service service : services) {
            for (Connector connector : service.findConnectors()) {
                ProtocolHandler protocolHandler = connector.getProtocolHandler();
                if (protocolHandler instanceof Http11Protocol
                    || protocolHandler instanceof Http11AprProtocol
                    || protocolHandler instanceof Http11NioProtocol) {
                    serverPort = connector.getPort();
                    System.out.println("HTTP Port: " + connector.getPort());
                }
            }


        }
2020-06-16