您的位置:首页 > 编程语言 > Java开发

struts文件上传和遇到的问题

2012-05-03 21:48 513 查看
1.这里从学习中遇到的问题入手:代码运行异常情况是:

Error setting expression 'image' with value '[Ljava.lang.String;@b1221b'

ognl.MethodFailedException: Method "setImage" failed for object com.jdf.fileupload1.HelloWorldAction@11c345a

[java.lang.NoSuchMethodException: com.jdf.fileupload1.HelloWorldAction.setImage([Ljava.lang.String;)]

异常中的

image,setImage ,com.jdf.fileupload1.HelloWorldAction会在下面的代码中给出。

2.程序源代码

2.1程序用到的包:这个大家都知道,不再讨论

2.2上传页面代码:fileupload.jsp

<form  action = "${pageContext.request.contextPath }/test/fileupload" enctype="multipart/form-data" method = "post">
文件:<input type ="file" name="image" />
<input type = "submit" value = "上传"/>


action :处理上传文件的actin调用路径,在struts.xml配置的

enctype:就是说,在发送到服务器之前,所有字符都会进行编码。用于文件的传输(当然包括图片)

只给出了form表单中的内容。代码简答,只为说明问题

2.2 action类:HelloWorldAction.java,在我的机子上位于package com.jdf.fileupload1包中,

这也是上面提到的com.jdf.fileupload1.HelloWorldAction的由来

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

public class HelloWorldAction {

/*
* 名称与fileupload.jsp中form表单中file类型的input的名称相同。
* <input type ="file" name="image" />
*/
private File image;//
private String imageFileName;

public HelloWorldAction(){

}

public String getImageFileName() {
return imageFileName;
}

public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}

public File getImage() {
return image;
}

public void setImage(File image) {
this.image = image;
}

public String execute() throws Exception{

String realpath = ServletActionContext.getServletContext().getRealPath("/images");//存放上传的文件的路径
System.out.println(realpath);
System.out.println(imageFileName);
System.out.println(image);
if(image!=null){
File savefile = new File(new File(realpath), imageFileName);
if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();
FileUtils.copyFile(image, savefile);
ActionContext.getContext().put("message", "上传成功");//为了上传成功后显示信息
}
return "success";
}
}


2.3struts.xml配置信息

<package name="itcast" namespace="/test" extends="struts-default">
<action name="fileupload" class="com.jdf.fileupload1.HelloWorldAction" method="execute" >

<result name="success">/showmessage.jsp</result>
</action>
</package>


2.4.结果展示试图showmessage.jsp

<body>
传输状态:
${message }

</body>


${message }:显示HelloWorldAction.java中ActionContext.getContext().put("message", "上传成功");message映射的值

3.程序结果:

刚开始的时候控制台显示:

Error setting expression 'image' with value '[Ljava.lang.String;@b1221b'
ognl.MethodFailedException: Method "setImage" failed for object com.jdf.fileupload1.HelloWorldAction@11c345a [java.lang.NoSuchMethodException: com.jdf.fileupload1.HelloWorldAction.setImage([Ljava.lang.String;)]

savefile 的值:D:\apache-tomcat\webapps\struts2\images
imageFileName的值:null
image的值:null


刚开始很郁闷:瞪着两眼去寻找哪里出错了---通过网上查资料,可能原因如下

一:粗心:(不要郁闷啊,好多错误都是粗心的结果):enctype写成entype.,改过来之后还是出现同样错误。怎么回事呢、?---忘了重新部署工程了(我用的myeclipse)

二:method方法设置错误---这里坚决要用post方法,用get方法就会出现出项本文开头的错误。一是文件大小的限制,貌似还有传输数据的类型的关系。因为即使用get方法传输一个空文件也是会出项错误的。

4.期望的结果

正确的输出应该是:

D:\apache-tomcat\webapps\struts2\images
学语言.txt-------传输的文件
D:\apache-tomcat\work\Catalina\localhost\struts2\upload__2c40c23_13712ca2ea4__7fff_00000007.tmp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: