struts2 上传

Struts2使用开源项目Apache Jakarta Commons FileUpload和内建的FileUploadInterceptor拦截器实现文件上传,所需的jar包如下:

commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar
commons-io-1.3.1.jar
commons-fileupload-1.2.jar

文件上传页面 fileupload.jsp

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3.   
  4.   
  5.     
  6.     
  7.      
  8.     
  9.       
  10.         
  11.         
  12.       
  13.     
  14.   

这里需要注意的是,formenctype属性必须设置为multipart/form-data

处理文件上传 FileUploadAction.java

  1. package fileupload;   
  2.   
  3. import java.io.File;   
  4. import java.text.DateFormat;   
  5. import java.text.SimpleDateFormat;   
  6. import java.util.Date;   
  7. import java.util.Random;   
  8.   
  9. import javax.servlet.ServletContext;   
  10.   
  11. import org.apache.commons.io.FileUtils;   
  12. import org.apache.struts2.util.ServletContextAware;   
  13.   
  14. import com.opensymphony.xwork2.ActionSupport;   
  15.   
  16. public class FileUploadAction extends ActionSupport implements ServletContextAware {   
  17.        
  18.     private static final long serialVersionUID = -5016873153441103539L;   
  19.        
  20.     private File doc;   
  21.     private String fileName;   
  22.     private String contentType;   
  23.        
  24.     private ServletContext context;   
  25.            
  26.     public void setDoc(File file) {   
  27.         this.doc = file;   
  28.     }   
  29.        
  30.     public void setDocFileName(String fileName) {   
  31.         this.fileName = fileName;   
  32.     }   
  33.        
  34.     public void setDocContentType(String contentType) {   
  35.         this.contentType = contentType;   
  36.     }   
  37.        
  38.     public void setServletContext(ServletContext context) {   
  39.         this.context = context;   
  40.     }   
  41.        
  42.     public String execute() throws Exception {   
  43.         String targetDirectory = ServletActionContext.getServletContext().getRealPath("/upload");   
  44.         String targetFileName = generateFileName(fileName);   
  45.         File target = new File(targetDirectory, targetFileName);   
  46.            
  47.         FileUtils.copyFile(doc, target);   
  48.            
  49.         return SUCCESS;   
  50.     }   
  51.        
  52.     private String generateFileName(String fileName) {   
  53.         DateFormat format = new SimpleDateFormat("yyMMddHHmmss");   
  54.         String formatDate = format.format(new Date());   
  55.            
  56.         int random = new Random().nextInt(10000);   
  57.            
  58.         int position = fileName.lastIndexOf(".");   
  59.         String extension = fileName.substring(position);   
  60.            
  61.         return formatDate + random + extension;   
  62.     }      
  63. }  

fileupload.jsp中,只有doc一个字段,而FileUploadAction.java中,却有三个字段,Struts2怎么通过页面的一个字段设置Action里的三个字段呢?没错,这就是FileUploadInterceptor的功劳了!你所要做的只是按照一定的样式命名这三个字段的set方法,而字段名可以任意命名。第一个File类型的字段的set方法还是以常规的方式命名,另两个String类型的字段的set方法必须分别以“File字段的set方法名+FileName”“File字段的set方法名+ContentType”来命名。

配置文件 struts.xml 

  1.   
  2.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  3.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  4.   
  5.   
  6.   
  7.       
  8.            
  9.           
  10.             /fileupload/upload_success.jsp  
  11.           
  12.        
  13.       
  14.   
  15.   

配置文件 web.xml

  1.   
  2.     xmlns="http://java.sun.com/xml/ns/j2ee"    
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.        
  7.       
  8.         struts-cleanup  
  9.         org.apache.struts2.dispatcher.ActionContextCleanUp  
  10.       
  11.        
  12.       
  13.         struts2  
  14.         org.apache.struts2.dispatcher.FilterDispatcher  
  15.       
  16.        
  17.       
  18.         struts-cleanup  
  19.         /*  
  20.       
  21.        
  22.       
  23.         struts2  
  24.         /*  
  25.       
  26.   
  27.  

你可能感兴趣的:(struts2,struts,encoding,file,filter,extension,random)