Struts2实现图片上传功能

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.." ο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)上传页面

Struts2实现图片上传功能

(2)结果显示

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

Struts2实现图片上传功能

本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2013/03/05/2943899.html,如需转载请自行联系原作者

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107970.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Python+PyCharm下载安装教程「建议收藏」

    Python+PyCharm下载安装教程「建议收藏」Python下载网址如下:https://www.python.org/downloads/单击Download进入下载页面,根据所用操作系统类型选择相应的Python安装文件进行下载(例如Windows7的32位操作系统选择Windowsx86executableinstaller进行下载、64位操作系统选择Windowsx86-64executableinstaller)Python安装注意勾选AddPython3.7toPATH选择,这样python的路径自动

  • linux pstree 命令,Linux pstree命令

    linux pstree 命令,Linux pstree命令Linuxpstree命令Linuxpstree命令将所有行程以树状图显示,树状图将会以pid(如果有指定)或是以init这个基本行程为根(root),如果有指定使用者id,则树状图会只显示该使用者所拥有的行程。使用权限:所有使用者。语法pstree[-a][-c][-h|-Hpid][-l][-n][-p][-u][-G|-U][pid|user]或pstre…

  • SSDP协议_固态硬盘两种协议

    SSDP协议_固态硬盘两种协议SSDP,即简单服务发现协议(SSDP,SimpleServiceDiscoveryProtocol),是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。 实现简单服务发现协议是在HTTPU和HTTPMU的基础上实现的协议。按照协议的规定,当一个控制点(客户端)接入网络的时候,它可以向一个特定的多播地址的SSDP端口使用M-SEARCH方法发送“ssdp:…

    2022年10月11日
  • java线程间通信的几种方法_socket通信原理 java

    java线程间通信的几种方法_socket通信原理 javaJava线程间通信

  • Linux renice_free linux

    Linux renice_free linuxLinuxnice和renice命令教程(7个示例)Linux命令行的威力可以从以下事实来衡量:您甚至可以使用命令行工具轻松调整进程的调度优先级。是的,这是可能的,在本教程中,我们将讨论如何使用nice和renice实用程序来实现这一点。但在这之前,值得一提的是本文中的所有示例都已在Ubuntu16.04LTS系统上进行了测试。Linuxnice和renice命令尽管nice命令允许您以修…

  • 数据可视化之美 — 以Matlab、Python为工具

    数据可视化之美 — 以Matlab、Python为工具在我们科研、工作中,将数据完美展现出来尤为重要。数据可视化是以数据为视角,探索世界。我们真正想要的是—数据视觉,以数据为工具,以可视化为手段,目的是描述真实,探索世界。下面介绍一些数据可视化的作品(包含部分代码),主要是地学领域,可迁移至其他学科。Example1:importnumpyasnpimportmatplotlib.pyplotasplt#创建随机数n=100000x=np.random.randn(n)y=(1.5*x)+np.ra

    2022年10月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号