Struts2实现图片上传功能

原文地址为: Struts2实现图片上传功能

项目整体目录结构

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.FilterDispatcher
12 </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-powerpoint
28 </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.." onclick="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:第一行的路径是写程序时做测试用的,没有实际意义。


转载请注明本文地址: Struts2实现图片上传功能