您的位置:首页 > 运维架构 > Tomcat

JSP 自己写的在JSP页面得到文件的服务器路径,并对XML文件进行读写(以对Tomcat的conf目录中的context.xml文件为例)

2017-10-18 00:00 639 查看
得到服务器的文件的绝对路径:

<%!
//获取服务器根目录
String serPath = this.getClass().getResource("/").getPath();
int indTom = serPath.indexOf("Tomcat");
String be = serPath.substring(0,indTom);
//处理后得到context.xml文件的绝对路径
String conf = be + serPath.substring(serPath.indexOf("Tomcat")).substring(0,serPath.substring(serPath.indexOf("Tomcat")).indexOf("/"))
+"/conf/context.xml";
%>
<%
//将路径中符号转变成空格,这样得到的conf就是文件的绝对路径
conf = conf.replaceAll("%20", " ");

%>

完整列子:

<%@ page language="java" import="java.util.*,org.w3c.dom.*,java.io.*" pageEncoding="GBK"%>
<%@ page import="javax.servlet.http.HttpServletRequest,javax.xml.transform.stream.*,
org.w3c.dom.*,javax.xml.transform.*,javax.xml.parsers.*,javax.xml.transform.dom.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%!
//属性项集合
Map att = new HashMap<String, String>();
String userName = "";
String pass = "";
String databaseType = "";
String url = "";
String databaseName = "";

//将修改的内容添加到xml文件中
//
// @param document
// @param filename
// @return
public static boolean doc2XmlFile(Document document, String filename) {
boolean flag = true;
try {
/** 将document中的内容写入文件中 */
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
/** 编码 */
// transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(filename));
transformer.transform(source, result);
} catch (Exception ex) {
flag = false;
ex.printStackTrace();
}
return flag;
}

//读取xml文件
//
// @param filename
// @return
public static Document load(String filename) {
Document document = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new File(filename));
document.normalize();
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}

/**
* 演示修改文件的具体某个节点的值
*/
public static void xmlUpdateDemo() {
Document document = load("c://Message.xml");
Node root = document.getDocumentElement();
/** 如果root有子元素 */
if (root.hasChildNodes()) {
/** ftpnodes */
NodeList ftpnodes = root.getChildNodes();
/** 循环取得ftp所有节点 */
for (int i = 0; i < ftpnodes.getLength(); i++) {
NodeList ftplist = ftpnodes.item(i).getChildNodes();
for (int k = 0; k < ftplist.getLength(); k++) {
Node subnode = ftplist.item(k);
//修改节点的值
if (subnode.getNodeType() == Node.ELEMENT_NODE
&& subnode.getNodeName() == "status") {
subnode.getFirstChild().setNodeValue("1");
}
}

}
}

doc2XmlFile(document, "c://Message.xml");
}

// 演示修改文件的具体某个节点的属性
public static void xmlUpdateDemoAttri() {
Document document = load("c://xx.xml");
Node root = document.getDocumentElement();
/** 如果root有子元素 */
if (root.hasChildNodes()) {

/** ftpnodes 根节点的子节点 */
NodeList ftpnodes = root.getChildNodes();
/** 循环取得第一层子节点所有节点 */
for (int i = 0; i < ftpnodes.getLength(); i++) {
Node subnode = ftpnodes.item(i);
//添加或修改某节点的属性配置
if ("Resource".equals(subnode.getNodeName())) {
// 生成一个属性对象
Attr attr = document.createAttribute("ss");
attr.setValue("ssss");
subnode.getAttributes().setNamedItem(attr);
}
}
}

// 将修改的内容添加到xml文件中
doc2XmlFile(document, "c://xx.xml");
}

//添加新的节点
// 根节点下没有节点的话直接添加
// 根节点下没有重名的直接添加
// 有重名的节点则更新节点属性
// @param nodeName 添加、更新的节点名
// @param attr 属性集合
public static void xmlAddDemoAttri(String filePath,String nodeName,Map<String, String> attr) {
Document document = load(filePath);
Node root = document.getDocumentElement();
//创建节点元素,并命名
Element element =document.createElement(nodeName);
//向节点中添加属性
for (Object key : attr.keySet().toArray()) {
element.setAttribute(key.toString(), attr.get(key));
}
//找到根节点
NodeList nodeList = document.getElementsByTagName("Context");
//先判断根节点下有没有子节点,没有的话直接添加
Node rootNode = nodeList.item(0);
if(!root.hasChildNodes()){
nodeList.item(0).appendChild(element);
}else{
//如果有重复的节点,flag=true;
boolean flag = false;
NodeList rootChs = rootNode.getChildNodes();
//循环根节点下的所有子节点
for (int i = 0; i < rootChs.getLength(); i++) {
Node node = rootChs.item(i);
//如果没有重名,并且是最后一个节点的就添加
if(!nodeName.equals(node.getNodeName()) && !flag && (i+1) == rootChs.getLength()){
nodeList.item(0).appendChild(element);
}else if(nodeName.equals(node.getNodeName())){
//有重名的就看name属性,name一样就修改属性
if(node.hasAttributes()){
//如果有属性项,判断name属性值,如果name的值相同,则修改其他属性
if(null != node.getAttributes().getNamedItem("name") && attr.get("name").equals(node.getAttributes().getNamedItem("name").getNodeValue())){
// 生成一个属性对象
Attr chAttr = null;
//向节点中添加属性
for (Object key : attr.keySet().toArray()) {
//不更新name属性
if(!"name".equals(key.toString())){
chAttr = document.createAttribute(key.toString());
chAttr.setValue(attr.get(key));
}
}
node.getAttributes().setNamedItem(chAttr);
}else if(null != node.getAttributes().getNamedItem("name") && !attr.get("name").equals(node.getAttributes().getNamedItem("name").getNodeValue()) && !flag && (i+1) == rootChs.getLength()){
//如果name的值不相同,且都没有相同的节点,添加新的节点
System.out.println(attr.get("name"));
System.out.println(node.getAttributes().getNamedItem("name").getNodeValue());
nodeList.item(0).appendChild(element);
}
}
}
}
}
// 将修改的内容添加到xml文件中
doc2XmlFile(document, filePath);
}
%>
<%!
//获取服务器根目录
String serPath = this.getClass().getResource("/").getPath();
int indTom = serPath.indexOf("Tomcat");
String be = serPath.substring(0,indTom);
//处理后得到context.xml文件的绝对路径
String conf = be + serPath.substring(serPath.indexOf("Tomcat")).substring(0,serPath.substring(serPath.indexOf("Tomcat")).indexOf("/"))
+"/conf/context.xml";
%>
<%
//将路径中符号转变成空格
conf = conf.replaceAll("%20", " ");
//添加属性项
userName = request.getParameter("userName");
url = request.getParameter("url");
pass = request.getParameter("pass");
databaseType = request.getParameter("databaseType");
databaseName = request.getParameter("databaseName");

//如果是SqlServer的修改
att.put("username", userName);
att.put("password", pass);
att.put("name", "jdbc/sqlserver-database");
att.put("url", url+":1433;databaseName="+databaseName+";SelectMethod=cursor");
att.put("type", "javax.sql.DataSource");
att.put("driverClassName", "net.sourceforge.jtds.jdbc.Driver");
att.put("maxIdle", "5");
att.put("maxWait", "5000");
att.put("maxActive", "100");
try{
xmlAddDemoAttri(conf ,"Resource",att);
}catch(Exception e){
}finally{
%>
<mce:script type="text/javascript"><!--
alert("配置完成,请重启Tomcat服务!");
window.close();

// --></mce:script>
<%
}
%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐