gpt4 book ai didi

java - 如何在运行时从 Java 代码中获取 server.xml 中配置的 HTTP 和 HTTPS 端口号

转载 作者:行者123 更新时间:2023-11-28 22:37:29 25 4
gpt4 key购买 nike

在我们的项目中,我们使用 Apache CXF 框架实现了 SOAP 网络服务。客户端过去常常请求服务器执行某些命令。请求由主机、端口和用于连接的协议(protocol)组成。如果客户端使用 HTTPS 配置的端口号并将协议(protocol)指定为 HTTP,那么我们会收到连接拒绝 - 套接字异常。但是,我需要抛出一条正确的错误消息,例如“无法使用 http 协议(protocol)连接到端口为“ABC”的主机“XYZ””。为此,我需要在运行时从 tomcat server.xml 文件中获取配置的 http 和 https 端口号,然后将其与我的请求参数进行比较。

有人帮我找回吗?

最佳答案

您始终可以解析 tomcat 的 server.xml 文件并获取端口值:

  public static Integer getTomcatPortFromConfigXml(File serverXml) {
Integer port;
try {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(serverXml);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile
("/Server/Service[@name='Catalina']/Connector[count(@scheme)=0]/@port[1]");
String result = (String) expr.evaluate(doc, XPathConstants.STRING);
port = result != null && result.length() > 0 ? Integer.valueOf(result) : null;
} catch (Exception e) {
port = null;
}
return port;
}

以上代码应该让您从 server.xml 获取 HTTP 端口。对于 HTTPS 端口,必须将 XPathExpression 修改为

XPathExpression expr = xpath.compile
("/Server/Service[@name='Catalina']/Connector[@scheme='https']/@port[1]");

请注意,上面的代码片段是基于 server.xml 是标准 tomcat 的服务器文件的假设,其中服务名称定义为“Catalina”。以下是一个标准的 server.xml 文件:

<Server>
<Service name="Catalina">
<Connector port="8080">
#...
</Connector>
</Service>
</Server>

引用:Code link

关于java - 如何在运行时从 Java 代码中获取 server.xml 中配置的 HTTP 和 HTTPS 端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com