您的位置:首页 > 编程语言 > Java开发

JAVA以及JSP中读取XML文件(解析及路径问题)

2016-12-24 17:44 471 查看
    在系统开发过程中,从配置文件中读取配置信息是每一个系统必须具备的功能,例如,我们要配置读取数据库配置信息,包括驱动程序名、连接字符串,用户名,口令等信息,由于这些信息会随着用户的不同而发生改变,所以不能直接把参数写在程序中,将其写入配置文件,然后在应用程序中读取配置信息并加以使用,是一个成熟的MIS系统必须具有的基本功能。
  Java与XML文件,可以说是软件开发的“黄金搭档”,而如何使用JAVA完成对XML文件的读取,是我们首先要解决的问题。
  一、XML文件
  这个示例文件包括了用来打开Oracle数据库的各种参数
    <?xml version="1.0" encoding="UTF-8"?>

<dbmsg>

 <dbinfo>

  <drivername>oracle.jdbc.driver.OracleDriver</drivername>

  <sConnStr>jdbc:oracle:thin:@11.88.225.80:1521:VOUCHERDB</sConnStr>

  <username>SYS AS SYSDBA</username>

  <password>voucherdb</password>

 </dbinfo>

</dbmsg>
二、编写类名为ReadXml的类,用于解析XML文件
  我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的读取,通过查找有关资料,笔者编制了以下程序,用于读取文件名为filename的XML文件。
  package voucher.basic;
import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

public class ReadXml {

 private String drivername;

 private String sConnStr;

 private String username;

 private String password;

  

 public String getDrivername() {

  return drivername;

 }
 public String getSConnStr() {

  return sConnStr;

 }
 public String getUsername() {

  return username;

 }
 public String getPassword() {

  return password;

 }

 public void setDrivername(String drivername) {

  this.drivername = drivername;

 }
 public void setSConnStr(String connStr) {

  sConnStr = connStr;

 }
 public void setUsername(String username) {

  this.username = username;

 }
 public void setPassword(String password) {

  this.password = password;

 }
 public ReadXml(String fileName){

  DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();

  try {

   DocumentBuilder dombuilder=domfac.newDocumentBuilder();

   InputStream is=new FileInputStream(fileName);

   Document doc=dombuilder.parse(is);

   Element root=doc.getDocumentElement();

   NodeList dbinfo=root.getChildNodes();

   if(dbinfo!=null){

    for(int i=0;i<dbinfo.getLength();i++){

     Node db=dbinfo.item(i);

       for(Node node=db.getFirstChild();node!=null;node=node.getNextSibling()){

        if(node.getNodeType()==Node.ELEMENT_NODE){

         if(node.getNodeName().equals("drivername")){

          setDrivername(node.getFirstChild().getNodeValue());

         }

         if(node.getNodeName().equals("sConnStr")){

          setSConnStr(node.getFirstChild().getNodeValue());

         }

         if(node.getNodeName().equals("username")){

          setUsername(node.getFirstChild().getNodeValue());

         }

         if(node.getNodeName().equals("password")){

          setPassword(node.getFirstChild().getNodeValue());

         }

        }

      }         

       }        

     }

  } catch (ParserConfigurationException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  } catch (FileNotFoundException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  } catch (SAXException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  } catch (IOException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }  

 } 

}
 
 
这个以ReadXml命名的类,使用了参数为文件名的构造方法,用户只要将配置文件我名称传递给该方法,就可以完成对XML文件的解析,进而完成对相应参数数的读取。
 
三、如何获取XML文件全路径并读取配置参数
  获取XML文件全路径的方法有两个,一是在servlet中获取,二是在单独的JAVA类中获取。
  1.在servlet中获取XML文件的全路径并读取配置参数
  程序片段String   dirPath = getServletContext().getRealPath( "/WEB-INF"); 

  String fileName = dirPath + "/conn.xml";

  ReadXml xm = new ReadXml(fileName);

  String DriverName = xm.getDrivername();

  String connStr = xm.getSConnStr();

  String user = xm.getUsername();

  String pas = xm.getPassword();

  
  将这段程序添加到servlet中dopost()之后即可完成参数的读取
  2.在单独的JAVA类中获取全路径并读取配置参数
  程序片段
 
String dirpath = System.getProperty("user.dir");

  String  xmlFile = dirpath + "/WebRoot/WEB-INF/conn.xml";

  ReadXml rdxml = new ReadXml(xmlFile);

  String driverName = rdxml.getDrivername();

  String sConnStr = rdxml.getSConnStr();

  String userName = rdxml.getUsername();

  String passWord = rdxml.getPassword();
 
注:配置文件conn.xml保存在webroot/WEB-INF目录中。
以上方法供参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息