Struts2使用common-fileupload组件上传,在项目工程中需要添加common-fileupload.jar和common-io.jar 2个jar
struts.xml配置文件拦截器如下:
<package name="basePackage" extends="struts-default">
<interceptors>
<interceptor-stack name="baseStack">
<!-- 默认异常拦截器 -->
<interceptor-ref name="exception" />
<!-- 异常拦截器 -->
<interceptor-ref name="exceptionInterceptor" />
<!-- 字符串拦截器 -->
<interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="debugging" />
<interceptor-ref name="scopedModelDriven" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="checkbox" />
<interceptor-ref name="multiselect" />
<interceptor-ref name="staticParams" />
<interceptor-ref name="actionMappingParams" />
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError" />
<!-- 配置方法级别的校验 -->
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
<param name="validateAnnotatedMethodOnly">true</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
Action配置如下:
@ParentPackage("xxx")
public class ServiceOrderAction extends BaseAction {
//文件上传工具类
private FileUpload upload;
public String upload()throws exception{
//设置Fileupload工具类的savePath路径
upload.setSavePath("/" + Constant.UPLOAD_FILE_DIR);// 设置附件上传路径
upload.execute();//执行上传
return SUCCESS;
}
}
文件上传工具类FileUpload配置如下:
public class FileUpload {
public static final String STATUS = "status";
public static final String WARN = "warn";
public static final String SUCCESS = "success";
public static final String ERROR = "error";
public static final String MESSAGE = "message";
public static final Integer FileUpLoadFail = 0;//文件上传失败
public static final Integer FileUpLoadSuccess = 1;//文件上传成功
public static final Integer FileExist = 2;//文件已存在
public static final Integer FileFormatError = 3;//文件格式错误
private File file; // 待上传文件 //声明一个File 类型的属性 file任意取名
private String fileFileName;
//获取待上传的文件名,以xxxFileName结尾
private String fileContentType;
//获取上传文件的类型,以xxxContentType结尾
private String formSuffix; // 待上传表单文件扩展名
/**
* 文件保存路径(相对路径,根目录为WebRoot)
* 默认为流程定义文件上传路径
*/
private String savePath = "";
private String fileName = ""; // 文件保存名称
private String serverFilePath = ""; //服务器文件目录+刚上传的文件名
/**
* 可上传文件扩展名,多个扩展名用","分隔,"*"表示不限制
* 默认为流程定义文件扩展名
*/
private String suffix = "xls,XLS,xlsx,XLSX,doc,DOC,docx,DOCX,txt,TXT";
private int uploadLimit = 0; // 文件上传最大值,0表示无限制,单位M
/**
* 执行上传文件
* return
* 0 上传失败
* 1 上传成功
* 2 文件已经存在
*/
public int execute() {
try {
File uploadDir = new File(ServletActionContext.getServletContext().getRealPath(savePath));
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
long crrtime= System.currentTimeMillis();
String ym=DateUtil.getFormateDate("yyyyMM"); //年月
String uploadPath = uploadPath = savePath + ym+"/"+crrtime+"."+formSuffix;
uploadDir = new File(ServletActionContext.getServletContext().getRealPath(uploadPath));
if(uploadDir.exists()){
return FileExist;//文件存在
}
FileUtils.copyFile(file, uploadDir); //使用common-io.jar FileUtils.copyFile()方法进行上传
this.serverFilePath = uploadPath;
return FileUpLoadSuccess;
} catch (IOException e) {
e.printStackTrace();
return FileUpLoadFail;
}
/**
* 文件保存路径(相对路径,根目录为WebRoot)
* 默认为流程定义文件上传路径
* 将路径转换成小写字母
*/
public void setSavePath(String savePath) {
setSavePath(savePath,true);
}
/**
* 文件保存路径(相对路径,根目录为WebRoot)
* 默认为流程定义文件上传路径
* b=true转换路径为小写字母,b=false保持原样
*/
public void setSavePath(String savePath,boolean b) {
if (!StringUtil.toString(savePath).equals("")) {
if (savePath.endsWith("/")) {
this.savePath = b?savePath.toLowerCase():savePath;
}else {
this.savePath = (b?savePath.toLowerCase():savePath) + "/";
}
}
}
* 文件保存路径(相对路径,根目录为WebRoot)
* 默认为流程定义文件上传路径
* 将路径转换成小写字母
*/
public void setSavePath(String savePath) {
setSavePath(savePath,true);
}
/**
* 文件保存路径(相对路径,根目录为WebRoot)
* 默认为流程定义文件上传路径
* b=true转换路径为小写字母,b=false保持原样
*/
public void setSavePath(String savePath,boolean b) {
if (!StringUtil.toString(savePath).equals("")) {
if (savePath.endsWith("/")) {
this.savePath = b?savePath.toLowerCase():savePath;
}else {
this.savePath = (b?savePath.toLowerCase():savePath) + "/";
}
}
}
}
分享到:
相关推荐
在这个主题中,我们将深入探讨Struts2如何实现单文件和多文件上传,并通过拦截器来处理可能出现的异常。 首先,我们来看单文件上传。在Struts2中,使用`<s:file>`标签可以创建一个用于选择文件的输入字段。用户选择...
3. 在Struts2的配置文件(struts.xml)中声明并配置拦截器,指定拦截器的执行顺序和作用范围。 **四、拦截器的配置** Struts2的拦截器可以通过XML或注解两种方式进行配置: - XML配置:在`struts.xml`文件中,...
2. **配置拦截器**:在`struts.xml`配置文件中定义拦截器,指定其执行顺序和关联的Action。 3. **注册拦截器**:将自定义拦截器加入到`struts-default`或`struts-plugin`拦截器栈中,或者创建新的拦截器栈并应用到...
本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现用户权限拦截。 首先,我们需要了解拦截器的工作原理。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截...
Struts2中的拦截器可以通过XML配置文件或注解进行声明。例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 ...
在Struts2配置中,我们需要将这个拦截器添加到拦截器栈中,通常是在`struts.xml`文件中。这样,每次请求到达Action之前,都会先经过这个拦截器: ```xml <struts> ...
3. **配置拦截器**:拦截器可以通过Struts2配置文件或注解进行配置,指定在哪些Action上使用哪些拦截器。 ### 二、单个Action配置拦截器实例 1. **创建拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的...
1. **Struts2配置**:理解`struts.xml`文件的配置,包括Action的配置、拦截器栈的定义等。 2. **拦截器的编写和使用**:创建自定义拦截器类,实现`Interceptor`接口,以及如何在配置文件中引用拦截器。 3. **Action...
在Struts2的核心配置文件`struts.xml`中,我们可以定义拦截器链,指定哪些拦截器应用于哪些Action。 权限控制是web应用中不可或缺的一部分,它可以防止未经授权的用户访问特定资源。在Struts2中,我们可以通过拦截...
2. 注册拦截器:在`struts.xml`配置文件中,声明你的拦截器,并可指定其在拦截器栈中的位置。 ```xml <interceptor name="myInterceptor" class="com.example.MyInterceptor"></interceptor> <!-- 拦截器栈中...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
1. **配置问题**:如果Struts2的配置文件(struts.xml或struts.properties)中拦截器配置有误,可能会导致拦截器链无法正常工作,从而影响到Result的执行。 2. **拦截器逻辑错误**:如果自定义的拦截器在处理过程中...
标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
在压缩包文件`Struts2_Interceptor`中,可能包含了关于Struts2拦截器使用的示例代码、解释文档或者教程,你可以进一步研究这些资源,以便更深入地理解并掌握Struts2拦截器的用法。学习如何创建自定义拦截器,以及...
1. **内置拦截器**:Struts2提供了多种内置拦截器,例如`modelDriven`、`servletConfig`、`chain`、`debugging`等,这些拦截器已经实现了常用的功能,可以直接在配置文件中引用使用。 2. **自定义拦截器**:对于...
2. **配置拦截器**:然后,在Struts2的配置文件(通常为`struts.xml`或`struts-default.xml`)中注册这个拦截器。 ```xml <!-- 其他拦截器配置 --> <default-interceptor-ref name="defaultStack"/> <!-- 引入...
根据提供的文件名"98struts201",这可能是指一个包含Struts2拦截器源代码的文件或目录。分析这个文件或目录可以帮助我们更深入地理解Struts2拦截器的内部工作机制,包括它如何与ActionInvocation交互,以及如何处理...
了解了拦截器的基本原理后,我们可以通过`Struts2.x 拦截器.avi`这个视频文件深入学习Struts2拦截器的实现细节,比如如何编写自定义拦截器、如何配置拦截器链、如何处理异常等。`readme.txt`可能是关于这个主题的...
### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...