Struts2(13):Struts2的上传下载续2

本节主要介绍上传任意数据的文件、指定文件类型上传与Struts2的下载

1,首先改造upload.jsp,写了个JS事件,可以添加删除上传框。可以上传任意多(大于等于1)个文件!

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib  prefix="s" uri="/struts-tags"%>
<html>
<script type="text/javascript">
function addMore()
{
	var td = document.getElementById("more");
	var br = document.createElement("br");
	var input = document.createElement("input");
	var button = document.createElement("input");
	
	input.type="file";
	input.name="file";
	
	button.type="button";
	button.value="Remove";
	
	button.onclick = function(){
		td.removeChild(br);
		td.removeChild(input);
		td.removeChild(button);
	}
	
	td.appendChild(br);
	td.appendChild(input);
	td.appendChild(button);
}
</script>
  <body>
  		<table>
  			<tr><td>
  				<s:fielderror cssStyle="color:red"/>
  			</td></tr>
  		</table>
	   <s:form action="upload" theme="simple" enctype="multipart/form-data">
	  	<table align="center" width="40%">
		    <tr>
		    	<td>username:</td>
		    	<td><s:textfield name="username"></s:textfield></td>
		    </tr>
		    <tr>
		    	<td>password:</td>
		    	<td><s:password name="password"></s:password></td>
		    </tr>
		    <tr>
		    	<td>file:</td>
		    	<td id="more"><!-- 定义一个id,方便javascript调用 -->
		    		<s:file name="file"></s:file>
		    		<input type="button" value="Add More..." οnclick="addMore()">
		    	</td>
		    </tr>
		    <tr>
		    	<td><s:submit></s:submit></td>
		    	<td><s:reset></s:reset></td>
		    </tr>
	    </table>
	  </s:form>
  </body>
</html>

 2,UploadAction.java

package com.test.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	private String username;
	private String password;
	private List<File> file;
	//下面两个变量是文件名与文件类型,Struts2会自动为以下两变量赋值
	private List<String> fileFileName;
	private List<String> fileContentType;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public List<File> getFile() {
		return file;
	}
	public void setFile(List<File> file) {
		this.file = file;
	}
	public List<String> getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}
	public List<String> getFileContentType() {
		return fileContentType;
	}
	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}
	public String execute() throws Exception {
		for(int i = 0;i < file.size(); i++){
			InputStream is = new FileInputStream(file.get(i));
			String root = ServletActionContext.getRequest().getRealPath("upload");
			File destFile = new File(root,this.getFileFileName().get(i));
			OutputStream os = new FileOutputStream(destFile);
			byte[] buffer = new byte[400];
			int length = 0;
			while((length= is.read(buffer)) > 0){
				os.write(buffer, 0, length);
			}
			is.close();
			os.close();
		}
		return SUCCESS;
	}
}

 3,struts.xml

<action name="upload" class="com.test.action.UploadAction">
	<result name="success">/uploadResult.jsp</result>
	<result name="input">/upload.jsp</result>
	<interceptor-ref name="fileUpload">
		<!--指定上传文件大小,下面是400K-->
		<param name="maximumSize">409600</param>
		<!--指定上传文件类型,这里只允许上传PPT文件,文件类型名可以在Tomcat的conf\web.xml中查找-->
		<param name="allowedTypes">application/vnd.ms-powerpoint</param>			
	</interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref>
</action>

以上就完成了一个多文件,指定文件类型上传功能。

 Struts2的下载实现

download.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
  <body>
  	<s:a href="/struts2/download.action">downlaod</s:a>
  </body>
</html>

 

DownloadAction.java

 

package com.test.action;

import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport {
	
	public InputStream getDownloadFile(){
		return ServletActionContext.getServletContext().getResourceAsStream("upload/11.ppt");
	}
	
	public String execute() throws Exception {
		return SUCCESS;
	}
}

struts.xml

<action name="download" class="com.test.action.DownloadAction">
				<result name="success" type="stream">
					<!--下载文件的类型-->
					<param name="contentType">application/vnd.ms-powerpoint</param>
					<!--指定下载文件的默认文件名-->		
					<param name="contentDisposition">filename="Struts2.ppt"</param>
					<!--对应的getDownloadFile类中的getDownloadFile方法-->
					<param name="inputName">downloadFile</param>	
				</result>
</action>

  

资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展与成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以扩展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值