text.xml内容如下
<database>
<user id="1">
<userName>adcde</userName>
<password>12345</password>
</user>
<user id="2">
<userName>dfghjh</userName>
<password>23654</password>
</user>
</database>
测试用TestServlet.java
package addressbook;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.util.Hashtable;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.digester.Digester;
import addressbook.model.UserBean;
public final class TestServlet extends HttpServlet {
private static final long serialVersionUID = 4991770529524308513L;
private Hashtable<String, UserBean> database = null;
private int debug = 0;
private String pathname = "/WEB-INF/test.xml";
public int getDebug() {
return (this.debug);
}
public void addUser(UserBean user) {
System.out.println("user.id="+user.getId());
System.out.println("user.name="+user.getUserName());
System.out.println("user.pass="+user.getPassword());
database.put(user.getUserName(), user);
}
public void init() throws ServletException {
String value;
value = getServletConfig().getInitParameter("debug");
try {
debug = Integer.parseInt(value);
} catch (Throwable t) {
debug = 0;
}
if (debug >= 1)
log("Initializing database servlet");
value = getServletConfig().getInitParameter("pathname");
if (value != null)
pathname = value;
try {
load();
getServletContext().setAttribute(Constants.DATABASE_KEY, database);
} catch (Exception e) {
log("Database load exception", e);
throw new UnavailableException("Cannot load database from '"
+ pathname + "'" + e.getMessage());
}
}
private synchronized void load() throws Exception {
database = new Hashtable<String, UserBean>();
InputStream is = getServletContext().getResourceAsStream(pathname);
BufferedInputStream bis = new BufferedInputStream(is);
Digester digester = new Digester();
digester.push(this);
//不进行XML与相应的DTD的合法性验证
digester.setValidating(false);
//当遇到<user>时创建一个addressbook.model.UserBean对象
digester.addObjectCreate("database/user", "addressbook.model.UserBean");
digester.addSetProperties("database/user","id","id"); //设置attribute (id)
digester.addBeanPropertySetter("database/user/userName","userName"); //设置bean property (userName)
digester.addBeanPropertySetter("database/user/password", "password"); //设置bean property (password)
digester.addSetNext("database/user","addUser");// 调用addUser方法,将设置好的javabean放入hashtable中
digester.parse(bis);//进行解析
}
public void destroy() {
getServletContext().removeAttribute(Constants.DATABASE_KEY);
}
}
UserBean.java
package addressbook.model;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Hashtable;
public final class UserBean implements Serializable {
private String id = null;
private String password = null;
private String userName = null;
// Getter/Setter methods for all defined properties
public String getPassword() {
return (password);
}
public String getUserName() {
return (userName);
}
public void setPassword(String password) {
this.password = password;
}
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
为了在web容器加载web应用时就被加载并初始化,要在web.xml中进行如下配置
web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Struts Application AddressBook</display-name>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>addressbook.TestServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>pathname</param-name>
<param-value>/WEB-INF/test.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
执行结果
user.id=1
user.name=abcde
user.pass=12345
user.id=2
user.name=dfghjh
user.pass=23654
以下为转载
http://blog.csdn.net/zerowzj/archive/2008/04/29/2343466.aspx
< page id ="VSD_WI003" >
< description > 标准文档列表 </ description >
< helpurl > standarddoc/workitem/SortWorkItemList.htm </ helpurl >
< crumb level ="0" >
< name > 标准文档 </ name >
</ crumb >
< crumb level ="1" >
< name > 文档编制 </ name >
< url > /standarddoc/WorkItemIndexAction.do </ url >
< target > mainWorkFrame </ target >
</ crumb >
< crumb level ="2" >
< name > 文档列表 </ name >
</ crumb >
</ page >
</ views >
Digester digester = new Digester();
Logger logger = Toolkit.getInstance().getLogger(this.getClass().getName());
public ViewConfig parse(InputStream input) {
ViewConfig config = null;
//不进行XML与相应的DTD的合法性验证
digester.setValidating(false);
//当遇到<views>时创建一个ViewConfig对象
digester.addObjectCreate("views", ViewConfig.class);
//当遇到<page>时创建一个PageConfig对象
digester.addObjectCreate("views/page", PageConfig.class);
//设置attribute
digester.addSetProperties("views/page", "id", "id");
digester.addSetProperties("views/page", "file", "file");
digester.addSetProperties("views/page", "path", "path");
//设置bean property
digester.addBeanPropertySetter("views/page/description", "description");
digester.addBeanPropertySetter("views/page/helpurl", "helpurl");
//当遇到<crumb>时创建一个CrumbConfig对象
digester.addObjectCreate("views/page/crumb", CrumbConfig.class);
//设置attribute
digester.addSetProperties("views/page/crumb", "level", "level");
//设置bean property
digester.addBeanPropertySetter("views/page/crumb/url", "url");
digester.addBeanPropertySetter("views/page/crumb/name", "name");
digester.addBeanPropertySetter("views/page/crumb/target", "target");
//这里的addCrumbConfig是调用父接点对象的方法名,这里是PageConfig
digester.addSetNext("views/page/crumb", "addCrumbConfig");
//这里的addPageConfig是调用父接点对象的方法名,这里是ViewConfig
digester.addSetNext("views/page", "addPageConfig");
try {
config = (ViewConfig)digester.parse(input);
} catch(SAXException ex) {
logger.error(ex.getMessage(), ex);
} catch(IOException ex) {
logger.error(ex.getMessage(), ex);
}
return config;
}