发布于 2016-07-05 00:34:33 | 155 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

Struts Java MVC框架

Struts 是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。


struts2中实现多个文件同时上传代码,需要的朋友可以参考一下

在upload.jsp页面中将多个文件域对象命名为相同的名字,这样在action中就可以将多个文件域解析成一个数组,数组的大小就是文件域的个数,同时一个文件域解析成三个对应的变量,因此多个文件域对应三个数组,其中每个数组的大小就是文件域的个数。jsp页面代码如下:


<form action="upload.action" name="uploadForm" method="post" enctype="multipart/form-data">
文件标题:<input type="text" name="title"/><br/>
选择文件-:<input type="file" name="upload"/><br/>
选择文件二:<input type="file" name="upload"/><br/>
选择文件三:<input type="file" name="upload"/><br/>
<input type="submit" value="upload"/>

</form>

对应的Action依次遍历所有文件域,然后生成对应的输入文件流,输出文件流在指定的服务器保存路径中添加对应的输出文件流保存文件。同时动态指定服务器上文件的 保存路径。

action代码如下:


package com.inspur.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
private String title;
private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;
private String savePath;

public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String upload()throws Exception{
File[] files=this.getUpload();
for(int i=0;i<files.length;i++){
FileOutputStream fos=new FileOutputStream(this.getSavePath()+"\\"+this.getUploadFileName()[i]);
byte[] buffer=new byte[1024];
FileInputStream fis=new FileInputStream(files[i]);
int len=0;
while((len=fis.read(buffer))>0){
fos.write(buffer,0,len);
}
}


return SUCCESS;
}

}

struts.xml文件配置如下:配置文件上传的拦截器,允许 的上传文件类型,上传文件大小限制,同时引入defaultStack拦截器和上传文件在服务器上的保存位置


<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.i18n.encoding" value="gbk"></constant>
<package name="uploadMult" extends="struts-default" namespace="/">
<action name="upload" class="com.inspur.action.UploadAction" method="upload">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<param name="maximumSize">20000000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<param name="savePath">/upload</param>
<result name="success">/success.jsp</result>
<result name="input">/upload.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>

</struts>


web.xml文件代码如下:配置了struts-cleanup过滤器,对文件的上传功能没有直接的影响,但是作为struts核心过滤器的辅助类是系统更加稳定,消除未知的异常。

<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

在上传成功界面显示所有上传的图片:

success.jsp页面代码如下:


文件标题:<s:property value="title"/><br/>
第一个图片:<img alt="first" src="<s:property value="'upload/'+uploadFileName[0]"/>"/><br/>
第二个图片:<img alt="second" src="<s:property value="'upload/'+uploadFileName[1]"/>"/><br/>

strus2同样支持使用list同时上传多个文件,其原理和数组是相同的,没有根本的差别。只不过就是将数组全部改成list。并且修改list的访问方法就可以用list来封装文件域参数。实现多个文件的同时上传。



最新网友评论  共有(0)条评论 发布评论 返回顶部
推荐阅读
最新资讯

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务