这是我写的一个DOM4J的小例子,基本实现了增加,删除,修改等功能.希望能帮助初学者.里面的代码基本每一句都有解释.如果不清楚,G一下应该也知道,如果不清楚.可以留言给我.
ps:希望牛人不要丢瓶.
我是用STRUTS 1 做的,本来想用javabean,但是太麻烦了.里面可能有些错别字,呵呵。。希望读者理解.废话不多说.下面是代码.
分三个部分.
我的XML文件是放在根目录下的/xml下面的:
----这是我的wep.XML:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
这是我的struts配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="Plecar" type="com.Domj4.Plecar"></form-bean>
</form-beans>
<action-mappings>
<action path="/PlecarToXml"
type="com.Domj4.PlecarToXml"
scope="request"
name="Plecar"
>
<forward name="write" path="/PlecarQueryXml.do"></forward>
</action>
<action path="/PlecarQueryXml"
type="com.Domj4.PlecarQueryXml"
scope="request"
name="Plecar"
>
<forward name="query" path="/ShowThePlecar.jsp"></forward>
</action>
<action path="/PlecarModifyQueryXml"
type="com.Domj4.PlecarModifyQueryXml"
scope="request"
name="Plecar"
>
<forward name="modify" path="/Modify.jsp"></forward>
</action>
<action path="/PlecarModifyXml"
type="com.Domj4.PlecarModifyXml"
scope="request"
name="Plecar"
>
<forward name="index" path="/PlecarQueryXml.do"></forward>
</action>
<action path="/PlecarDeleteXml"
type="com.Domj4.PlecarDeleteXml"
scope="request"
name="Plecar"
>
<forward name="delete" path="/PlecarQueryXml.do"></forward>
</action>
<action path="/deleteAll"
type="com.Domj4.deleteAll"
scope="request"
name="Plecar"
>
<forward name="ShowDeleteAllAfter" path="/PlecarQueryXml.do"></forward>
</action>
</action-mappings>
</struts-config>
下面是简单的页面:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<div align="center" style="border: 4px dotted #ddd;">
<form action="PlecarToXml.do" method="post">
标题:<input name="title" type="text"><br/>
内容:<textarea rows="20" cols="20" name="content"></textarea>
<input type="submit" value="TO XML">
<input type="reset" value="Reset">
</form>
</div>
</body>
</html>
Modify.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<center>
<div style="width: 400px; height: 400px; border: 3px dashed #ddd;">
<form action="PlecarModifyXml.do" method="post">
<c:set var="form" value="${plecarContent}"/>
标题:<input name="title" type="text" value="${plecarContent.title}"/><br/>
<input name="id" value="${plecarContent.id }" type="hidden"/><br/>
内容:<textarea name="content" cols="58" rows="8">${plecarContent.content }</textarea><br/>
<input type="submit" value="保存"><input type="reset" value="重置"/>
<a οnclick="history.back(-1)">返回</a>
</form>
</div>
</center>
</body>
</html>
ShowThePlecar.jsp:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<div style="border: 3px dotted #ddd; width: 420px; height: 400px;">
[${description }]${createDate }
<c:if test="${rssContent==null}">
<tr></tr>
<td height="27" colspan="3" align="center" bgcolor="#fff">暂时没有公告.</td>
<tr></tr>
</c:if>
<br>
<tr align="center" style="padding: 10px; width:140px" ><th height="27" width="140px">标题</th><th height="27" width="140px">修改</th><th height="27" width="140px">删除</th></tr>
<br/>
<c:forEach items="${rssContent}" var="form">
<tr>
<td height="27" width="140" bgcolor="#fff"> ${form.title }</td>
<td align="center" bgcolor="#fff" width="140" >
<html:link action="PlecarModifyQueryXml.do?id=${form.id}">修改</html:link>
</td>
<td height="27" bgcolor="#fff" width="140" ></td>
<td align="center" bgcolor="#fff" width="140" >
<html:link action="PlecarDeleteXml.do?id=${form.id}">删除</html:link>
</td>
</tr>
</c:forEach>
</div>
<div>
<c:if test="${rssContent!=null}">
<tr></tr>
<td height="27" colspan="3" align="center" bgcolor="#fff"><a href="deleteAll.do">删除全部公告</a></td>
<tr></tr>
</c:if>
<c:if test="${deleteAllOk!=null}"><script>alert("${deleteAllOk}");</script></c:if>
<c:if test="${deleteSuccess!=null}"><script>alert("${deleteSuccess}");</script></c:if>
<c:if test="${modifySuccess!=null}"><script>alert("${modifySuccess}");</script></c:if>
</div>
</body>
</html>
我先贴上actionForm:
1:这是个实例,因为只有一个,所有就没有单独放在一个包里了.
package com.Domj4;
import org.apache.struts.action.ActionForm;
public class Plecar extends ActionForm{
private int id;
private String pubDate;
private String title;
private String content;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the pubDate
*/
public String getPubDate() {
return pubDate;
}
/**
* @param pubDate the pubDate to set
*/
public void setPubDate(String pubDate) {
this.pubDate = pubDate;
}
/**
* @return the title
*/
public String getTitle() {
return title;
}
/**
* @param title the title to set
*/
public void setTitle(String title) {
this.title = title;
}
/**
* @return the content
*/
public String getContent() {
return content;
}
/**
* @param content the content to set
*/
public void setContent(String content) {
this.content = content;
}
}
2:这是创建和添加信息的action:
package com.Domj4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class PlecarToXml extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=GBK");
String url = request.getRealPath("/xml/plecar.xml");//拿到文件的相对路径.
File file = new File(url);
String title = new String(request.getParameter("title").getBytes("iso-8859-1"),"gbk");//拿到公告的标题.
String content = new String(request.getParameter("content").getBytes("iso-8859-1"),"gbk");//拿到公告的内容.
System.out.println(content);
Document document = null;
Element plecar = null;
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");//设置日期的格式.
if(!file.exists()) {//判断文件是不是存在.如果不存在就创建一个文件.
document = DocumentHelper.createDocument();//创建XML文档对象.
plecar = DocumentHelper.createElement("plecar");//创建普通节点.
document.setRootElement(plecar);//将plecar设置为根节点.
plecar.addAttribute("version","2.0");//为根节点设置属性.
Element description = plecar.addElement("description");//添加description子节点.
description.setText("公告栏");
Element createTime = plecar.addElement("createTime");//添加createTime子节点.
createTime.setText("创建于:"+df.format(new Date()));
}
else {//如果存在该文件.
SAXReader reader = new SAXReader();//实例化读取对象.
try {
document = reader.read(new File(url));//获取xml文件对应的xml文档对象.
plecar = document.getRootElement();//获取根节点.
}catch (DocumentException e) {
System.out.println("xml文件读取失败!");
}
}
/***********************添加公告信息*****************************/
String id =String.valueOf(plecar.elements("info").size()+1); //获取当前公告的ID号.
Element info = plecar.addElement("info");//添加info节点.
info.addAttribute("id", id);//为info添加属性.
Element title_info = info.addElement("title");//添加tilte节点.
title_info.addText(title);//添加title内容.
Element into_content = info.addElement("content");//添加into_content子节点.
into_content.addCDATA(content);//添加内容.
Element pubDate = info.addElement("pubDate");//添加pubDate子节点.
df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期的格式.
pubDate.setText(df.format(new Date()));
/***********************保存文件*****************************/
//创建outputformat对象.
OutputFormat format = OutputFormat.createPrettyPrint();//设置文件存入的格式.
format.setEncoding("GBK");//设置写入数据的格式编码.
try {
XMLWriter writer = new XMLWriter(new FileWriter(url),format);//拿到想要输入的文件,按照一定的格式写入.
writer.write(document);//向流写入数据.
writer.close();//关闭流.
}catch (IOException e) {
System.out.println("将数据写入文件出现错误.");
}
return mapping.findForward("write");
}
}
3:这是查询显示到页面的action:
package com.Domj4;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class PlecarQueryXml extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("GBK");
response.setContentType("text/html");
String fileUrl = request.getRealPath("/xml/plecar.xml");//拿到文件的相对路径.
File file = new File(fileUrl);
Document document = null;//声明Document对象.
Element plecar = null;//声明根节点对象.
List list = null;//声明List对象.
String description = "";//定义保存描述信息的变量.
String createDate = "";//定义保存创建日期的变量.
//Plecar plecar2 = null;//实例化对象,储存数据.
if(file.exists()) {//如果文件不存在.如果不存在就创建这个文件.
SAXReader reader = new SAXReader();//拿到SAXReader对象.
try {
document = reader.read(new File(fileUrl));//拿到文件的XML文件.
plecar = document.getRootElement();//拿到根节点.
List lists = plecar.elements("info");//循环info公告里面的东西.
description = plecar.element("description").getText();//拿到描述的信息.
createDate = plecar.element("createTime").getText();//拿到创建日期.
int id = 0;
String title = "";//设置标题.
String content = "";//设置内容.
String pubDate = "";//设置发布日期.
if(lists.size()>0) {
list = new ArrayList();
}
for(int i=lists.size();i>0;i--) {
Plecar plecar2 = new Plecar();//实例化对象.
Element item = (Element)lists.get(i-1);//拿到内容info对象.
id = Integer.parseInt(item.attribute("id").getValue());//拿到id的属性.
if(item.element("title").getText()!=null) {//拿到info的标题.
title = item.element("title").getText();
}else {
title = "暂时没有标题";
}
if(item.element("content").getText()!=null) {
content = item.element("content").getText();//拿到info的内容.
}else {
content = "暂时没有内容";
}
if(item.element("pubDate").getText()!=null) {
pubDate = item.element("pubDate").getText();//拿到发布日期.
}
plecar2.setId(id);
plecar2.setTitle(title);
plecar2.setContent(content);
list.add(plecar2);
}
}catch (Exception e) {
System.out.println("读取文件失败!1111");
e.printStackTrace();
}
}
request.setAttribute("description", description);
request.setAttribute("createDate", createDate);
request.setAttribute("rssContent", list);
return mapping.findForward("query");
}
}
4:这个是修改时候所要查询出来显示的action:
package com.Domj4;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class PlecarModifyQueryXml extends Action{
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("text/html;charset=GBK");//设置响应的编码.
String fileUrl = request.getRealPath("/xml/plecar.xml");//拿到要访问的XML文件路径.
File file = new File(fileUrl);
Document document = null;//声明文本Document对象.
Element plecar = null;//声明表示根节点的Element对象.
int id = Integer.parseInt(request.getParameter("id"));//拿到要修改的公告的ID.
Plecar plecar2 = new Plecar();//为每一个信息创建一个广告对象储存.
if(file.exists()) {//判断文件是不是存在.
SAXReader reader = new SAXReader();
try {
document = reader.read(new File(fileUrl));//获得要访问的XML文档的Document对象.
plecar = document.getRootElement();//拿到这个文档的根节点.
Element item = (Element) plecar.selectSingleNode("/plecar/info[@id='"+id+"']");
if(item!=null) {
String title = "";//标题.
String content = "";//内容.
String pubDate = "";//发布日期.
id = Integer.parseInt(item.attributeValue("id"));//拿到信息对象的ID.
if(item.element("title").getText()!=null) {
title = item.element("title").getText();//获取标题.
}else {
title = "Sorry 暂时没有相关的公告";
}
if(item.element("content").getText()!=null) {
content = item.element("content").getText();//拿到公告的内容.
}
else {
content = "没有相关的内容";
}
if(item.element("pubDate").getText()!=null) {
pubDate = item.element("pubDate").getText();//获得发布日期.
}
plecar2.setTitle(title);
plecar2.setContent(content);
plecar2.setId(id);
plecar2.setPubDate(pubDate);
}
}catch (Exception e) {
System.out.println("文件修改的途中出现错误.");
}finally {
document.clearContent();//释放资源.
}
}
request.setAttribute("plecarContent", plecar2);
return mapping.findForward("modify");
}
}
5:这个是修改action:
package com.Domj4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class PlecarModifyXml extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("text/html;charset=GBK");
int id = Integer.parseInt(request.getParameter("id"));//拿到要修改信息的ID.
String title = request.getParameter("title");//拿到修改信息的标题.
String content = request.getParameter("content");//拿到要修改信息的.
DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");//格式化发布日期.
String pubDate = dateFormat.format(new Date());//创建发布日期.
String fileUrl = request.getRealPath("/xml/plecar.xml");拿到要修改后要保存的文件.
File file = new File(fileUrl);
Document document = null;//初始化文档对象.
Element plecar = null;//初始化根节点对象.
if(file.exists()) {
SAXReader reader = new SAXReader();
try {
document = reader.read(new File(fileUrl));//获取要修改文件的Document对象.
plecar = document.getRootElement();//获得根节点.
Element item = (Element)plecar.selectSingleNode("/plecar/info[@id='"+id+"']");
if(item!=null) {
item.element("title").setText(title);//修改标题.
item.element("content").setText(content);//设置内容.
item.element("pubDate").setText(pubDate);//设置发布日期.
}
}catch (Exception e) {
System.out.println("文件修改的时候出现错误!");
}
}
OutputFormat format = OutputFormat.createPrettyPrint();//设置信息存入的格式,也就是缩进方式.
format.setEncoding("GBK");//设置写入文件的编码格式.
try {
XMLWriter writer = new XMLWriter(new FileWriter(fileUrl),format);
writer.write(document);//写入文本.
writer.close();//关闭写入流.
document.clearContent();//释放资源.
}catch (IOException e) {
System.out.println("数据写入文本的时候出现问题!");
}
request.setAttribute("modifySuccess", "修改数据成功!");
return mapping.findForward("index");
}
}
6:这个是删除信息的action:
package com.Domj4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class PlecarDeleteXml extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
int id = Integer.parseInt(request.getParameter("id"));
String fileUrl = request.getRealPath("/xml/plecar.xml");//拿到文件的绝对位置.
File file = new File(fileUrl);
Document document = null;//初始化文档Document对象.
Element plecar = null;//初始化根节点对象.
if(file.exists()) {
SAXReader reader = new SAXReader();//拿到读取器.
try {
document = reader.read(new File(fileUrl));//读取文件.
plecar = document.getRootElement();//拿到根节点.
Element item = (Element)plecar.selectSingleNode("/plecar/info[@id='"+id+"']");//拿到对应的节点.
if(item!=null) {//判断节点是不是存在.
plecar.remove(item);//删除相对应的节点.
}
}catch (DocumentException e) {
System.out.println("数据删除出现问题.");
}
}
//创建OutputFormat对象.
OutputFormat format = OutputFormat.createPrettyPrint();//格式化为缩进方式.
format.setEncoding("GBK");//设置编码.
try {
XMLWriter writer = new XMLWriter(new FileWriter(fileUrl),format);
writer.write(document);//把数据重新写到文件中.
writer.close();//关闭写入流.
}catch (IOException e) {
System.out.println("在数据被删除的时候,写入数据出现问题");
}finally {
document.clearContent();//释放资源.
}
request.setAttribute("deleteSuccess", "删除数据成功");
return mapping.findForward("delete");
}
}
7:这个是删除所有文件信息的action:
package com.Domj4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class deleteAll extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String fileUrl =request.getRealPath("/xml/plecar.xml");//拿到要删除文件的绝对位置.
File file = new File(fileUrl);
Document document = null;//获取文件的Document对象.
Element plecar = null;//拿到文件的根节点.
if(file.exists()) {
SAXReader reader = new SAXReader();
try {
document = reader.read(new File(fileUrl));//读取文件.
plecar = document.getRootElement();//拿到根节点.
plecar.elements("info").clear();//删除所有的info节点.
}catch (DocumentException e) {
System.out.println("删除文件的INFO所有节点出现错误.");//
}
}
//创建格式化对象.
OutputFormat format = OutputFormat.createPrettyPrint();//格式化对象的创建.
format.setEncoding("GBK");//设置文件希写入的编码格式.
try {
XMLWriter writer = new XMLWriter(new FileWriter(fileUrl),format);
writer.write(document);//想流写入数据.
writer.close();//关闭数据流.
}catch (IOException e) {
System.out.println("数据库写入文件的时候出现错误.");
}finally {
document.clearContent();//释放资源.
}
request.setAttribute("deleteAllOk", "已经成功删除所有的公告");
return mapping.findForward("ShowDeleteAllAfter");
}
}