JSP/Struts1/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 block  
                e.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 stub  
        return 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" class="com.chris.FileUploadAction">  
        <interceptor-ref name="fileUploadStack"/>  
        <result>/ShowUpload.jsp</result>  
        </action>  
    </package>  
</struts>  




5.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">  
    <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>  














你可能感兴趣的:(java,apache,jsp,xml,struts)