- 浏览: 1436956 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (409)
- Java (48)
- Spring (29)
- struts2 (17)
- hibernate (4)
- 设计模式 (24)
- jbpm (1)
- JavaScript (5)
- 统计报表 (7)
- ExtJS_3.0 (35)
- struts1 (1)
- 分析设计 (3)
- Flex3 (24)
- UML (2)
- 数据库 (18)
- PowerDesigner (2)
- 应用服务器 (3)
- WebService (5)
- ActiveMQ_5.3.2 (6)
- Java通信技术 (11)
- GWT (6)
- OSGi (15)
- android (11)
- liferay6.0.6 (13)
- jquery (13)
- Linux (3)
- java.util.concurrent (16)
- guava (9)
- 开发模式 (1)
- 大数据 (2)
- 互联网金融 (4)
- treegrid-3.0 (7)
- 分布式 (8)
- GO语言 (4)
- maven (1)
- 缓存技术 (6)
- 其他 (2)
- 前端页面 (1)
- heasy (1)
- spring cloud(F版) (21)
- springboot (12)
- springmvc (5)
- mybatis (3)
- dubbo (1)
- 物联网 (0)
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
该文件上传实现可以限制上传文件的类型,限制上传文件的最大字节数,上传文件既可以存储在相对路径下,也可以存储在绝对路径下。
一、Model类源代码
public class Attachments { private long id; private String name; //文件名 private String path; //上传文件存放的子目录路径 private Long fileSize; //文件大小,单位为K private String contentType; //文件类型 private String refName = "attachment"; //引用名称,默认为attachment,可用于区分普通附件与特殊附件。 private String entityName; //指定与附件关联的表单的实体名称 private String entityId; //指定与附件关联的表单的主键值 private String creator; //创建人 private Timestamp createDate; //创建时间 private File attachFile; //待上传的文件对象 ...... }
二、Action类源代码
public class UploadAction extends BaseAction { private UploadService uploadService; private Attachments attach; //限制 private String allowTypes = ""; private long maxSize = 0; //字节 //上传的文件 private File upload; private String uploadFileName; private String uploadContentType; ...... //获取与表单关联的所有附件信息 public String attachList() throws Exception{ List attachList = uploadService.queryAttachments(attach); getValueStack().set("attachList", attachList); return SUCCESS; } //上传附件 public String upload() throws Exception{ String method = getRequest().getMethod(); if(method.equalsIgnoreCase("post")){ if(upload != null){ if(upload.length() <= 0){ throw new RuntimeException("上传的文件不能为空!"); } if(maxSize > 0 && upload.length() > maxSize){ throw new RuntimeException("上传的文件不能超过" + maxSize + "字节!"); } allowTypes = CommonUtil.trim(allowTypes); if(CommonUtil.isNotEmpty(allowTypes)){ int idx = uploadFileName.lastIndexOf("."); String extendName = uploadFileName.substring(idx+1); //扩展名 List typesList = CommonUtil.toList(allowTypes, ","); if(!typesList.contains(extendName)){ throw new RuntimeException("只能上传扩展名为[ " + allowTypes + " ]的文件!"); } } attach.setAttachFile(upload); attach.setName(uploadFileName); attach.setFileSize(new Long(upload.length() / 1024)); //K attach.setContentType(uploadContentType); attach.setCreator(SecurityUtil.getUserId()); attach.setCreateDate(DatetimeUtil.nowTimestamp()); uploadService.addAttachment(attach); }else{ return INPUT; } }else{ return INPUT; } return SUCCESS; } //删除附件 public String attachDelete() throws Exception{ Map map = RequestUtil.getParameterMap(getRequest(), "chk_o_"); uploadService.deleteAttachment(map); StringBuffer sb = new StringBuffer(); sb.append("attachList.action?attach.entityName=" + CommonUtil.trim(attach.getEntityName())); sb.append("&attach.entityId=" + CommonUtil.trim(attach.getEntityId())); sb.append("&attach.refName=" + CommonUtil.trim(attach.getRefName())); sb.append("&attach.path=" + CommonUtil.trim(attach.getPath())); sb.append("&allowTypes=" + CommonUtil.trim(allowTypes)); sb.append("&maxSize=" + maxSize); getValueStack().set("url", sb.toString()); return SUCCESS; } //下载附件 public String download() throws Exception{ return SUCCESS; } public InputStream getTargetFile() throws Exception{ attach = uploadService.getAttachment(attach.getId()); uploadFileName = URLEncoder.encode(attach.getName(), "UTF-8"); //解决中文乱码问题 String filePath = attach.getPath(); if(filePath.indexOf(":") == -1){ //相对路径 return ServletActionContext.getServletContext().getResourceAsStream(filePath); }else{ //绝对路径 return new FileInputStream(filePath); } } }
三、Service类源代码
public class UploadService extends BaseService { /** * 保存附件信息并将附件文件存储到指定目录下 */ public void addAttachment(Attachments attach)throws Exception{ if(CommonUtil.isEmpty(attach.getRefName())) attach.setRefName("attachment"); //文件存储基路径 String path = CommonUtil.trim(attach.getPath()); if(CommonUtil.isNotEmpty(path)){ if(path.endsWith("/") == false && path.endsWith("\\") == false){ path += File.separator; } if(path.startsWith("/")==false && path.startsWith("\\")==false){ if(Constants.attachBasePath.endsWith("/")==false && Constants.attachBasePath.endsWith("\\")==false){ path = File.separator + path; } } } path = Constants.attachBasePath + path; attach.setPath(path); save(attach); //文件存储路径 if(path.endsWith("/") == false && path.endsWith("\\") == false){ path += File.separator; } path += attach.getId() + "_o_" + attach.getName(); attach.setPath(path); update(attach); //目标文件 String filePath = path; if(filePath.indexOf(":") == -1) filePath = ServletActionContext.getRequest().getRealPath(filePath); //不是绝对路径就转成绝对路径 File dstFile = new File(filePath); FileUtil.createPath(dstFile.getParent()); //目标目录不存在时创建 //文件保存 try{ FileUtil.copyFile(attach.getAttachFile(), dstFile); }catch(FileNotFoundException ex){ throw new ServiceException("文件不存在:" + attach.getName()); } } /** * 删除选中的附件信息及其对应的文件 */ public void deleteAttachment(Map map) throws ServiceException{ List pathList = new ArrayList(); for(Iterator it=map.keySet().iterator();it.hasNext();){ String key = (String)it.next(); String value = (String)map.get(key); Attachments attach = (Attachments)load(Attachments.class, new Long(value)); if(attach != null){ pathList.add(attach.getPath()); delete(attach); } } for(int i=0;i<pathList.size();i++){ String filePath = (String)pathList.get(i); if(filePath.indexOf(":") == -1){ filePath = ServletActionContext.getRequest().getRealPath(filePath); } File file = new File(filePath); FileUtil.deleteFile(file); } } /** * 查找附件 */ public List queryAttachments(Attachments attach)throws Exception{ DetachedCriteria dc = DetachedCriteria.forClass(Attachments.class); CriteriaUtil.eq(dc, "entityName", attach.getEntityName()); CriteriaUtil.eq(dc, "entityId", attach.getEntityId()); CriteriaUtil.eq(dc, "refName", attach.getRefName()); dc.addOrder(Order.asc("createDate")); return findByCriteria(dc); } public Attachments getAttachment(long id)throws Exception{ return (Attachments)load(Attachments.class, new Long(id)); } }
评论
4 楼
韩悠悠
2011-01-10
eric851018 写道
我就喜欢你这种写法
多看看源代码,尤其是spring,这种写法很一般。
3 楼
eric851018
2010-10-26
我就喜欢你这种写法
2 楼
osacar
2010-09-12
不错,比其他那些好多了。
1 楼
qiaoakai
2009-05-26
太好了,如果 要把源码作为附件 能下载 那就更好了!!谢谢了 呵呵
发表评论
-
在Struts2中对Ajax请求的异常进行统一处理
2016-04-18 18:32 7191、自定义异常类 public class AjaxExc ... -
struts2原理
2015-10-15 22:00 753一个Struts2请求处理的步骤大致如下: 1、 ... -
struts2 + poi 数据导出excel
2013-03-18 17:47 1537java源码: import java.io.ByteAr ... -
在Freemarker中使用JSP标签库
2010-06-02 17:24 7082Freemarker作为Struts2的其中一种结果类型,可以 ... -
Struts2 Convention插件的使用
2010-05-17 23:58 72951、常量说明 struts.convention ... -
学习笔记:杂项
2010-04-23 20:40 2752一、在web.xml文件配置Str ... -
Struts2插件的开发
2010-04-21 21:16 3266一、插件类 /** * 使用Struts2的Plugin ... -
读书笔记:Struts2拦截器
2008-11-10 21:19 15641、拦截器相关基础类 Interceptor接口 ... -
自定义标签:联动下拉框(二)
2008-10-27 09:48 3250四、下拉框数据获取方法的源代码 public String f ... -
自定义标签:联动下拉框(一)
2008-10-26 12:22 3453该标签主要实现以下功能:当父下拉框的当前值发生变化时 ... -
基于Struts2的通用文件上传实现(二)
2008-10-25 11:36 2588四、Action配置 <action name=&quo ... -
自定义标签:下拉框月份选择控件
2008-10-21 22:17 2890一、标签源代码 public class CalendarMo ... -
自定义标签:下拉框年份选择控件
2008-10-21 22:13 5725一、标签源代码 public cl ... -
自定义标签:分页标签
2008-10-21 09:58 4585一、标签类源代码 public class PageNavig ... -
自定义标签:在JSP页面中动态执行Spring Bean的方法
2008-10-06 13:37 6191使用该自定义标签,可以在JSP页面中动态执行某个Sp ... -
Struts2标签的使用
2008-09-25 12:36 19321、iterator标签:用于对集合进行迭代 &l ...
相关推荐
Struts2是Java Web开发中一个非常重要的框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了一种结构化的解决方案,简化了Web应用的开发过程。本书《Struts2技术内幕——深入解析Struts2架构设计与...
总的来说,这个基于Struts2的班级网站项目涵盖了Struts2框架的多个关键方面,对于初学者来说,这是一个很好的实践平台,可以深入理解MVC架构、Action、拦截器、结果类型、文件上传以及用户状态管理等核心概念。...
标题 "ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)" 涉及到的是一个基于Java Web的项目,利用了Struts2、Spring2.5、Hibernate3.3和Ajax技术,实现了文件上传并带有进度条显示的功能...
4. **javassist-3.11.0.GA.jar**:Javassist是一个Java字节码操作和分析框架,Struts2使用它来动态地修改或生成类,例如在运行时实现方法拦截。 5. **log4j-1.2.17.jar**:这是一个流行的日志记录框架,Struts2使用...
在Struts2中,文件上传是通过`CommonsFileUpload`库来实现的,这是一个Apache Commons项目,用于处理HTTP请求中的多部分数据,也就是通常的文件上传。在提供的文件列表中,`commons-fileupload-1.2.1.jar`就是这个库...
4. **Interceptor拦截器**:Struts2的拦截器可以用来实现通用的文件上传和下载逻辑,例如限制上传大小,记录日志等。 5. **安全性**:文件上传可能导致安全问题,如代码注入、跨站脚本攻击(XSS)。因此,确保对...
5. `commons-logging-1.1.x.jar`:这是一个通用的日志包装库,使得Struts2能够支持多种日志实现,如Log4J或JDK内置的日志系统。 6. `Commons-fileupload`:处理HTTP多部分文件上传的库,通常与Struts2一起使用。 在...
### Struts2框架基础知识 #### 一、Struts2框架简介 Struts2是一个基于Java的开源Web应用程序...此外,Struts2还提供了丰富的特性支持,如表单验证、文件上传、AJAX支持等,使得开发者能够构建更为复杂的应用程序。
通过理解以上知识点,并结合提供的"拦截器+文件上传判断类型"这个文件,你可以创建一个自定义的拦截器来实现对文件上传的全面控制,包括类型判断、大小检查等,确保文件上传功能的安全和稳定。在实际开发中,还需...
Struts2是一个强大的Java EE(Enterprise Edition)框架,主要用于构建基于MVC(Model-View-Controller)模式的Web应用程序。这个框架提供了丰富的功能,包括动作调度、数据绑定、异常处理、国际化支持等,大大简化...
文件上传是Web应用中常见的一项功能,Struts2提供了简单易用的方式来实现这一需求。 ##### 4.3 高级表单处理技巧 在表单处理方面,Struts2支持多种高级技巧,如自动填充表单字段、动态生成表单元素等。 ##### 4.4...
- **拦截器**:Struts2的核心之一,通过拦截器可以实现诸如文件上传、输入验证等功能。 - **处理与分配流程**: - **前端请求**:用户发起的HTTP请求。 - **StrutsPrepareAndExecuteFilter**:处理请求的第一道...
Struts2提供了许多内置的Interceptor,它们覆盖了常见的Web应用程序需求,如参数绑定、类型转换、输入验证、文件上传等。这些内置的Interceptor可以帮助开发者快速构建功能丰富的应用程序,而无需从头开始实现这些...
struts2必须包,commons-fileupload-1.3.1.jar 实现文件上传包,commons-io-2.2.jar 用来处理IO的一些工具类包,commons-lang3-3.1.jar 提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现...
3. **Interceptor(拦截器)**:拦截器是Struts2的一大特色,它们在Action调用前后执行,可以实现如日志记录、权限检查、事务管理等通用功能。 4. **Result类型**:Result定义了Action执行后如何展示结果,如转发到...
这些JAR文件是构建基于Struts2的应用的基础,缺少任何一个都可能导致应用无法正常运行。以下是对这些核心组件的详细介绍: 1. **.struts2-core.jar**:这是Struts2框架的核心库,包含Action、Result、Interceptor等...
拦截器是Struts2的一大特色,可以实现如日志、权限检查、事务管理等通用功能,并且可以按需组合使用。结果类型则是决定Action执行完成后如何跳转到视图页面。 Struts2的Action支持多种结果类型,包括JSP、...
在开发基于Struts2的应用时,正确配置和选用所需的资源包至关重要,这能确保项目的稳定性和高效性。在这个“配置struts2需要的资源包”的主题中,我们将详细探讨Struts2的核心组件、依赖库以及如何精简不必要的包。 ...
最后,为了保证兼容性和安全性,可能还需要包括`commons-fileupload.jar`和`commons-io.jar`,它们负责处理HTTP上传文件,以及提供通用的I/O操作。 在构建Struts2项目时,确保所有这些必需的jar包都已正确引入并...