Struts学习之 实现文件上传、下载操作
一、Struts-cofig.xml流程图
二、register.jsp页面文件
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>My JSP ‘register.jsp‘ starting page</title> </head> <body> <div align="center"> <h1>注册用户</h1> <!-- 如果我們的表單有文件控件,則需要重新指定表單編碼方式 --> <form enctype="multipart/form-data" action="register.do" method="post"> Name:<input type="text" name="name"/><br/> Photo:<input type="file" name="photo"/><br/> <input type="submit" value="注冊用戶"/> </form> </div> </body> </html>
三、RegisterAction文件
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.zkj.struts.action; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import com.zkj.entity.Users; import com.zkj.service.UsersService; import com.zkj.struts.form.UserForm; import com.zkj.utils.UpdownUtils; /** * MyEclipse Struts Creation date: 04-25-2015 * * XDoclet definition: * * @struts.action path="/register" name="userForm" scope="request" */ public class RegisterAction extends Action { /* * Generated Methods */ /** * Method execute * * @param mapping * @param form * @param request * @param response * @return ActionForward */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserForm userForm = (UserForm) form;// TODO Auto-generated method stub // 取出表單數據 String name = userForm.getName(); FormFile ff = userForm.getPhoto(); // 通過formfile我們可以獲取關於用戶上傳文件的各種信息 String sFileName = ff.getFileName(); String sFileNameNew = UpdownUtils.getUuidFileName(sFileName); int fsize = ff.getFileSize(); InputStream is = null; OutputStream os = null; try { // 取得輸入流 is = ff.getInputStream(); // 得到输出流并保存到tomcat服务器的绝对路径 String sPath = request.getSession().getServletContext() .getRealPath("/file"); os = new FileOutputStream(sPath + "\\" + sFileNameNew); int len = 0; byte[] buff = new byte[1024]; // 循环处理 while ((len = is.read(buff)) > 0) { // 读入一段,写入一段 os.write(buff, 0, len); } UsersService service = new UsersService(); try { Users user = new Users(); user.setUsername(name); user.setPhoto(sFileName); user.setPhotouuid(sFileNameNew); service.saveUser(user); } finally { service = null; } } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) try { is.close(); } catch (Exception e) { } if (os != null) try { os.close(); } catch (Exception e) { } } return mapping.findForward("ok"); } }
四、list.jsp页面文件
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 <html> 5 <head> 6 7 <title>My JSP ‘list.jsp‘ starting page</title> 8 </head> 9 10 <body> 11 <div align="center"> 12 <h1>用户列表</h1> 13 <table> 14 <tr> 15 <td>主键</td><td>姓名</td><td>照片</td><td>操作</td> 16 </tr> 17 <c:forEach var="user" items="${arr}"> 18 <tr> 19 <td>${user.userid }</td><td>${user.username }</td> 20 <td><img src="file/${user.photouuid}" width="50px"/></td> 21 <td><a href="downloadFile.do?id=${user.userid}">下载图片文件</a></td> 22 </tr> 23 </c:forEach> 24 </table> 25 </div> 26 </body> 27 </html>
五、ListAction.java文件
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub UsersService us = new UsersService(); try { response.setCharacterEncoding("utf-8"); request.setAttribute("arr", us.getAllUsers()); return mapping.findForward("list"); } catch (Exception e) { e.printStackTrace(); } finally { us = null; } return null; }
六、DownloadFileAction.java
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.zkj.struts.action; import java.io.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.zkj.entity.Users; import com.zkj.service.UsersService; /** * MyEclipse Struts Creation date: 04-26-2015 * * XDoclet definition: * * @struts.action */ public class DownloadFileAction extends Action { /* * Generated Methods */ /** * Method execute * * @param mapping * @param form * @param request * @param response * @return ActionForward */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub // 下句,控制可以显示中文 response.setContentType("text/html;charset=utf-8"); int nId = Integer.parseInt(request.getParameter("id")); InputStream is = null; OutputStream os = null; UsersService us = new UsersService(); try { Users user = us.getUserById(nId); // 得到输出流并保存到tomcat服务器的绝对路径 String sPath = request.getSession().getServletContext() .getRealPath("/file"); String sFileName = sPath + "\\" + user.getPhotouuid(); String sTrueName = user.getPhoto(); //如果源文件名中文,需要进行url编码 sTrueName = java.net.URLEncoder.encode(sTrueName, "utf-8"); //告诉浏览器,有一个文件需要下载 response.setHeader("Content-Disposition", "attachment; filename=" + sTrueName); // 取得輸入流 is = new FileInputStream(sFileName); os = response.getOutputStream(); int len = 0; byte[] buff = new byte[1024]; // 循环处理 while ((len = is.read(buff)) > 0) { // 读入一段,写入一段 os.write(buff, 0, len); } return mapping.findForward("lst"); } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) try { is.close(); } catch (Exception e) { } if (os != null) try { os.close(); } catch (Exception e) { } us = null; } return null; } }
七、关键的UsersService业务处理类基于hibernate实现代码
package com.zkj.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.hibernate.*; import com.zkj.entity.Users; import com.zkj.sessionfactory.HibernateSessionFactory; public class UsersService { public static SessionFactory sf; static { try { // 创建sessionfactory实例 sf = HibernateSessionFactory.getSessionFactory(); } catch (Exception e) { e.printStackTrace(); } } public boolean saveUser(Users user) { boolean result = false; Session session = sf.openSession(); Transaction trans = null; try { trans = session.beginTransaction(); session.save(user); trans.commit(); } catch (Exception e) { if (trans != null) { trans.rollback(); } e.printStackTrace(); } finally { session.close(); } return result; } public ArrayList<Users> getAllUsers() { ArrayList<Users> result = new ArrayList<Users>(); Session session = sf.openSession(); try { List list = session.createQuery("from com.zkj.entity.Users u") .list(); Iterator it = list.iterator(); while (it.hasNext()) { Users user = (Users) it.next(); result.add(user); } } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } return result; } public Users getUserById(int aId) { Users result = null; Session session = sf.openSession(); try { List lst = session.createQuery( "from com.zkj.entity.Users u where u.userid=" + aId).list(); Iterator it = lst.iterator(); if (it.hasNext()) { result = (Users) it.next(); } } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } return result; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。