利用dim4j來保存用戶信息

一:利用單例設計模式創建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");
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章