單列+JDom+XML

          Posted on 2008-10-17 14:50 橡皮人 閱讀(240) 評論(0)  編輯  收藏
            使用JDom做一個數據屏蔽的例子
           
            XML代碼如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <sys-info>
              
          <sqlinfo>
                  
          <driver>com.mysql.jdbc.Driver</driver>
                  
          <url>jdbc:mysql://localhost:3306/address</url>
                  
          <username>root</username>
                  
          <password>nicholas</password>
              
          </sqlinfo>
              
          <programeinfo>
                  
          <beans>
                      
          <bean id="com.nicholas.inter.IUserDAO" class="com.nicholas.inter.imple.UserDAO"/>
                  
          </beans>
              
          </programeinfo>
          </sys-info>
          其中bean的信息使用屬性來封裝,這樣做比多個XML對象要靈活一些,我的意圖是用Util下的Map裝載這些信息,實現父類引用指向子類對象。

          寫一個JDBC訪問對象的Bean
          public class SysInfo {

              
          private String driver;
              
          private String url;
              
          private String username;
              
          private String password;

              
          public SysInfo() {
              }

              
          public String getDriver() {
                  
          return driver;
              }

              
          public void setDriver(String driver) {
                  
          this.driver = driver;
              }

              
          public String getUrl() {
                  
          return url;
              }

              
          public void setUrl(String url) {
                  
          this.url = url;
              }

              
          public String getUsername() {
                  
          return username;
              }

              
          public void setUsername(String username) {
                  
          this.username = username;
              }

              
          public String getPassword() {
                  
          return password;
              }

              
          public void setPassword(String password) {
                  
          this.password = password;
              }
          }


          現在開始使用JDom解析XML的數據


          public class ParseMessage {

              SAXBuilder builder 
          = null;
              Document doc 
          = null;
              Element el_root 
          = null;
                  
          //創(chuàng)建單列模式
              private static ParseMessage instance;

              
          private ParseMessage() {
                  builder 
          = new SAXBuilder();
                  
          try {
                      doc 
          = builder.build("config.xml");
                      el_root 
          = doc.getRootElement();
                  } 
          catch (JDOMException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (IOException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }

              
          public static ParseMessage getInstance() {

                  
          if (instance == null) {

                      instance 
          = new ParseMessage();

                  }
                  
          return instance;

              }

              
          public SysInfo getSysInfo() {
                  SysInfo si 
          = null;
                  
          try {
                      Element el_driver 
          = (Element) 

          XPath.selectSingleNode(el_root,
                              
          "//driver");
                      Element el_url 
          = (Element) 

          XPath.selectSingleNode(el_root, 
          "//url");
                      Element el_username 
          = (Element) 

          XPath.selectSingleNode(el_root,
                              
          "//username");
                      Element el_password 
          = (Element) 

          XPath.selectSingleNode(el_root,
                              
          "//password");
                      String driver 
          = el_driver.getText();
                      String url 
          = el_url.getText();
                      String username 
          = el_username.getText();
                      String password 
          = el_password.getText();
                      si 
          = new SysInfo();
                      si.setDriver(driver);
                      si.setUrl(url);
                      si.setUsername(username);
                      si.setPassword(password);
                  } 
          catch (JDOMException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  
          return si;

              }

              
          public Map initBeans() {
                  List list 
          = null;
                  Map map 
          = new HashMap();
                  
          try {
                      list 
          = XPath.selectNodes(el_root, "//bean");
                  } 
          catch (JDOMException e) {
                      
                      e.printStackTrace();
                  }
                  
          int index = list.size();
                  
          for (int i = 0; i < index; i++) {
                      Element el_parameter 
          = (Element) list.get(i);
                      Attribute att_inter 
          = 

          el_parameter.getAttribute(
          "id");
                      Attribute att_imple 
          = 

          el_parameter.getAttribute(
          "class");
                      String inter 
          = att_inter.getValue();
                      String imple 
          = att_imple.getValue();
                      map.put(inter, imple);
                  }
                  
          return map;

              }
              
              
          public UserDAO getUserDAO(Class c) {
                  UserDAO userdao
          =null//用戶數據訪問層
                  Map map=this.initBeans();
                  
          try {
                      userdao
          =(UserDAO)Class.forName(map.get

          (c.getName()).toString()).newInstance();
                  } 
          catch (InstantiationException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (IllegalAccessException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (ClassNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  
          return userdao;
                  
              }

          }


          DB層依靠ParseMessage類解析出來的數據獲得Driver等等

              static SysInfo si=ParseMessage.getInstance().getSysInfo();
              
          public static Connection getConn() throws Exception {
                  
          //1 裝驅動
                  Class.forName(si.getDriver());
                  Connection conn 
          = DriverManager.getConnection(si.getUrl(), si.getUsername(), si.getPassword());
                  
          return conn;
              }

          Servlet依靠JSP頁面?zhèn)鬟f過來的Username Password進行判斷

          response.setContentType("text/html;charset=gbk");
                  String username
          =request.getParameter("username");
                  String password
          =request.getParameter("password");
                  User user
          =new User(); //User bean
                  user.setUsername(username);
                  user.setPassword(password);
                  UserDAO userdao
          =ParseMessage.getInstance().getUserDAO

          (IUserDAO.
          class); //傳遞UserDAO父接口
                  if(userdao.isRight(user)) {
                      
                      System.out.println(
          "登錄成功!");
                  } 
          else {
                      System.out.println(
          "登錄失敗!");
                      
                  }

          其中應該注意的是XML的路徑問題,使用Tomcat配置項目的時候并沒有把XML文件導入到項目的子文件中,根據需要可以把XMl文件放到SRC中,修改ParseMessage中的路徑即可,因為是寫小例子,我直接把XML文件放到Tomcat目錄下的Bin文件夾中,Tomcat默認會查找Bin文件夾。

          初次寫Java單列和JDom,剛寫的時候非常不習慣,但是要達到屏蔽數據的效果,可以考慮使用。


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           

          posts - 28, comments - 5, trackbacks - 0, articles - 0

          Copyright © 橡皮人

          主站蜘蛛池模板: 雷山县| 横山县| 开平市| 石家庄市| 班戈县| 多伦县| 乐山市| 靖边县| 图片| 昌都县| 刚察县| 吴忠市| 杭州市| 天门市| 常熟市| 巴彦淖尔市| 仪征市| 嘉善县| 开原市| 平谷区| 贺州市| 定兴县| 盈江县| 栖霞市| 孟连| 浙江省| 子洲县| 满洲里市| 盐城市| 平南县| 尚义县| 福建省| 株洲县| 慈溪市| 广饶县| 闽侯县| 新干县| 西华县| 广元市| 康马县| 合山市|