小小相册
来源:互联网 发布:linux eclipse 下载 编辑:程序博客网 时间:2024/05/03 09:56
整个小项目是基于Tomcat服务器上运行
涉及到的功能:上传照片,查看已上传的照片,删除照片(只有ip地址相同的才能删除–权限问题),大图展示(点击图片即可查看大图),下载到本地硬盘
所涉及到的知识点:上传文件,servlet的熟练掌握,架构分析和设计
(写代码时记得导入相应的jar包)
基本架构设计:分层:
1)前端jsp页面(主页面,上传文件页面)
2)后台表现层–值对象(domain)
3)后台逻辑层–在这里把servlet看成逻辑层
4)后台dao(数据访问对象)层–dao
5)工具类:数据库文档对象(xml)的获得和保存,uuid的随机生成,日期格式的转换,打散目录的生成
代码实现:
前端jsp页面
主页
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>相册管理页面</title> </head> <body> <a href="<%=request.getContextPath()%>/jsps/upload.jsp">上传您的照片</a><br/> <a href="<%=request.getContextPath() %>/servlet/ShowServlet">查看照片库</a> </body></html>
上传页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>上传照片页面</title> </head> <body> <form action="<%=request.getContextPath() %>/servlet/UploadServlet" method="post" enctype="multipart/form-data"> 上传照片:<input type="file" name="file" /><!-- 上传文件的 --><br/> 照片信息:<input type="text" name="desc" /><!-- 描文件内容的 --><br/> <input type="submit" value="上传" /><br/> </form> </body></html>
后台分层
值对象domain层
package cn.hncu.domain;//值对象---用来对照片信息进行封装public class PhotoModel { private String id;//uuid--相当于数据库中的key值 private String realName;//文件的真实名字---相当于数据库中的value值 private String dateTime;//获得当前用户上传的时间 private String ext;//文件名的扩展名 private String dir;//获得文件保存时打散目录 private String ip;//获得上传者的ip地址 private String desc;//获得照片的说明信息 /** * @return the id */ public String getId() { return id; } /** * @param id the id to set */ public void setId(String id) { this.id = id; } /** * @return the realName */ public String getRealName() { return realName; } /** * @param realName the realName to set */ public void setRealName(String realName) { this.realName = realName; } /** * @return the dataTime */ public String getDateTime() { return dateTime; } /** * @param dataTime the dataTime to set */ public void setDateTime(String dataTime) { this.dateTime = dataTime; } /** * @return the ext */ public String getExt() { return ext; } /** * @param ext the ext to set */ public void setExt(String ext) { this.ext = ext; } /** * @return the dir */ public String getDir() { return dir; } /** * @param dir the dir to set */ public void setDir(String dir) { this.dir = dir; } /** * @return the ip */ public String getIp() { return ip; } /** * @param ip the ip to set */ public void setIp(String ip) { this.ip = ip; } /** * @return the desc */ public String getDesc() { return desc; } /** * @param desc the desc to set */ public void setDesc(String desc) { this.desc = desc; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "PhotoModel [id=" + id + ", realName=" + realName + ", dateTime=" + dateTime + ", ext=" + ext + ", dir=" + dir + ", ip=" + ip + ", desc=" + desc + "]"; }}
servlet逻辑业务层
上传模块
package cn.hncu.servlet;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.io.FileUtils;import com.sun.org.apache.xml.internal.serializer.utils.Utils;import cn.hncu.dao.PhotoDAO;import cn.hncu.dao.PhotoDAOFactory;import cn.hncu.domain.PhotoModel;import cn.hncu.myUtils.MyUtils;public class UploadServlet extends HttpServlet { private String charset; private PhotoModel model = new PhotoModel(); @Override public void init(ServletConfig config) throws ServletException { charset = config.getInitParameter("charset"); super.init(config); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>提交方式错误</TITLE></HEAD>"); out.println(" <BODY>"); out.println("照片上传不支持GET方式"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(charset); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); //文件上传 File file = new File("d:/a");//用来存放临时文件的地方 DiskFileItemFactory f = new DiskFileItemFactory(1024*8,file);//每次上传文件大小 ServletFileUpload upload = new ServletFileUpload(f);//真正的上传工具 upload.setFileSizeMax(1024*1024*5);//设置单个文件上传的最大值为5M upload.setSizeMax(1024*1024*8);//设置一次性上传所有文件的大小不超过8M //为什么这里又设置了一次编码!!!! //upload.setHeaderEncoding("utf-8");//等价于: request.setCharacterEncoding("utf-8"); FileItem item2 = null; //使用解析工具解析 try { List<FileItem> fileItem = upload.parseRequest(request);//解析出来的是一些普通表达组件还是文件上传的表单组件 InputStream in = null; //进行遍历 for(FileItem item:fileItem){ item2 = item; //判断表单组件的类型---是不是普通表单组件(因为普通表单组件的编码格式要另外设置) if(item.isFormField()){//是普通表单组件 String desc = item.getString(charset);//拿到普通表单组件及编辑框文本内容解决其乱码问题(文件描述内容) //#1--第一个参数的收集(普通表单组件的内容存在则在这里进行收集) model.setDesc(desc); //System.out.println("文件说明:"+desc); }else{//非普通表单组件 in = item.getInputStream();//拿到输入流 //▲2防护: 过滤掉没有选择文件的 空文件组件===虽然在这里只有一个上传照片的地方 //item.getSize(); ---返回当前文件的大小 if(item.getSize()==0){ continue; } //接下来要做的是拿到文件名字--通过uuid生成的新文件名 //#2--第二个参数的收集:真实的文件名字 String realName = item.getName(); if(realName==null || "".equals(realName.trim())){//预防用户没有进行选择上传的文件导致文件名为null out.println("您没有选择需要上传的照片!请返回重新选择..."); return; } //#3--第三个参数--文件扩展名 String ext = realName.substring(realName.lastIndexOf(".")); //System.out.println("文件扩展名:"+ext); model.setExt(ext); //System.out.println("真实文件名字:"+realName); realName = realName.substring(realName.lastIndexOf("\\")+1, realName.lastIndexOf(".")); //System.out.println("真实文件名字:"+realName); model.setRealName(realName); //=====收集参数时要注意!我们只收集我们能够从已知条件上收集到的参数,另外的自己进行补充 //需要补充的参数:id,dateTime,dir,ip //#4--收集的第四个参数--随机生成的uuid String id = MyUtils.getUuid(); model.setId(id); //#5--收集的第五个参数--拿到当前的时间 String dateTime = MyUtils.getFormateDate(); model.setDateTime(dateTime); //#6--收集的第六个参数--拿到随机生成的打散目录 String dir = MyUtils.getDir(model.getId()); model.setDir(dir); //#7--收集的第七个参数--拿到上传者的ip地址 String ip = request.getRemoteAddr(); model.setIp(ip); //以上收集到所有的参数并进行封装操作 } } //通过以上七步:完成model值对象的封装,下面进行调用dao层进行存储 //※1※--把照片文件存储到xml文档中 PhotoDAO dao = PhotoDAOFactory.getPhotoDAO(); boolean boo = dao.save(model); //※2※ 把照片文件存储到硬盘 if(boo){//如果存储成功 //把照片存储到项目根目录下的"photos"文件夹中"(以打散目录的方式进行存储) //首选找到项目根目录下 String path = getServletContext().getRealPath("/photos");//带盘符的绝对路径 path = path+"/"+model.getDir();//细致到打散目录下 File dir = new File(path); if(!dir.exists()){ dir.mkdirs();//如果不存在该文件夹,则利用程序自动生成 } //在服务器硬盘中的完整文件名(含盘符的绝对路径及文件名): path+"/"+uuid+ext String fileName = path+"/"+model.getId()+model.getExt(); FileUtils.copyInputStreamToFile(in, new File(fileName)); out.println("照片上传成功..."); //out.println("<a href='"+request.getContextPath()+"/servlet/UploadServlet'>返回文件上传页面</a>"); }else{ out.println("文件信息无法保存到数据库,上传失败"); } } catch (FileUploadException e) { e.printStackTrace(); } out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); }}
查看功能模块
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDAO;import cn.hncu.dao.PhotoDAOFactory;import cn.hncu.domain.PhotoModel;public class ShowServlet extends HttpServlet { private PhotoDAO dao = PhotoDAOFactory.getPhotoDAO();//注入dao public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>相册浏览</TITLE></HEAD>"); out.println(" <BODY>"); String str = "<table border='1' width='100%'>"+ "<tr><th>文件名</th> <th>上传时间</th> <th>上传者IP地址</th> <th>照片(点击照片即可查看大图)</th>" + "<th>照片详细信息</th> <th>操作</th>"; out.println(str); //从dao层把所有照片读取出来,发送到前端页面显示 PhotoModel model = new PhotoModel(); List<PhotoModel> list = dao.getAllPhotos();//拿到所有的PhotoModel对象 //进行遍历操作输出到前端页面显示 for(PhotoModel photo:list){ out.println("<tr>"); //不知道为什么我们拿到的真实文件名是带路径的,在这里我们要进行相应的处理 out.println("<td width='100'>"+photo.getRealName()+photo.getExt()+"</td>");//显示文件名 out.println("<td width='100'>"+photo.getDateTime()+"</td>");//显示上传时间 out.println("<td width='100'>"+photo.getIp()+"</td>");//显示上传者的IP地址 //显示照片 //照片所在服务器硬盘上的路径 String path = request.getContextPath()+"/photos/"+photo.getDir()+"/"+photo.getId()+photo.getExt(); //System.out.println("照片所在路径:"+path); out.println("<td><a href='"+path+"'><img width='180' height='100' src='"+path+"'></a></td>"); //显示照片的详细信息 out.println("<td width='100'>"+photo.getDesc()+"</td>"); //显示对照片需要进行的操作 //删除和下载 String op = "<a href='/photoWeb/servlet/DelServlet?id="+photo.getId()+"'>删除</a> "; op = op+ "<a href='/photoWeb/servlet/DownServlet?id="+photo.getId()+"'>下载</a> "; out.println("<td width=100>"+op+"</td>"); out.println("</tr>"); System.out.println(photo.getDesc()); } out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("utf-8");//查看好像不需要设置编码格式 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("<h2>不支持POST方式查看</h2>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); }}
删除功能模块
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDAO;import cn.hncu.dao.PhotoDAOFactory;import cn.hncu.domain.PhotoModel;public class ShowServlet extends HttpServlet { private PhotoDAO dao = PhotoDAOFactory.getPhotoDAO();//注入dao public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>相册浏览</TITLE></HEAD>"); out.println(" <BODY>"); String str = "<table border='1' width='100%'>"+ "<tr><th>文件名</th> <th>上传时间</th> <th>上传者IP地址</th> <th>照片(点击照片即可查看大图)</th>" + "<th>照片详细信息</th> <th>操作</th>"; out.println(str); //从dao层把所有照片读取出来,发送到前端页面显示 PhotoModel model = new PhotoModel(); List<PhotoModel> list = dao.getAllPhotos();//拿到所有的PhotoModel对象 //进行遍历操作输出到前端页面显示 for(PhotoModel photo:list){ out.println("<tr>"); //不知道为什么我们拿到的真实文件名是带路径的,在这里我们要进行相应的处理 out.println("<td width='100'>"+photo.getRealName()+photo.getExt()+"</td>");//显示文件名 out.println("<td width='100'>"+photo.getDateTime()+"</td>");//显示上传时间 out.println("<td width='100'>"+photo.getIp()+"</td>");//显示上传者的IP地址 //显示照片 //照片所在服务器硬盘上的路径 String path = request.getContextPath()+"/photos/"+photo.getDir()+"/"+photo.getId()+photo.getExt(); //System.out.println("照片所在路径:"+path); out.println("<td><a href='"+path+"'><img width='180' height='100' src='"+path+"'></a></td>"); //显示照片的详细信息 out.println("<td width='100'>"+photo.getDesc()+"</td>"); //显示对照片需要进行的操作 //删除和下载 String op = "<a href='/photoWeb/servlet/DelServlet?id="+photo.getId()+"'>删除</a> "; op = op+ "<a href='/photoWeb/servlet/DownServlet?id="+photo.getId()+"'>下载</a> "; out.println("<td width=100>"+op+"</td>"); out.println("</tr>"); System.out.println(photo.getDesc()); } out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("utf-8");//查看好像不需要设置编码格式 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("<h2>不支持POST方式查看</h2>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); }}
下载功能模块
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDAO;import cn.hncu.dao.PhotoDAOFactory;import cn.hncu.domain.PhotoModel;public class ShowServlet extends HttpServlet { private PhotoDAO dao = PhotoDAOFactory.getPhotoDAO();//注入dao public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>相册浏览</TITLE></HEAD>"); out.println(" <BODY>"); String str = "<table border='1' width='100%'>"+ "<tr><th>文件名</th> <th>上传时间</th> <th>上传者IP地址</th> <th>照片(点击照片即可查看大图)</th>" + "<th>照片详细信息</th> <th>操作</th>"; out.println(str); //从dao层把所有照片读取出来,发送到前端页面显示 PhotoModel model = new PhotoModel(); List<PhotoModel> list = dao.getAllPhotos();//拿到所有的PhotoModel对象 //进行遍历操作输出到前端页面显示 for(PhotoModel photo:list){ out.println("<tr>"); //不知道为什么我们拿到的真实文件名是带路径的,在这里我们要进行相应的处理 out.println("<td width='100'>"+photo.getRealName()+photo.getExt()+"</td>");//显示文件名 out.println("<td width='100'>"+photo.getDateTime()+"</td>");//显示上传时间 out.println("<td width='100'>"+photo.getIp()+"</td>");//显示上传者的IP地址 //显示照片 //照片所在服务器硬盘上的路径 String path = request.getContextPath()+"/photos/"+photo.getDir()+"/"+photo.getId()+photo.getExt(); //System.out.println("照片所在路径:"+path); out.println("<td><a href='"+path+"'><img width='180' height='100' src='"+path+"'></a></td>"); //显示照片的详细信息 out.println("<td width='100'>"+photo.getDesc()+"</td>"); //显示对照片需要进行的操作 //删除和下载 String op = "<a href='/photoWeb/servlet/DelServlet?id="+photo.getId()+"'>删除</a> "; op = op+ "<a href='/photoWeb/servlet/DownServlet?id="+photo.getId()+"'>下载</a> "; out.println("<td width=100>"+op+"</td>"); out.println("</tr>"); System.out.println(photo.getDesc()); } out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("utf-8");//查看好像不需要设置编码格式 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("<h2>不支持POST方式查看</h2>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); }}
dao层
接口
package cn.hncu.dao;import java.util.List;import cn.hncu.domain.PhotoModel;public interface PhotoDAO { public abstract boolean save(PhotoModel model); public abstract List<PhotoModel> getAllPhotos(); public abstract PhotoModel getSingleById(String id); public abstract boolean del(String id);}
实现类
package cn.hncu.dao;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import cn.hncu.domain.PhotoModel;import cn.hncu.myUtils.DocumentFactory;public class PhotoDAOImpl implements PhotoDAO { @Override public boolean save(PhotoModel model) { //保存 //首先拿到xml文档然后进行保存操作 Document dom = DocumentFactory.getDom();//拿到对象 Element eRoot = dom.getRootElement();//拿到根节点 //对根节点进行添加元素并给元素设置属性 Element ePhoto = eRoot.addElement("photo"); ePhoto.addAttribute("id", model.getId()); ePhoto.addAttribute("realName", model.getRealName()); ePhoto.addAttribute("dateTime", model.getDateTime()); ePhoto.addAttribute("ip", model.getIp()); ePhoto.addAttribute("ext", model.getExt()); ePhoto.addAttribute("dir", model.getDir()); ePhoto.addElement("desc").setText(model.getDesc()); return DocumentFactory.save(); } @Override public List<PhotoModel> getAllPhotos() { // TODO Auto-generated method stub List<PhotoModel> list = new ArrayList<PhotoModel>(); Document dom = DocumentFactory.getDom();//拿到xml文档对象 Element eRoot = dom.getRootElement();//拿到根节点 Iterator<Element> it = eRoot.elementIterator("photo"); while(it.hasNext()){ Element e = it.next(); PhotoModel model = new PhotoModel(); model.setId(e.attributeValue("id")); model.setRealName(e.attributeValue("realName")); model.setDateTime(e.attributeValue("dateTime")); model.setExt(e.attributeValue("ext")); model.setDir(e.attributeValue("dir")); model.setIp(e.attributeValue("ip")); model.setDesc(e.elementText("desc")); list.add(model); } return list; } @Override public PhotoModel getSingleById(String id) { //用过调用getAllPhotos()在进行比对直接拿到 List<PhotoModel> list = getAllPhotos(); for(PhotoModel model:list){ if(model.getId().equals(id)){ return model; } } return null; } @Override public boolean del(String id) { //对文档数据库进行删除操作---在这里用dom4j的技术进行处理 Document dom = DocumentFactory.getDom();//拿到xml数据库文档对象 Element e = (Element) dom.selectSingleNode("//photo[@id='"+id.trim()+"']");//通过xpath来找是否存在 return e.getParent().remove(e);//返回是否成功删除 }}
工厂类
package cn.hncu.dao;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import cn.hncu.domain.PhotoModel;import cn.hncu.myUtils.DocumentFactory;public class PhotoDAOImpl implements PhotoDAO { @Override public boolean save(PhotoModel model) { //保存 //首先拿到xml文档然后进行保存操作 Document dom = DocumentFactory.getDom();//拿到对象 Element eRoot = dom.getRootElement();//拿到根节点 //对根节点进行添加元素并给元素设置属性 Element ePhoto = eRoot.addElement("photo"); ePhoto.addAttribute("id", model.getId()); ePhoto.addAttribute("realName", model.getRealName()); ePhoto.addAttribute("dateTime", model.getDateTime()); ePhoto.addAttribute("ip", model.getIp()); ePhoto.addAttribute("ext", model.getExt()); ePhoto.addAttribute("dir", model.getDir()); ePhoto.addElement("desc").setText(model.getDesc()); return DocumentFactory.save(); } @Override public List<PhotoModel> getAllPhotos() { // TODO Auto-generated method stub List<PhotoModel> list = new ArrayList<PhotoModel>(); Document dom = DocumentFactory.getDom();//拿到xml文档对象 Element eRoot = dom.getRootElement();//拿到根节点 Iterator<Element> it = eRoot.elementIterator("photo"); while(it.hasNext()){ Element e = it.next(); PhotoModel model = new PhotoModel(); model.setId(e.attributeValue("id")); model.setRealName(e.attributeValue("realName")); model.setDateTime(e.attributeValue("dateTime")); model.setExt(e.attributeValue("ext")); model.setDir(e.attributeValue("dir")); model.setIp(e.attributeValue("ip")); model.setDesc(e.elementText("desc")); list.add(model); } return list; } @Override public PhotoModel getSingleById(String id) { //用过调用getAllPhotos()在进行比对直接拿到 List<PhotoModel> list = getAllPhotos(); for(PhotoModel model:list){ if(model.getId().equals(id)){ return model; } } return null; } @Override public boolean del(String id) { //对文档数据库进行删除操作---在这里用dom4j的技术进行处理 Document dom = DocumentFactory.getDom();//拿到xml数据库文档对象 Element e = (Element) dom.selectSingleNode("//photo[@id='"+id.trim()+"']");//通过xpath来找是否存在 return e.getParent().remove(e);//返回是否成功删除 }}
工具类
xml文档数据库对象的获取和保存
package cn.hncu.myUtils;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import sun.java2d.pipe.BufferedOpCodes;//获得数据库文档对象及对数据库文档对象进行保存的工具类public class DocumentFactory { private static Document dom = null; private static String filePath; //申明静态,保证单例 static{ try { SAXReader reader = new SAXReader(); filePath = DocumentFactory.class.getClassLoader().getResource("myPhoto.xml").getPath(); //System.out.println("xml文档路径通过类加载器拿到:"+filePath); /* * 这里有一个BUG(两种解决办法): * 1)还有就是你用myEclipse新建的.xml文档他的默认编码格式为平台编码格式(GBK),我们将它另存为utf-8也可以解决这一bug * 2)读取时用下面的io流指定编码格式也可以解决次BUG */ //dom = reader.read(filePath); //法二解决上述BUG问题 try { dom = reader.read(new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"utf-8"))); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (DocumentException e) { System.out.println("文件读取时异常"); e.printStackTrace(); } } public static Document getDom(){ return dom; } //保存xml文档对象 public static boolean save(){ try { XMLWriter w = new XMLWriter(new FileWriter(filePath)); w.write(dom); w.close(); return true;//保存成功返回true } catch (IOException e) { System.out.println("IO异常"); e.printStackTrace(); //return false;//出异常返回false } return false; }}
uuid的随机生成,日期时间格式的转换,打散目录的获取
package cn.hncu.myUtils;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;import org.junit.Test;//我的工具类--具体实现的功能有:1)随机生成uuid;2)把时间格式转换成项目需求;3)创建打散目录public class MyUtils { //随机生成uuid public static String getUuid(){ return UUID.randomUUID().toString().replace("-", ""); } //把时间格式转换成项目需求// @Test// public void getFormateDate(){// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//给定一个指定格式// String str = sdf.format(new Date());// System.out.println(str);// } private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//给定一个指定格式 public static String getFormateDate(){ return sdf.format(new Date()); } //创建打散目录 public static String getDir(String uuid){ String dir1 = Integer.toHexString(uuid.hashCode()&0xf); String dir2 = Integer.toHexString((uuid.hashCode()&0xf0)>>4); return dir1+"/"+dir2; }}
0 0
- 小小相册
- 小小
- 相册
- 相册
- 相册
- 相册
- 相册
- 相册
- 相册
- 相册
- 编程小小小小问题
- 小小麻雀
- 小小卡片!
- 小小笑话
- 小小备份
- 小小黑白片
- 小小一步
- 小小功能
- Ubuntu软件下载源
- Python3中Django使用pymysql自动建表
- File system
- NYOJ 301 递推求值
- 【二分图匹配】
- 小小相册
- 4329-Ping pong
- HDU 1281 棋盘游戏【二分匹配】
- Linux磁盘分区的详细步骤(图解linux分区命令使用方法)
- 循环链表的操作
- Python尾递归
- makefile编写小结:多目录,单Makefile(改进)
- Linux写时拷贝技术(copy-on-write)
- Android基础 Android中的Handler, Looper, MessageQueue和Thread