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

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

2012-08-20 10:12 761 查看
得到服务器的文件的绝对路径:

<%!

//获取服务器根目录

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>

<%

}

%>

转自:http://blog.csdn.net/songylwq/article/details/5771893
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐