利用dim4j来保存用户信息

12 篇文章 0 订阅
11 篇文章 0 订阅

一:利用单例设计模式创建dom对象

        编码问题:xml文件不指定输入流的编码格式,文件以系统编码(windows7为gbk)写入(虽然文件头为utf-8)

                            此时注意dom4j解析读取的编码问题:

                             1:当文件编码格式与xml头文件属性编码不一致时,会出现解析异常,将xml头改为gbk即可

                            2:如果以utf-8读取,必须文件是以utf-8写入进去:则需要对写入流设置编码:

                                第一种:利用OutputFormat

                                  

                OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		
		XMLWriter w=null;
			
		w=new XMLWriter(new FileOutputStream(fileName),format);
                               第二种,利用转换流设置编码:
               XMLWriter w=null;
	       w=new XMLWriter(new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName),"utf-8")));
         note:要注意写入文件的本身编码格式。可另存为查看编码(文件选择框下面有编码选择,默认的为原来文件的编码)

package cn.hncu.login;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

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 DomFactory {
	
	
	private static Document dom;
	private static String fileName;
	
	static{
		String name=DomFactory.class.getSimpleName();
		name+=".class";
		String packageName=DomFactory.class.getPackage().getName().replace(".", "/");
		String urlPath=DomFactory.class.getResource(name).getPath();
		String path=urlPath.substring(0, urlPath.lastIndexOf(packageName));
		fileName=path+"users.xml";
		File file=new File(fileName);
		
		if(!file.exists()){
			try {
				file.createNewFile();
				FileWriter pw=new FileWriter(file);
				//xml头无中文,直接写入文件(无论哪种格式输入流,文件都是ASCII码(只含有ASCII码时))
				//PrintWriter pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"));
				pw.write("<?xml version='1.0' encoding='utf-8'?>");
				//fw.write("<?xml version='1.0' encoding='gbk'?>");
				pw.flush();
				pw.close();
				dom=DocumentHelper.createDocument();//创建dom对象
				dom.addElement("Users");
				SaveDom();
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			
			
		}
				
		try {
			SAXReader sax=new SAXReader();
			//文件格式正确时,无需设置,格式不正确,设了也没用。。。。
			//sax.setEncoding("utf-8");
			//dom=sax.read(new InputStreamReader(new FileInputStream(file),"utf-8"));
			dom=sax.read(new FileInputStream(file));
		}  catch (FileNotFoundException e) {
			throw new RuntimeException(e.getMessage());
		} catch (DocumentException e) {
			throw new RuntimeException(e.getMessage());
		}
			
			
			List<Element> list=dom.getRootElement().elements();
			for(Element e:list){
				System.out.println(e.elementText("name"));
			}
		
	}
	
	public static Document getInstance(){
		return dom;
	}
	
	public static boolean SaveDom(){
		<pre name="code" class="java">                OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		//format.setTrimText(false);
		XMLWriter w=null;
		try {
			//w=new XMLWriter(new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName),"utf-8")));
			w=new XMLWriter(new FileOutputStream(fileName),format);	
} catch (IOException e) {throw new RuntimeException(e.getMessage());}finally{if(w!=null)try {w.close();} catch (IOException e) {throw new RuntimeException(e.getMessage());}}return true;}}

 jsp:主页 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login</title>
	<script type="text/javascript">
	  /* function imgUpdate(){
	       var imgNode= document.getElementsByTagName("img").item(0);
	       //浏览器的缓存,对相同url的请求无效,改变参数来达到刷新
	       var t=new Date().getTime();
	       imgNode.src="/WebStudy/Captcha?"+t;
	   }*/
	   οnlοad=function(){
	       var value=document.getElementById("has").value;
	       if(value=="true"){
	           alert("用户已存在");
	       }
	       var value=document.getElementById("add").value;
	       
	       if(value=="true")
	           alert("用户创建成功");
	       else if(value=="false")
	           alert("用户创建失败");
	     
	   };
	</script>
  </head>
  
  <body>
     <!-- /WebStudy/Captcha 对servelt的请求,需要在web.xml配置servel的路径映射url-pattern 
    <img src="/WebStudy/Captcha"/><a href="javascript:imgUpdate()">看不清</a>
    <a href="OneServelt">一次转发</a>
    <a href="/WebStudy/OneServelt">一次转发</a>
    <a href="">多次转发</a>
    <a href="ChongServelt">重定向</a>-->
    <form action="LoginServlet" method="post">
            姓名:<input type="text" name="name"/>
             密码:<input type="password" name="pwd"/>
     <input type="submit" value="提交">
     <input type="hidden" value="<%=request.getAttribute("has") %>" id="has"> 
     <input type="hidden" value="<%=request.getParameter("add") %>" id="add"> 
     </form>
     <a href="LoginServlet">查看所有用户</a>
  </body>
</html>

servlet的处理:

public class LoginServlet extends HttpServlet {

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
		Document dom=DomFactory.getInstance();
		//System.out.println(dom.asXML());
		//List<Element> list = dom.getRootElement().elements();
		List<Element> list = dom.selectNodes("//user");
		PrintWriter pw=response.getWriter();
		pw.print("<html><body>");
		for(Element e:list){
			pw.print("用户名:"+e.elementText("name")+"密码:"+e.elementText("pwd"));
			pw.print(" <a href='DelServlet?id="+e.attributeValue("id")+"'>删除</a><br/>");
		}
		pw.print("<a href='/WebStudy/index.jsp'>主页</a>");
		pw.println("</body></html>");
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("utf-8");
		String name=request.getParameter("name");
		String pwd=request.getParameter("pwd");
		
		Document dom=DomFactory.getInstance();
//		System.out.println(dom.getRootElement().getName());
        List<Element> list = dom.selectNodes("//user");
		for(Element e:list){
			//if(e.elementText("name").equals(name)&&e.elementText("pwd").equals(pwd)){
			if(e.elementText("name").equals(name)){
				request.setAttribute("has", true);
				request.getRequestDispatcher("/index.jsp").forward(request, response);
			    return;
			}
		}
		
		Element root=dom.getRootElement();
		Element user=root.addElement("user");
		user.addAttribute(new QName("id"), UUID.randomUUID().toString().replace("-", ""));
		user.addElement("name").setText(name);
		user.addElement("pwd").setText(pwd);
		
		response.sendRedirect("/WebStudy/index.jsp?add="+DomFactory.SaveDom());
		
	}

}

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		Document dom=DomFactory.getInstance();
		Node node=dom.selectSingleNode("//user[@id='"+request.getParameter("id")+"']");
		if (node!=null) {
			node.getParent().remove(node);
			DomFactory.SaveDom();
		}
//		List<Element> list=dom.getRootElement().elements();
//		for (Element e:list) {
//			if (e.attributeValue("id").equals(request.getParameter("id"))) {
//				e.getParent().remove(e);
//				DomFactory.SaveDom();
//			}
//		}
		response.sendRedirect("LoginServlet");
	}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值