Welcome

首页 / 网页编程 / JSP / JSP基于dom解析xml实例详解

本文实例讲述了JSP基于dom解析xml的方法。分享给大家供大家参考,具体如下:
初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩)O~
实体类:User
public class User { private String name; private String pwd; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}
数据访问层接口:UserDao
public interface UserDao { boolean login(String name, String pwd); void insertUser(User user); List<User> selectUser(); void updateUser(User user); boolean deleteUser(String name); public User findByName(String name);}
接口实现类:UserDaoImpl
public class UserDaoImpl implements UserDao { private static final String PATH="xml文件路径"; private void build(Document dom) { try {//定义转换器Transformer f = TransformerFactory.newInstance().newTransformer();//设置输出的编码格式f.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//构建dom源DOMSource source = new DOMSource(dom);//指定文件存放的目标路劲StreamResult sr = new StreamResult(new File(PATH));//执行转换操作f.transform(source, sr); } catch (Exception e) {e.printStackTrace(); } } //登陆 public boolean login(String name, String pwd) { boolean flag = false; try {//根据以有的xml文件创建Document对象Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));//获取user节点下的子节点NodeList list = dom.getElementsByTagName("user");//遍历list,数据匹配退出for(int i = 0; i<list.getLength(); i++) {Element el = (Element)list.item(i);if(name.equals(el.getAttribute("name")) && pwd.equals(el.getAttribute("pwd"))) { flag = true; break;}} } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }return flag; } //添加操作 public void insertUser(User user) { try {//创建全新的Document对象Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();//创建根节点usersElement el = dom.createElement("users");//将根节点添加到dom中dom.appendChild(el);//创建子节点Element e2 = dom.createElement("user");//将子节点添加到根节点中el.appendChild(e2);//取得xml文件中现有的信息List<User> users = this.selectUser();for(int i = 0; i < users.size(); i++){//创建节点userElement el3 = dom.createElement("user");User us =users.get(i);//设置节点的属性(name,pwd,email)el3.setAttribute("name", us.getName());el3.setAttribute("pwd", us.getPwd());el3.setAttribute("email", us.getEmail());//添加到根节点中el.appendChild(el3);}e2.setAttribute("name", user.getName());e2.setAttribute("pwd", user.getPwd());e2.setAttribute("email", user.getEmail());build(dom); } catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace(); } } //查询操作 public List<User> selectUser() { List<User> userList = new ArrayList<User>(); try {//根据已有的xml文件创建domDocument dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));//获取所有user节点下的子节点NodeList list = dom.getElementsByTagName("user");for(int i = 0;i <list.getLength();i++){User user =new User();Element element = (Element)list.item(i);user.setName(element.getAttribute("name"));user.setPwd(element.getAttribute("pwd"));user.setEmail(element.getAttribute("email"));userList.add(user);} } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); } return userList; } //修改操作 public void updateUser(User user) { try {//根据以有的xml文件创建domDocument dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));//获取user节点下的子节点NodeList list = dom.getElementsByTagName("user");//遍历listfor(int i = 0;i < list.getLength();i++) {Element el = (Element)list.item(i);//根据name属性去修改if(user.getName().equals(el.getAttribute("name"))) { el.setAttribute("pwd", user.getPwd()); el.setAttribute("email", user.getEmail()); build(dom);}} } catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); } catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace(); } } //删除操作 public boolean deleteUser(String name) { try {//根据以有xml文件创建domcumet对象Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));//获取user节点下的子节点NodeList list = dom.getElementsByTagName("user");//遍历listfor(int i=0;i<list.getLength();i++) {Element el = (Element)list.item(i);if(name.equals(el.getAttribute("name"))) { el.getParentNode().removeChild(el); build(dom); return true;}} } catch (Exception e) {// TODO: handle exception } return false; } //根据name查找 public User findByName(String name) { User user = new User(); try {//根据以后的xml文件创建document对象Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(PATH));//获取user节点下的子节点集合NodeList list = dom.getElementsByTagName("user");for(int i=0;i<list.getLength();i++) {Element el = (Element)list.item(i);if(name.equals(el.getAttribute("name"))) { user.setName(el.getAttribute("name")); user.setPwd(el.getAttribute("pwd")); user.setEmail(el.getAttribute("email")); break;}} } catch (Exception e) {e.printStackTrace(); } return user; }}
业务逻辑层接口:UserService
boolean login(String name, String pwd);void insertUser(User user);List<User> selectUser();void updateUser(User user);boolean deleteUser(String name);public User findByName(String name);
接口实现类:UserServiceImpl
public class UserServiceImpl implements UserService { UserDao dao = new UserDaoImpl(); public boolean login(String name, String pwd) { return dao.login(name, pwd); } public void insertUser(User user) { dao.insertUser(user); } public List<User> selectUser() { return dao.selectUser(); } public void updateUser(User user) { dao.updateUser(user); } public boolean deleteUser(String name) { return dao.deleteUser(name); } public User findByName(String name) { return dao.findByName(name); }}
控制层:UserAction
public class UserAction extends ActionSupport{private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } UserService userService = new UserServiceImpl(); public String selectUser(){ HttpServletRequest request = ServletActionContext.getRequest(); List<User> users = new ArrayList<User>(); users = userService.selectUser(); request.setAttribute("USER", users); return "select"; } /** * 登陆 * @return */ public String login(){ if(user.getName() != null && user.getPwd() != null) {boolean flag = userService.login(user.getName(), user.getPwd());if(flag) {return SUCCESS;} } return ERROR; } /** * 修改 * @return */ public String update(){ userService.updateUser(user); return "update"; } /** * 编辑 * @return */ public String edit(){ HttpServletRequest request = ServletActionContext.getRequest(); String name = request.getParameter("uName"); if(name != null) {User u = userService.findByName(name);request.setAttribute("USER", u); } return "edit"; } /** * 删除 * @return */ public String delete(){ HttpServletRequest request = ServletActionContext.getRequest(); String name = request.getParameter("uName"); boolean flag = userService.deleteUser(name); System.out.println(flag); return SUCCESS; }/** * 添加 * @return */ public String insert(){ userService.insertUser(user); return "insert"; }}
struts.xml配置(本人用的的struts2):
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><package name="file" extends="struts-default"> <action name="list" class="com.jun.action.UserAction" method="selectUser"><result name="select">/list.jsp</result> </action> <action name="login" class="com.jun.action.UserAction" method="login"><result name="success" type="redirectAction">/list.action</result><result name="error">/login.jsp</result> </action> <action name="insert" class="com.jun.action.UserAction" method="insert"><result name="insert" type="redirectAction">/list.action</result> </action> <action name="delete" class="com.jun.action.UserAction" method="delete"><result type="redirect">/list.action</result> </action> <action name="update" class="com.jun.action.UserAction" method="update"><result name="update" type="redirectAction">/list.action</result> </action> <action name="edit" class="com.jun.action.UserAction" method="edit"><result name="edit">/update.jsp</result> </action></package></struts>
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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list><welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern> </filter-mapping></web-app>
四个页面:login.jsp  list.jsp insert.jsp,update.jsp
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head><base href="<%=basePath%>"><title>My JSP "login.jsp" starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body><a href="list.action">首页</a>|<a href="insert.jsp">注册</a><form action="login.action" method="post"><table><tr><td> 用户名:</td><td><input name="user.name" type="text"></td></tr><tr><td> 密码:</td><td><input type="password" name="user.pwd"></td></tr><tr><td colspan="2" align="center"><input type="submit" value="登录"></td></tr></table> </form> </body></html>
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri="/struts-tags" prefix="s"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head><base href="<%=basePath%>"><title>My JSP "list.jsp" starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body > <a href="insert.jsp">注册</a><table border="1"><tr> <td align="center" colspan="6"><font size="+3">用户列表</font></td></tr> <tr><td>序号</td><td>用户名</td><td>密码</td><td>邮箱</td><td>删除</td><td>编辑</td> </tr> <c:forEach items="${USER}" var="u" varStatus="temp"><tr><td>${temp.index+1}</td><td>${u.name }</td><td>${u.pwd }</td><td>${u.email}</td><td><a href="delete.action?uName=${u.name}">删除</a></td><td><a href="edit.action?uName=${u.name }">编辑</a></td></tr></c:forEach></table> </body></html>
insert.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP "register.jsp" starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <a href="list.action">首页</a> <form action="insert.action" method="post"><table><tr> <td> 用户名: </td> <td> <input name="user.name" type="text"> </td></tr><tr> <td> 密码: </td> <td> <input type="password" name="user.pwd"> </td></tr><tr> <td> 邮箱: </td> <td> <input type="text" name="user.email"> </td></tr><tr> <td colspan="2" align="center"> <input type="submit" value="提交"> </td></tr></table> </form> </body></html>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head><base href="<%=basePath%>"><title>My JSP "update.jsp" starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body><a href="list.action">首页</a><h2>更新操作</h2><form action="update.action" method="post"><table><c:set value="${USER}" var="user"></c:set><tr><td> 用户名:</td><td><input readonly="readonly" name="user.name" value="${user.name}" type="text"></td></tr><tr><td> 密码:</td><td><input type="password" value="${user.pwd }" name="user.pwd"></td></tr><tr><td> 邮箱:</td><td><input type="text" value="${user.email }" name="user.email"></td></tr><tr><td colspan="2" align="center"><input type="submit" value="保存"></td></tr></table> </form> </body></html>
本人学习所用的user.xml文件
<?xml version="1.0" encoding="UTF-8"?><users><user email=aaa@sina.com name="bbb" pwd="aaaaaa"/><user email=bbb@sina.com name="ccc" pwd="aaaaaa"/></users>
希望本文所述对大家jsp程序设计有所帮助。