首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

jsp\struts1.2\struts2 中文件下传

2012-10-31 
jsp\struts1.2\struts2 中文件上传刚刚做了三个文件上传的Demoa.在jsp中简单利用Commons-fileupload组件实

jsp\struts1.2\struts2 中文件上传
刚刚做了三个文件上传的Demo
a.在jsp中简单利用Commons-fileupload组件实现
b.在struts1.2中实现
c.在sturts2中实现
现在把Code与大家分享一下..
注:此为三个简单Demo,仅供练习用,并没有做太多上传限制
如有兴趣可以自行查看相关文档说明

一.在JSP环境中利用Commons-fileupload组件实现文件上传
   1.页面upload.jsp清单如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>The FileUpload Demo</title>  </head>    <body>    <form action="UploadFile" method="post" enctype="multipart/form-data">    <p><input type="text" name="fileinfo" value="">文件介绍</p>    <p><input type="file" name="myfile" value="浏览文件"></p>    <p><input type="submit" value="上 传"></p>    </form>  </body></html>

注意:在上传表单中,既有普通文本域也有文件上传域

2.FileUplaodServlet.java清单如下:
package org.chris.fileupload;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.*;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class FileUplaodServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//文件的上传部分boolean isMultipart = ServletFileUpload.isMultipartContent(request);if(isMultipart){try {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload fileload = new ServletFileUpload(factory);// 设置最大文件尺寸,这里是4MB    fileload.setSizeMax(4194304);List<FileItem> files = fileload.parseRequest(request);Iterator<FileItem> iterator = files.iterator();while(iterator.hasNext()){FileItem item = iterator.next();if(item.isFormField()){String name = item.getFieldName();String value = item.getString();System.out.println("表单域名为: " + name + "值为: " + value);}else{//获得获得文件名,此文件名包括路径String filename = item.getName();if(filename != null){File file = new File(filename);//如果此文件存在if(file.exists()){File filetoserver = new File("d:\\upload\",file.getName());item.write(filetoserver);System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");}}}}} catch (Exception e) {System.out.println(e.getStackTrace());}}}}

3.web.xml清单如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>UploadFileServlet</servlet-name><servlet-class>org.chris.fileupload.FileUplaodServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadFileServlet</servlet-name><url-pattern>/UploadFile</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/Index.jsp</welcome-file></welcome-file-list></web-app>


二.在strut1.2中实现
1.上传页面file.jsp 清单如下:
<%@ page language="java" pageEncoding="ISO-8859-1"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <html> <head><title>JSP for FileForm form</title></head><body><html:form action="/file" enctype="multipart/form-data"><html:file property="file1"></html:file><html:submit/><html:cancel/></html:form></body></html>


2.FileAtion.java的清单如下:
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */package 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 org.apache.struts.upload.FormFile;import form.FileForm;/**  * @author Chris * Creation date: 6-27-2008 *  * XDoclet definition: * @struts.action path="/file" name="fileForm" input="/file.jsp" */public class FileAction 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) {FileForm fileForm = (FileForm) form;FormFile file1=fileForm.getFile1();if(file1!=null){//上传路径String dir=request.getSession(true).getServletContext().getRealPath("/upload");OutputStream fos=null;try {fos=new FileOutputStream(dir+"/"+file1.getFileName());fos.write(file1.getFileData(),0,file1.getFileSize());fos.flush();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try{fos.close();}catch(Exception e){}}}//页面跳转return mapping.findForward("success");}}


3.FileForm.java的清单如下:
package form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;import org.apache.struts.upload.FormFile;/**  * @author Chris * Creation date: 6-27-2008 *  * XDoclet definition: * @struts.form name="fileForm" */public class FileForm extends ActionForm {/* * Generated Methods */private FormFile file1;/**  * Method validate * @param mapping * @param request * @return ActionErrors */public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {// TODO Auto-generated method stubreturn null;}/**  * Method reset * @param mapping * @param request */public void reset(ActionMapping mapping, HttpServletRequest request) {// TODO Auto-generated method stub}public FormFile getFile1() {return file1;}public void setFile1(FormFile file1) {this.file1 = file1;}}

4.struts-config.xml的清单如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>  <data-sources />  <form-beans >    <form-bean name="fileForm" type="form.FileForm" />  </form-beans>  <global-exceptions />  <global-forwards />  <action-mappings >    <action      attribute="fileForm"      input="/file.jsp"      name="fileForm"      path="/file"      type="action.FileAction"      validate="false">       <forward name="success" path="/file.jsp"></forward>      </action>  </action-mappings>  <message-resources parameter="ApplicationResources" /></struts-config>

5.web.xml代码清单如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  <servlet>    <servlet-name>action</servlet-name>    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>    <init-param>      <param-name>config</param-name>      <param-value>/WEB-INF/struts-config.xml</param-value>    </init-param>    <init-param>      <param-name>debug</param-name>      <param-value>3</param-value>    </init-param>    <init-param>      <param-name>detail</param-name>      <param-value>3</param-value>    </init-param>    <load-on-startup>0</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>action</servlet-name>    <url-pattern>*.do</url-pattern>  </servlet-mapping></web-app>


三.在struts2中实现(以图片上传为例)
1.FileUpload.jsp代码清单如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html>  <head>  <title>The FileUplaodDemo In Struts2</title>  </head>    <body>    <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">    <s:file name="myFile" label="MyFile" ></s:file>    <s:textfield name="caption" label="Caption"></s:textfield>    <s:submit label="提交"></s:submit>    </s:form>  </body></html>


2.ShowUpload.jsp的功能清单如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html>  <head>    <title>ShowUpload</title>  </head>    <body>    <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >         <img src ='UploadImages/<s:property value ="imageFileName"/> '/>        <br />         <s:property value ="caption"/>     </div >   </body></html>


3.FileUploadAction.java的代码清单如下 :
package com.chris;import java.io.*;import java.util.Date;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport{ private static final long serialVersionUID = 572146812454l ;     private static final int BUFFER_SIZE = 16 * 1024 ;         //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定     //所以同时要提供myFileContentType,myFileFileName的set方法          private File myFile;//上传文件     private String contentType;//上传文件类型     private String fileName;//上传文件名     private String imageFileName;     private String caption;//文件说明,与页面属性绑定         public void setMyFileContentType(String contentType)  {     System.out.println("contentType : " + contentType);         this .contentType = contentType;    }          public void setMyFileFileName(String fileName)  {     System.out.println("FileName : " + fileName);         this .fileName = fileName;    }              public void setMyFile(File myFile)  {         this .myFile = myFile;    }          public String getImageFileName()  {         return imageFileName;    }          public String getCaption()  {         return caption;    }        public void setCaption(String caption)  {         this .caption = caption;    }          private static void copy(File src, File dst)  {         try  {            InputStream in = null ;            OutputStream out = null ;             try  {                                in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);                out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);                 byte [] buffer = new byte [BUFFER_SIZE];                 while (in.read(buffer) > 0 )  {                    out.write(buffer);                }              } finally  {                 if ( null != in)  {                    in.close();                }                   if ( null != out)  {                    out.close();                }             }          } catch (Exception e)  {            e.printStackTrace();        }     }          private static String getExtention(String fileName)  {         int pos = fileName.lastIndexOf(".");         return fileName.substring(pos);    }      @Override     public String execute()      {                imageFileName = new Date().getTime() + getExtention(fileName);        File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileName);        copy(myFile, imageFile);         return SUCCESS;    }}

注:此时仅为方便实现Action所以继承ActionSupport,并Overrider execute()方法
  在struts2中任何一个POJO都可以作为Action

4.struts.xml清单如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="example" namespace="/" extends="struts-default"><action name="fileUpload" name="code"><?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><filter >         <filter-name > struts-cleanup </filter-name >         <filter-class >             org.apache.struts2.dispatcher.ActionContextCleanUp        </filter-class >     </filter >      <filter-mapping >         <filter-name > struts-cleanup </filter-name >         <url-pattern > /* </url-pattern >     </filter-mapping ><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>  <welcome-file-list>    <welcome-file>Index.jsp</welcome-file>  </welcome-file-list>  </web-app>

热点排行