Tomcat配置文件操作,加载配置文件,获取一个HTTPS端口号。仅供参考。
代码如下:
ServerXmlUtils.loadServerXml(tomcatConfPath + "/server.xml");
String tomcatHttpsPort = ServerXmlUtils.getAnHTTPSPort();
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
/**
* Tomcat配置文件操作
* @author
* @date
*/
public class ServerXmlUtils {
private static NodeList childNodes;
private static Element serviceItem;
private static Document doc;
private static File file;
/**
* 加载配置文件
* @param serverXmlFileName
* @throws Exception
*/
public static void loadServerXml(String serverXmlFileName) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setIgnoringElementContentWhitespace(true);
file = new File(serverXmlFileName);
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(file);
//获取根root模块
Element root = doc.getDocumentElement();
NodeList service = root.getElementsByTagName("Service");
//获取Service模块
serviceItem = (Element) service.item(0);
//获取Service子Nodes
childNodes = serviceItem.getChildNodes();
}
/**
* 获取一个HTTPS端口号
* @return String
*/
public static String getAnHTTPSPort(){
for (int i = 0; i < childNodes.getLength(); i++) {
Node item = childNodes.item(i);
String nodeName = childNodes.item(i).getNodeName();
//当遍历到Service的Connector时
if ("Connector".equalsIgnoreCase(nodeName)) {
Element element = (Element) item;
String clientAuth = element.getAttribute("clientAuth");
String sslEnabled = element.getAttribute("SSLEnabled");
// logger.debug("clientAuth:[{}] SSLEnabled:[{}] SSLEnabled:[{}] ",clientAuth,sslEnabled,element.getAttribute("port"));
if ("true".equalsIgnoreCase(sslEnabled)) {
if("".equals(clientAuth) || "false".equalsIgnoreCase(clientAuth)){
return element.getAttribute("port");
}
}
} else {
continue;
}
}
return null;
}
}