这里有新鲜出炉的Java设计模式,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了相册管理系统的实现步骤,Java表单的文件上传和下载,xml数据库存储信息,感兴趣的小伙伴们可以参考一下
功能文件的上传,下载和管理
技术:1.用xml当做数据库存储信息(dom4j,xpath)
2.Java表单的文件上传和下载
3.文件目录的打散 ( Hash目录是一种优化文件存储性能的方法)
需要的jar包:
commons-fileupload-1.2.2.jar、commons-io-2.1.jar、dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar
--------------------------------------------------------------------------------
先写index.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>
- <h1>我的小相册</h1>
- <a href="jsps/upload.jsp">上传相册</a>
- <a href="servlets/ShowServlet">浏览相册</a>
- </body>
- </html>
upload.jsp是下载页面放在jsps目录下
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- </head>
- <body>
- <h1>相处上传</h1>
- <form action="<%=request.getContextPath()%>/servlets/UploadServlet"
- method="post" enctype="multipart/form-data">
- 文件:<input type="file" name="file1"/><br/>
- 说明:<input type="text" name="desc" /><br/>
- <input type="submit" value="上传" />
- </form>
- </body>
- </html>
photos.xml放在src目录下
- <?xml version="1.0" encoding="UTF-8" ?>
- <photos>
- </photos>
在写值对象PhotoModel
- package cn.hncu.demain;
- public class PhotoModel {
- private String id;
- private String realName;
- private String ext;
- private String dir;
- private String dateTime;
- private String ip;
- private String desc;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getRealName() {
- return realName;
- }
- public void setRealName(String realName) {
- this.realName = realName;
- }
- public String getExt() {
- return ext;
- }
- public void setExt(String ext) {
- this.ext = ext;
- }
- public String getDir() {
- return dir;
- }
- public void setDir(String dir) {
- this.dir = dir;
- }
- public String getDateTime() {
- return dateTime;
- }
- public void setDateTime(String dateTime) {
- this.dateTime = dateTime;
- }
- public String getIp() {
- return ip;
- }
- public void setIp(String ip) {
- this.ip = ip;
- }
- public String getDesc() {
- return desc;
- }
- public void setDesc(String desc) {
- this.desc = desc;
- }@Override public String toString() {
- return "PhotoModel [id=" + id + ", realName=" + realName + ", ext=" + ext + ", dir=" + dir + ", dateTime=" + dateTime + ", ip=" + ip + ", desc=" + desc + "]";
- }
- }
写工具类两个:
MyUtil(日期格式化,目录打散代码,随机id代码)
- package cn.hncu.utils;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.UUID;
- public class MyUtils {
- private MyUtils() {}
- private static SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
- public static String getCurrentDateTime() {
- return format.format(new Date());
- }
- public static String getUUid() {
- UUID uuid = UUID.randomUUID();
- String id = uuid.toString().replaceAll("-", "");
- return id;
- }
- public static String getDir(String uuid) {
- String dir1 = Integer.toHexString(uuid.hashCode() & 0xf);
- String dir2 = Integer.toHexString((uuid.hashCode() & 0xf0) >> 4);
- return dir1 + "/" + dir2;
- }
- }
Dom4jFactory(dom4j的相关操作,获取document对象,保存操作)
- package cn.hncu.utils;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.UnsupportedEncodingException;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.io.OutputFormat;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
- public class Dom4jFactory {
- private static Document dom = null;
- private static String path;
- static {
- try {
- SAXReader sax = new SAXReader();
- // 学习一下服务器下的资源路径加载方式(因为我们的资源已经从MyEclipse中发布到Tomcat服务器中了,所以跟原来纯Java项目不一样了)
- // 利用当前类找到它的类加载器,然后通过该类加载器再去获得资源路径
- path = Dom4jFactory.class.getClassLoader().getResource("photos.xml").getPath();
- dom = sax.read(new FileInputStream(path));
- } catch(Exception e) {
- throw new RuntimeException(e.getMessage(), e);
- }
- }
- public static Document getDom() {
- return dom;
- }
- public static boolean save() {
- try {
- OutputFormat format = new OutputFormat();
- format.setEncoding("utf-8");
- XMLWriter w = new XMLWriter(new FileOutputStream(new File(path)), format);
- w.write(dom);
- w.close();
- return true;
- } catch(Exception e) {
- return false;
- }
- }
- }
从底层写PhotoDao
- 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.demain.PhotoModel;
- import cn.hncu.utils.Dom4jFactory;
- public class PhotoDao {
- //添加
- public boolean add(PhotoModel photo) {
- Document dom = Dom4jFactory.getDom();
- Element root = dom.getRootElement();
- Element ePhoto = root.addElement("photo");
- ePhoto.addAttribute("id", photo.getId());
- ePhoto.addAttribute("realName", photo.getRealName());
- ePhoto.addAttribute("dir", photo.getDir());
- ePhoto.addAttribute("ip", photo.getIp());
- ePhoto.addAttribute("dateTime", photo.getDateTime());
- ePhoto.addAttribute("ext", photo.getExt());
- ePhoto.addElement("desc").setText(photo.getDesc());
- boolean boo = Dom4jFactory.save();
- return boo;
- }
- //浏览
- public List < PhotoModel > getAll() {
- Document dom = Dom4jFactory.getDom();
- List < PhotoModel > list = new ArrayList < PhotoModel > ();
- Element root = dom.getRootElement();
- Iterator < Element > it = root.elementIterator();
- while (it.hasNext()) {
- PhotoModel photo = new PhotoModel();
- Element e = it.next();
- photo.setId(e.attributeValue("id"));
- photo.setDateTime(e.attributeValue("dateTime"));
- photo.setDir(e.attributeValue("dir"));
- photo.setExt(e.attributeValue("ext"));
- photo.setIp(e.attributeValue("ip"));
- photo.setRealName(e.attributeValue("realName"));
- photo.setDesc(e.elementText("desc"));
- list.add(photo);
- }
- return list;
- }
- public PhotoModel getSingleById(String id) {
- Document dom = Dom4jFactory.getDom();
- List < PhotoModel > list = getAll();
- for (PhotoModel photo: list) {
- if (photo.getId().equals(id)) {
- return photo;
- }
- }
- return null;
- }
- public boolean del(String id) {
- Document dom = Dom4jFactory.getDom();
- Element e = (Element) dom.selectSingleNode("//photo[@id='" + id.trim() + "']");
- return e.getParent().remove(e);
- }
- }
最后写四个servlet
UploadServlet 上传Servlet代码
- package cn.hncu.servlets;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- 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 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 cn.hncu.dao.PhotoDao;
- import cn.hncu.demain.PhotoModel;
- import cn.hncu.utils.MyUtils;
- public class UploadServlet extends HttpServlet {
- 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>A Servlet</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 {
- response.setContentType("text/html;charset=utf-8");
- PrintWriter out = response.getWriter();
- String path = request.getServletContext().getRealPath("/photos");
- DiskFileItemFactory factory = new DiskFileItemFactory();
- factory.setRepository(new File("g:/a"));
- ServletFileUpload upload = new ServletFileUpload(factory);
- upload.setSizeMax(1024 * 1024 * 10); //最大10M
- upload.setHeaderEncoding("utf-8"); //用于设置文件名的编码,相当于:request.setCharacterEncoding("utf-8");
- FileItem fi = null;
- try {
- List < FileItem > list = upload.parseRequest(request);
- PhotoModel photo = new PhotoModel(); //数据封装---需要7个属性
- boolean boo = false;
- InputStream in =null;
- for (FileItem fi2: list) {
- fi = fi2;
- if (fi.isFormField()) {
- String desc = fi.getString("utf-8");
- photo.setDesc(desc); //desc
- } else { in =fi.getInputStream();
- String realName = fi.getName();
- if (realName == null || realName.trim().equals("")) {
- out.print("没有选择文件!");
- return;
- }
- if (realName.indexOf("\\") != -1) {
- realName = realName.substring(realName.lastIndexOf("\\") + 1);
- }
- photo.setRealName(realName); //真实文件名
- String ext = realName.substring(realName.lastIndexOf("."));
- photo.setExt(ext); //3
- photo.setDateTime(MyUtils.getCurrentDateTime()); //4
- photo.setId(MyUtils.getUUid()); //5
- photo.setDir(MyUtils.getDir(photo.getId())); //6
- photo.setIp(request.getRemoteAddr()); //7
- }
- }
- //把相片信息存储到数据库
- PhotoDao dao = new PhotoDao();
- boo = dao.add(photo);
- //如果上面的相片信息保存成功,那么才开始接收图片文件,把它保存到服务器硬盘
- if (boo) {
- System.out.println(dao);
- path = path + "/" + photo.getDir();
- File dir = new File(path);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- String fileName = path + "/" + photo.getId() + photo.getExt();
- FileUtils.copyInputStreamToFile( in , new File(fileName));
- String strPath = request.getContextPath() + "/servlets/ShowServlet";
- out.print("上传成功!<a href='" + strPath + "'>浏览相册</a>");
- } else {
- out.print("上传失败!");
- }
- } catch(FileUploadException e) {
- throw new RuntimeException("上传失败!", e);
- } finally {
- if (fi != null) {
- fi.delete();
- }
- }
- out.flush();
- out.close();
- }
- }
ShowServlet 浏览相册的Servlet端
- package cn.hncu.servlets;
- 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.demain.PhotoModel;
- public class ShowServlet extends HttpServlet {
- IOException
- if an error occurred
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- response.setContentType("text/html;charset=utf-8");
- request.setCharacterEncoding("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>");
- String table = "<table border='1' width='100%'>" + "<tr><th>文件名</th><th>上传ip</th><th>上传时间</th><th>图片</th><th>说明</th><th>操作</th></tr>";
- out.print(table);
- PhotoDao dao = new PhotoDao();
- List < PhotoModel > list = dao.getAll();
- for (PhotoModel p: list) {
- out.print("<tr>");
- out.println("<td>" + p.getRealName() + "</td>");
- out.println("<td>" + p.getIp() + "</td>");
- out.println("<td>" + p.getDateTime() + "</td>");
- //输出图片
- String path = request.getContextPath() + "/photos/" + p.getDir() + "/" + p.getId() + p.getExt();
- out.println("<td><a href='" + path + "'><img src='" + path + "' width='200' height='200'></img></a></td>");
- String op = "<a href='" + request.getContextPath() + "/servlets/DelServlet?id=" + p.getId() + "'>删除</a> ";
- out.println("<td>" + p.getDesc() + "</td>");
- op += "<a href='" + request.getContextPath() + "/servlets/DownServlet?id=" + p.getId() + "'>下载</a>";
- out.println("<td>" + op + "</td>");
- out.print("</tr>");
- }
- out.println("</table>");
- out.println(" </BODY>");
- out.println("</HTML>");
- out.flush();
- out.close();
- }
- }
DownServlet 下载的服务器代码
- package cn.hncu.servlets;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.net.URLEncoder;
- 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.demain.PhotoModel;
- public class DownServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- String id = request.getParameter("id");
- response.setContentType("application/force-download");
- PhotoModel p = new PhotoDao().getSingleById(id);
- if (p != null) {
- String realName = p.getRealName();
- realName = new String(realName.getBytes("iso8859-1"), "utf-8");
- response.setHeader("content-Disposition", "attachment;filename=\"" + realName + "\"");
- String relpath = getServletContext().getRealPath("/photos/" + p.getDir() + "/" + p.getId() + p.getExt());
- InputStream in =new FileInputStream(relpath);
- OutputStream out = response.getOutputStream();
- System.out.println(relpath);
- byte buf[] = new byte[1024];
- int len = 0;
- while ((len = in.read(buf)) != -1) {
- out.write(buf, 0, len);
- }
- out.close();
- } else {
- response.setContentType("text/html;charset=utf-8");
- response.getWriter().println("该文件已经被删除!");
- }
- }
- }
Delservlet 删除操作的服务器
- package cn.hncu.servlets;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- 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.demain.PhotoModel;
- public class DelServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- doPost(request, response);
- }
- 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();
- String id = request.getParameter("id");
- PhotoModel p = new PhotoDao().getSingleById(id);
- if (p != null) {
- if (!p.getIp().equals(request.getRemoteAddr())) {
- out.println("你无权进行删除!");
- return;
- }
- //※※※※以下部分课后补敲的!!!!
- //1删除数据库中的信息
- PhotoDao dao = new PhotoDao();
- boolean boo = dao.del(id);
- //2把服务器硬盘中的文件删除
- if (boo) {
- String fileName = "photos/" + p.getDir() + "/" + p.getId() + p.getExt();
- String pathFileName = getServletContext().getRealPath(fileName);
- File f = new File(pathFileName);
- if (f.exists()) {
- f.delete();
- }
- String strPath = request.getContextPath() + "/servlets/ShowServlet";
- out.println("相片删除成功!<a href='" + strPath + "'>浏览相册</a>");
- } else {
- out.println("相片删除失败!");
- }
- } else {
- response.setContentType("text/html;charset=utf-8");
- response.getWriter().println("该文件不存在!");
- }
- }
- }
来源: http://www.phperz.com/article/17/1125/360328.html