- 浏览: 540747 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
Struts 2是通过Commons FileUpload文件上传。
1.Commons FileUpload通过将HTTP的数据保存到临时文件夹,我们可以设置保存临时文件夹的路径,若不设置那么它会放到tomcat服务器安装目录下\work\Catalina\localhost\你的项目名下的文件夹;如我的将上传文件项目Struts2Upload发布到tomcat后,那么上传的文件的临时文件会保存形如:D:\Java\apache-tomcat-6.0.20\work\Catalina\localhost\Struts2Upload\upload_243601eb_1277f7c2df8__7ffc_00000001.tmp,我们在action类里再相当于本地的资源一样来读取,再转移到如数据库等的地方去。总之,我觉得上传文件时,数据会随用户的提交,而由浏览器端将识别出的传输文件标签,将本地的文件转化为文件流,再通过建立好的tcp连接(每次用户访问一个页面时,会建立tcp连接,服务器应答完响应后会断开连接),将数据上传至服务器,应该是这样,而不是用服务器端的action类或servlet类来完成传输的,应该是浏览器对上传文件标签的解析,从而完成本地资源的传输的。
2.然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
以下是例子所依赖类包的列表:
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.14.jar
xwork-2.0.7.jar
注意:
1.页面的表单enctype须设置为"multipart/form-data";
2.<s:file name="loadFile">标签将上传文件赋值给ACTION中的File loadFile属性,并且将文件名,文件类型都会邦定到action类里去,就上面这个标签例子,action类里可以邦定如下属性:
/*
* 一个loadFile,
* 不但须设置setLoadFile(),
* 还需要设置setLoadFileContentType(String contentType):获取上传文件的MIME类型
* setLoadFileFileName(String fileName):上传文件的文件名,此文件名不包括文件路径
* 因此:
* <s:file name="xxx">,则ACTION中要有三个对应的setter方法:
* setxxx(),
* setxxxContentType(String contentType)
* setxxxFileName(String fileName)
* */
private File loadFile;
private String contentType;
private String fileName;
(2)能获取到本地文件信息,那在服务器端的操作就很容易了。
strtus2.0实现下载
(1) 实现下载也不难,在页面上显示待下载的资源的链接,将链接与action类链接起来,当用户点击时,会到action类去, action类里得到下载资源的路径(这个路径一般写在配置文件或者从数据库里查出来),有路径就可以给出一个读取服务器端资源的输入流,并将该流交邦定给页面端。这主要是用struts.xml配置来实现:<result name="success" type="stream">这句可以将从action类跳转到页面时,以输出流的形式跳转,当浏览器识别出是以流的形式返回的页面时,它会弹出一个保存(打开)的对话框,从而实现下载的功能,上面都是我个人理解,如有不对,希望大家直接指出。
(2) 以流的形式跳转到页面前,我们可以给出其它参数:
contentType:文件类型
inputName:这个就是文件流,主要的参数,其它都是辅助说明
contentDisposition:这个是文件的描述
bufferSize:缓冲的大小,这个我没研究过,可能还有其它参数,我没时间去研究,所以就列出这几个。
这样后在页面端弹出的保存文件对话框会将contentDisposition的信息在“名称”那里显示出来。
(3) 下载还涉及到中文文件名等的问题,所以也要处理,具体可以参考如下文章:
http://shenzhenchufa.blog.51cto.com/730213/271288
当我们用struts2进行文件上传时,首先要将from表单的enctype属性进行重新设置。那么该属性的取值就是决定表单数据的编码方式。一般有三个属性取值:
application/x-www-form-urlencoded:默认的编码方式,它只处理表单域里的value属性,采用这种编码方式的表单会将表单域的值处理成URL编码方式。这种方式按ISO-8859-1的编码方式将表单上传到服务器,但是这种方式是上传不了文件的。那么如果我们上传的含有文件域则采用下面的方式(multipart/form-data)。
multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。(进行文件上传时采用这种方式)
text/plain:这种编码方式当表单的action属性为mailto:URL的形式时比较方便,这种方式主要用于直接通过表单发送邮件的方式。(这种方式已经不再采用了)
注:
如果要实现文件的上传,则表单的method属性必须设置成:post提交方式。
如果要实现文件的上传,表单的enctype属性必须设置成:multipart/form-data。
一旦设置了表单的enctype="multipart/form-data" (即:<form action="" method="post" enctype="multipart/form-data">)属性,就无法通过HttpServletRequest对象的getParameter()方法获取请求参数值。(就是说除了文件域以外其他的普通表单域(如:文本框、单选框、复选框、文本域等)则取不到)
对于Java应用而言,比较常用的上传框架有两个:common-fileupload和cos,这两个框架都是负责解析出HttpServletRequest请求中的所有域。通过上传框架获得了文件域对应的文件内容,就可以通过IO流将文件内容写入服务器的任意位置。在项目开发中一般使用common-fileupload框架较多,当然针对不同的需求使用不同的上传框架,使用该框架一般需要使用如下两个jar文件:
commons-fileupload-1.2.1.jar commons-io-1.3.2.jar
Struts2并未提供自己的请求解析器,因此Struts2并不会自己去处理multipart/form-data的请求,它需要调用其他请求解析器(如:common-fileupload或cos),将HTTP请求中的表单域解析出来,但是Struts2在原有的上传解析器基础上做了进一步封装,更进一步简化了文件上传。查看一下xml文件就能找到Strus2对应的文件上传拦截器,当然并不需要我们自己去配置,struts2已经为我们配完了,直接用就可以了。
根据实际情况定到底要选择哪个上传控件,到default.properties属性文件中去查看struts2支持哪些上传控件,自己配一下就可以了,但是别忘记拷Jar包。
Struts2默认使用Jakarata的Common-FileUpload框架实现文件上传,如果使用其它两个框架则只需要修改struts.multipart.parser常量,同时在Web工程中增加相应的上传框架的jar文件即可。
发表评论
-
Spring Data JPA框架系列(三)-自定义Repository接口详解
2022-05-08 09:03 0前面讲了Spring Boot 整合Spring Boot ... -
flying sauser, thymeleaf实现PDF文件下载
2016-06-17 14:58 5216thymeleaf 的资料比较少,资料大部分都是和spri ... -
thymeleaf与spring整合
2016-06-15 10:08 12331、使用的是Spring EL而不是Ognl。2、访问上下文 ... -
SpringMVC 400 Bad Request 问题
2016-06-15 09:11 1959在提交表单时,发生400错误,并未进入save方法。 ... -
eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
2016-04-22 08:33 733在eclipse中用过maven的可能都遇到过这种情况,我 ... -
Freemarker网站静态化的实现(转载)
2012-06-20 13:39 1417做程序也做了将近4年时间了,从来没有发过什么技术性的文章,今 ... -
SpringSecurity 3配置文件
2012-06-10 12:58 1305最近查找了一些Spring security3的资料,感觉网上 ... -
Struts2标签库
2012-05-19 21:19 1536Struts2标签库概述使用标 ... -
struts2的validate错误跳转与chain配合使用的要点
2012-05-18 16:30 1452本文基于struts2.1.8.1 按照struts2的官方文 ... -
OGNL表达式struts2标签“%,#,$”
2012-05-18 15:32 1148一、什么是OGNL,有什么特点? ... -
如何自定义Struts2表单验证后的错误信息显示格式/样式
2011-11-17 10:43 2835环境 Struts 2.1.8.1 + Myeclipse ... -
Struts2验证总结
2011-11-17 10:41 1282在Struts2应用中提供验证的方式有两种——编程式和声明式。 ... -
input中disabled,readonly解决办法及区别
2011-05-27 10:35 6361input的字段当为diabled时时无法获取数值得,所以最 ... -
getCurrentSession 与 openSession() 的区别
2011-05-26 11:00 11111 getCurrentSession创建的session会和 ... -
Struts2拦截器执行顺序
2010-11-15 11:25 2732在之前的文章中,我们 ... -
struts2默认拦截器详细说明
2010-11-15 11:23 19861. 理解拦截器 1.1. 什么是拦截器: 拦 ... -
Struts2向JasperReport传参数配置
2010-10-26 10:11 1656Recently I spent a whole day se ... -
struts2与jasperreport整合不能显示图片imgags/px
2010-09-08 13:37 2521终结解决方案:Struts2整 ... -
Spring Write operations are not allowed in read-only mode 错误
2010-09-02 10:19 1213使用Spring提供的Open Session In View ... -
hibernate配置参数
2009-04-03 23:55 1343Hibernate输出SQL语句以便更加深入调试程序----参 ...
相关推荐
Struts2.0是一个流行的Java Web开发框架,用于构建企业级的MVC(Model-View-Controller)应用程序。它的核心是Action,一个处理用户请求并返回结果的组件。Struts2.0以其强大的功能、易用性和灵活性在开发社区中备受...
Struts2实现国际化是Web应用开发中的一个重要环节,它使得应用程序可以支持多种语言环境,从而满足全球用户的需求。Struts2作为一个流行的MVC框架,提供了便捷的方式来实现国际化。以下将详细讲解Struts2中实现国际...
通过以上步骤,你可以实现一个基于`bootstrap-fileinput`和Struts2的多文件上传系统。这个系统不仅提供了良好的用户体验,还能够灵活地处理上传文件,包括获取原生的HTTP请求。在实际开发中,还需注意文件的安全存储...
在本文中,我们将深入探讨如何使用ExtJS4和Struts2框架实现文件上传功能。首先,让我们了解一下这两个关键技术和它们在文件上传中的作用。 **ExtJS4:** ExtJS4是一个强大的JavaScript库,用于构建富客户端应用程序...
使用STRTUS上传文件的简单例子.访问的文件为admin.jsp
Struts2.0是Java Web开发中一个非常重要的框架,它基于MVC(Model-View-Controller)设计模式,极大地简化了Web应用的开发过程。这个"完整的struts2.0中文教程"提供了全面的学习资源,帮助开发者快速理解和掌握...
- **验证登录功能**:虽然本例中并未实现具体的登录验证逻辑,但可以通过检查页面跳转是否正确来初步验证Struts框架的配置是否成功。 #### 总结 通过以上步骤,我们不仅搭建了一个简单的Web应用,而且还学习了如何...
Struts2作为其后续版本,提供了一种结构化且可扩展的方式来组织应用,使得开发者可以更专注于业务逻辑而不是底层的实现细节。在本教程中,我们将深入探讨如何使用Struts2来实现一个简单的验证码功能。 验证码是一种...
"dwr框架+struts+Hibernate实现下拉菜单二级联动"是一个典型的Web应用程序开发技术组合,它旨在创建一个动态且响应式的交互式UI,特别是在处理关联数据时。下面我们将深入探讨这个主题。 首先,DWR(Direct Web ...
以下将详细阐述Struts2实现大文件上传的关键知识点。 1. **Struts2框架基础**: Struts2是一个基于MVC设计模式的Java Web框架,它简化了开发流程,提供了丰富的拦截器、结果类型和插件,支持文件上传功能。Struts2...
Struts2.0是一个强大的Java Web应用程序框架,...通过研究这些文件,你可以了解到如何将Struts2.0框架与数据库整合,实现一个完整的Web应用。同时,这个实例也提供了一个动手实践的机会,帮助你在实践中巩固理论知识。
利用Strtus2+hibernate+spring实现的用户管理小项目(内含mysql数据库脚本和所需的所有jar包),另外里面自己也做了一些封装,这个项目的说明可以参考我发表的博客"对SSH的一些认知
下面将详细阐述如何在Struts1.2环境下实现图片上传。 首先,我们需要在ActionForm类中创建一个File类型的属性,用于接收用户上传的图片文件。例如: ```java public class UploadForm extends ActionForm { ...
在"Strtus2+spring+hibernate"的整合中,Spring通常作为整个应用的中心,负责管理其他组件(如Struts2的Action和Hibernate的SessionFactory)。Struts2负责接收HTTP请求,调用Spring管理的业务服务,这些服务通常会...
#### 一、`<html:form>` 标签 ...通过合理的属性配置和事件绑定,开发者可以轻松实现表单的动态交互效果,提高用户体验。同时,这些标签的使用也简化了前端开发过程,使得开发者能够更加专注于业务逻辑的实现。
"strtus2自动漏洞检测工具"是一个专门针对Struts2框架的安全扫描工具,它能够帮助开发者和系统管理员自动化检测Struts2应用中存在的安全漏洞。 Struts2框架的安全性问题主要源于其组件的不恰当使用或配置错误,可能...
而"Strtus2Login"可能是一个登录功能的示例,展示了Struts2如何处理用户登录请求,包括表单验证、数据校验和动作跳转等。 通过下载和研究这个SSH2项目,开发者不仅可以学习到SSH2框架的综合运用,还能掌握MySql...
highcharts 与 struts2 完美整合,解决部分新手对于操作highcharts的误区,本例子无需连接数据库,在strust2 Action中创建模拟数据,以json的方式返回到前台js,highcharts通过解析json,进而完成数据的装配,且可以...
在Spring与Struts框架的整合中,通过修改`Struts-config.xml`、`applicationContext.xml`以及使用`DelegatingActionProxy`,可以实现Struts Action与Spring管理的bean之间的无缝集成。这种整合方式充分利用了Spring...
Struts2.0+Hibernate+Spring 是一个经典的Java企业级应用开发框架组合,也被称作SSH框架。这个组合提供了模型-视图-控制器(MVC)架构模式的支持,数据库持久化处理,以及依赖注入和面向切面编程的能力,极大地提高...