解析xml----Digester

       最近看到了一个项目解析xml的方式,觉得也不错,测试下跟大家分享下!眼下解析xml的方式很多,这里不提了!只谈谈digester的使用,浅谈吧!希望以后你们遇到了能有点帮助吧!

 

       首先在使用Digester解析xml时要导入2个jar包,有的人说是4个,我认为2个就够了,可能有其它的功能实现吧!不说了

2个jar包分别是commons-beanutils.jar 、commons-digester.jar,你们自己去下!

以下没有任何目的,纯属测试用:

 

1,首先建立一个web项目(我是为了方便直接建立了web项目)将三个jar包导入进来,再建立一个xml文件名字自己起,我这里叫database.xml

<?xml version="1.0" encoding="UTF-8"?>
<database>
    <user userName="admin"
              password="admin"
    >
   </user>
</database>

 

2,为之建立一个javabean,属性必须和xml中的user节点的属性一致(是不是必须没有做测试)

public class UserBean {
 
 private String userName;
 private String password;
 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;
 }
 
}

3,创建一个servlet类,我这里的名字叫UserDatabaseServlet,自己决定!为了做测试所以写的不严谨!

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.util.Hashtable;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.digester.Digester;

 

public class UserDatabaseServlet extends HttpServlet {
 private Hashtable database = null;
 private String pathname = "/WEB-INF/database.xml";
 
 public void init() throws ServletException{
  String value;
  value = getServletConfig().getInitParameter("pathnamexml");
  if(value !=null){
   pathname = value;
  }
  try {
   load();
   getServletContext().setAttribute("database",database);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public void addUser(UserBean user){
  database.put(user.getUserName(), user);
 }
 private synchronized void load() throws Exception{
  
  database = new Hashtable();
  InputStream is = getServletContext().getResourceAsStream(pathname);
  
  BufferedInputStream bis = new BufferedInputStream(is);
  
  Digester digester = new Digester(); //创建Digester对象
  digester.push(this); //并将digester对象压入到堆栈中
  digester.setValidating(false); //不进行xml与相应的dtd验证

  //对user节点注入对象创建规则,当sax的事件遇到user节点的时候创建UserBean的实例,并压入到堆栈中!
  digester.addObjectCreate("database/user", "com.wenhua.test.UserBean");

 //对user节点属性调用UserBean的set方法,这里分别为setUserName/setPassword
  digester.addSetProperties("database/user"); 

 //调用addUser方法,将设置好的javabean放入到Hashtable中

  digester.addSetNext("database/user", "addUser");
  digester.parse(bis);//解析xml
  bis.close();
 }
}

4,配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
   <servlet-name>userdatabase</servlet-name>
   <servlet-class>com.wenhua.test.UserDatabaseServlet</servlet-class>
   <init-param>
    <param-name>pathnamexml</param-name>
    <param-value>/WEB-INF/database.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup><!--在服务器启动时就加载/WEB-INF/database.xml    你们可以不写然后测试下看看-->
  </servlet>
   
  <!-- 测试servlet -->
  <servlet>
   <servlet-name>test</servlet-name>
   <servlet-class>com.wenhua.test.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>test</servlet-name>
   <url-pattern>/test</url-pattern>
  </servlet-mapping>
</web-app>


 5,写个测试类servlet  测试下能不能拿到userName password

mport java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

 /**
  * The doGet method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to get.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out
    .println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
  out.println("<HTML>");
  out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  out.println("  <BODY>");
   Hashtable database = (Hashtable) getServletContext().getAttribute("database");
   UserBean  user = new UserBean();

//遍历hashtable
   for   (Iterator   it   =   database.keySet().iterator(); it.hasNext();   )   {  
            String   key   =   (String)   it.next();  
            user   =(UserBean)   database.get(key);  
    }
   
  out.println("userName: "+user.getUserName()+"     "+"passWord: "+user.getPassword());
  out.println("  </BODY>");
  out.println("</HTML>");
  out.flush();
  out.close();
 }

 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to post.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request,response);
 }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值