在Tomcat中,我的servlet如何确定配置了哪些连接器?

时间:2020-03-05 18:54:13  来源:igfitidea点击:

在Tomcat 5.5中,server.xml可以具有许多连接器,通常仅端口8080,但是对于我的应用程序,用户可以将其servlet.xml配置为还打开其他端口(例如8081-8088)。我希望我的Servlet找出将启用哪些套接字连接端口(在Servlet.init()期间tomcat尚未启动连接器。)

我可以自己找到并解析server.xml(很糟糕),我可以查看线程名称(tomcat启动后,但是我怎么知道什么时候是这样做的好时机?),但是我更喜欢可以执行的解决方案。在我的servlet.init()中,确定什么是有效的端口范围。有任何想法吗?对于我的应用程序来说,可以将解决方案紧密绑定到Tomcat。

解决方案

回答

在Tomcat 6.0中,它应该类似于:

org.apache.catalina.ServerFactory.getServer().getServices

获得服务。之后,我们可以使用

Service.findConnectors

它返回一个最终具有方法的连接器

Connector.getPort

有关详细信息,请参见JavaDocs。

回答

为什么?

如果我们在页面生成期间需要图像或者CSS文件URL,那么ServletRequest.getLocalPort()或者整个服务器上的HttpServletRequest.getContextPath()有什么问题?

回答

无论我们打算做什么,我都不会走上雄猫特有的道路。

如果我们确实需要查找其他端口,请通过通常的配置方法将它们配置到Web应用程序,例如指定值。我们不会有任何自动发现,但是在雄猫的下一次更新中它也不会中断。

更具体地说,我会说我相信我们提出的问题是错误的。例如。我们有自己的要求,选择了一种解决方案,并询问如何实施此解决方案。我相信,如果我们提出了第一手要求并为此寻求解决方案,将会得到更好的答案。