struts2上传以及java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.M

An Error has occurred in this application. java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location] at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:136) at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:476) at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:486) at com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:517) at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542) at........

 

对于网上很多的人,都是因为没有加jar包:如commons-io.jar和commons-fileupload.jar,这种情况很容易解决

但我的是加了还是报错,通过谷歌找了半天才知道是这两个jar包是1.1版本的,或者是commons-io.jar和commons-fileupload.jar默认的,原来在struts2上传

文件的时候会引起冲突,后来我改为commons-io-1.4.jar和commons-fileupload-1.32.jar后就好了。

把jar包升级后,web.xml文件里面根本不需要什么配置一个名为ActionContextUp的过滤器,

说下struts2的上传实现:

private File file;
 //文件类型           (1.系统自动注入  2.变量命名有规  前台对象名+"ContentType") 
 private String fileContentType;
 //上传的文件名 (1.系统自动注入  2.变量命名有规则: 前台  对象名+"FileName")
 private String fileFileName;
 private String savePath;

除了file,savePath(可以通过配置动态注入进去)属性外此Action中还有两个属性:uploadFileNameuploadContentType,这两个属性分别用于封装上传文件的文件名、文件类型。这是Struts2设计的独到之处:Strut2的Action类直接通过File类型属性直接封装了上传文件的文件内容,但这个File属性无法获取上传文件的文件名和文件类型,所以Struts2就直接将文件域中包含的上传文件名和文件类型的信息封装到uploadFileName和uploadContentType属性中,也就是说Struts2针对表单中名为xxx的文件域,在对应的Action类中使用3个属性来封装该文件域信息:
l 类型为File的xxx属性:用来封装页面文件域对应的文件内容。
l 类型为String的xxxFileName属性:用来封装该文件域对应的文件的文件名。
l 类型为String的xxxContentType属性:用来封装该文件域应用的文件的文件类型。
另外,在这个Action类中还有一个savePath属性,它的值是通过配置文件来动态设置的,这也是Strut2设计中的一个依赖注入特性的使用。

就以图片上除为例子:
核心代码就 3 句,其他全是围绕这3句核心代码写的,还有相应的geter和seter

Java代码 
1.//1、得到图片将要写入的路径  
2.    String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径 
//1、得到图片将要写入的路径
 String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径


Java代码 
1.//2、创建一个在此路径下的文件  
2.File saveFile = new File(new File(realPath),fileTestFileName);  //在该实际路径下实例化一个文件 
//2、创建一个在此路径下的文件
File saveFile = new File(new File(realPath),fileTestFileName);  //在该实际路径下实例化一个文件


Java代码 
1.//3、将上传文件复制到以上实例化的文件中,这部可能会抛出异常需要捕获  
2.FileUtils.copyFile(fileTest, saveFile); 

详细参考:

http://tmsoft.lsxy.com/index.php?load=read&id=514

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值