转载自:http://www.cnblogs.com/CheeseZH/archive/2013/03/05/2943899.html


项目整体目录结构

1、搭建Struts2框架

(1)导入Struts2相关jar包

(2)配置web.xml文件

复制代码

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5"  3     xmlns="http://java.sun.com/xml/ns/javaee"  4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7      8     <filter> 9         <filter-name>struts2</filter-name>10         <filter-class>11             org.apache.struts2.dispatcher.FilterDispatcher12         </filter-class>13     </filter>14 15     <filter-mapping>16         <filter-name>struts2</filter-name>17         <url-pattern>/*</url-pattern>18     </filter-mapping>19   <welcome-file-list>20     <welcome-file>index.jsp</welcome-file>21   </welcome-file-list>22 </web-app>

复制代码

(3)配置struts.xml文件

复制代码

 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4     "http://struts.apache.org/dtds/struts-2.0.dtd"> 5  6 <struts> 7  8     <constant name="struts.custom.i18n.resources" value="message" />  9     10     <constant name="struts.i18n.encoding" value="gbk"></constant>11     12     <!-- 上传过程中临时文件存放目录 -->13     <constant name="struts.multipart.saveDir" value="c:\"></constant>14     15     <package name="struts2" extends="struts-default">16     17         <action name="upload"18             class="com.broadengate.struts.UploadAction">19             <result name="success">/uploadResult.jsp</result>20             <result name="input">/index.jsp</result>21             <!-- 定义文件上传拦截器 -->22             <interceptor-ref name="fileUpload">23                 <!-- 设置文件上传大小 -->24                 <param name="maximumSize">409600</param>25                 <!-- 设置文件上传类型 
26                 <param name="allowedTypes">27                     application/vnd.ms-powerpoint28                 </param>29                 -->30             </interceptor-ref>31             <!-- 自定义了拦截器后必手动定义默认的拦截器,否则默认的拦截器不会被执行 -->32             <interceptor-ref name="defaultStack"></interceptor-ref>33         </action>34         35     </package>36 37 </struts>

复制代码

2、index.jsp上传功能页面代码

要注意第6行,引入了struts2的tags的uri,否则tomcat不认识<s:...>标签

复制代码

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 <%@ taglib prefix="s" uri="/struts-tags"%> 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9   <head>10     <base href="<%=basePath%>">11     12     <title>My JSP 'index.jsp' starting page</title>13     <meta http-equiv="pragma" content="no-cache">14     <meta http-equiv="cache-control" content="no-cache">15     <meta http-equiv="expires" content="0">    
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">17     <meta http-equiv="description" content="This is my page">18     <!--19     <link rel="stylesheet" type="text/css" href="styles.css">20     -->21   </head>22   23   <body>24 25         <s:form action="upload" theme="simple" enctype="multipart/form-data">26             <table align="center" width="50%" border="1">27                 <tr>28                     <td>username</td>29                     <td><s:textfield name="username"></s:textfield></td>30                 </tr>31                 <tr>32                     <td>password</td>33                     <td><s:password name="password"></s:password></td>34                 </tr>35                 <tr>36                     <td>file</td>37                     <td id="more">38                         <s:file name="file"></s:file>39                         <input type="button" value="Add More.." οnclick="addMore()">40                     </td>41                 </tr>42                 <tr>43                     <td><s:submit value=" submit "></s:submit></td>44                     <td><s:reset value=" reset "></s:reset></td>45                 </tr>46             </table>47         </s:form>48   </body>49 <script type="text/javascript">        
50 function addMore()51 {52     var td = document.getElementById("more");53     54     var br = document.createElement("br");55     var input = document.createElement("input");56     var button = document.createElement("input");57     58     input.type = "file";59     input.name = "file";60     61     button.type = "button";62     button.value = "Remove";63     64     button.onclick = function()65     {66         td.removeChild(br);67         td.removeChild(input);68         td.removeChild(button);69     }70     td.appendChild(br);71     td.appendChild(input);72     td.appendChild(button);73 }74 </script>75 </html>

复制代码

3、UploadAction.java,在struts.xml中配置的用于响应index.jsp页面中form的action属性的对应类

复制代码

  1 package com.broadengate.struts;  2   3 import java.io.File;  4 import java.io.FileInputStream;  5 import java.io.FileOutputStream;  6 import java.io.InputStream;  7 import java.io.OutputStream;  8 import java.util.ArrayList;  9 import java.util.List; 10  11 import org.apache.struts2.ServletActionContext; 12  13 import com.opensymphony.xwork2.ActionSupport; 14  15 public class UploadAction extends ActionSupport { 16     private String username; 17  18     private String password; 19  20     private List<File> file; 21  22     private List<String> fileFileName; 23  24     private List<String> fileContentType; 25  26     private List<String> dataUrl; 27      28  29     @Override 30     public String execute() throws Exception { 31         dataUrl = new ArrayList<String>(); 32         // · 33         String imgpath = "upload/"; 34         for (int i = 0; i < file.size(); ++i) { 35             InputStream is = new FileInputStream(file.get(i)); 36  37             String path = ServletActionContext.getServletContext().getRealPath("/"); 38             System.out.println(path); 39         //    String root = "D:\\"; 40  41             dataUrl.add(imgpath+this.getFileFileName().get(i)); 42             File destFile = new File(path+imgpath, this.getFileFileName().get(i)); 43  44             OutputStream os = new FileOutputStream(destFile); 45  46             byte[] buffer = new byte[400]; 47  48             int length = 0; 49  50             while ((length = is.read(buffer)) > 0) { 51                 os.write(buffer, 0, length); 52             } 53  54             is.close(); 55  56             os.close(); 57         } 58         return SUCCESS; 59     } 60  61      62      63      64     public String getUsername() { 65         return username; 66     } 67  68     public void setUsername(String username) { 69         this.username = username; 70     } 71  72     public String getPassword() { 73         return password; 74     } 75  76     public List<String> getDataUrl() { 77         return dataUrl; 78     } 79  80  81  82  83     public void setDataUrl(List<String> dataUrl) { 84         this.dataUrl = dataUrl; 85     } 86  87  88  89  90     public void setPassword(String password) { 91         this.password = password; 92     } 93  94     public List<File> getFile() { 95         return file; 96     } 97  98     public void setFile(List<File> file) { 99         this.file = file;100     }101 102     public List<String> getFileFileName() {103         return fileFileName;104     }105 106     public void setFileFileName(List<String> fileFileName) {107         this.fileFileName = fileFileName;108     }109 110     public List<String> getFileContentType() {111         return fileContentType;112     }113 114     public void setFileContentType(List<String> fileContentType) {115         this.fileContentType = fileContentType;116     }117 }

复制代码

4、显示上传结果页面uploadResult.jsp

复制代码

 1 <%@ page language="java" contentType="text/html; charset=GB18030" 2     pageEncoding="GB18030"%> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 %>   
 7 <%@ taglib prefix="s" uri="/struts-tags" %> 8   9 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">10 <html>11 <head>12 <base href="<%=basePath%>">13 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">14 <title>Insert title here</title>15 </head>16 <body>17 <%=basePath %>18 username: <s:property value="username"/><br>19 20 password: <s:property value="password"/><br>21 22 file: <s:property value="fileFileName"/>23 24 25 <s:iterator id="imgUrl" value="dataUrl">26     <br /><img src="${imgUrl}"/>27 </s:iterator>28 </body>29 </html>

复制代码

5、我的Tomcat安装在D盘,要在“D:\Tomcat6.0\webapps\MyUpload”文件夹下新建一个upload文件夹,否则运行会报错,提示找不到路径,这个功能也可以在代码中添加。下边是运行效果:

(1)上传页面

(2)结果显示

ps:第一行的路径是写程序时做测试用的,没有实际意义。