struts2中上传文件时报404错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2中上传文件时报404错误相关的知识,希望对你有一定的参考价值。
我用struts2来上传文件,只要选择文件上传就报404错误,说“No result defined for action action.UpLoadAction and result input”
如果说配置文件字段名都没有错的话那就是说你的上传的文件超过了4M,而fileupload默认的上传限度为4M!如果没有跟改配置的话那就会抛出异常!而在struts2中则是返回为input!而你又在struts.xml中没有配置<result name = "input">/test.jsp</result>所以为出现404!如果先要根治的话!你需要在配置文件中配置一下<constant name="struts.multipart.maxSize" value="20480000"/>value的值你可以看着设!最大限度是2G 参考技术A 今天在编程的时候,我遇到了No result defined for action and result input的错误,这个错误想必大家都有遇到过吧,我今天发了很长时间弄这个错误,我以为我的Action函数出错了想调试,但是程序就是不进入断点,上网查资料,有的说路径错误啦,然后我找我的路径错误,搞了半天还是没发现有路径问题。然后我给我的属性的get方法都弄上了断点,我发现了问题,现在跟大家分享。
这个错误就是说没有为返回的input定义,可是有时候我们不一定要这个鬼东西,然而在Action中出错的话,默认就返回了这个input了,这时,我们在struts的<result>中定义的话,就出现No result defined for action and result input的错误了。
引起这个错误的原因是很多的,路径错误也是其中的一种,我这里的问题是,我的页面上的类型和我定义的属性的类型不一致,我的属性是int型的,但是在页面上输出的时候加了一个逗号,用了分割千位的,结果就出现了这个问题了。
这个问题好像在strtus2.1以上版本才出现, 这个问题的上面的解决方案已经把原因说的差不多了,在实际应用中,我估计大部分情况应该都是在action里面定义了int或者别的什么类型的变量,然后指望struts的自动填装把post来的数据转换,这时容易出现转换失败,从而导致了这个错误,所以查这个错误,可以利用ff的httpfox来查看实际post的参数是什么,然后和action中对应的属性对比,看那个会出现转换错误。
淡然另一种就是上面说的在所有的set 中加入断点,总能看到是哪个方法执行失败的。
另外还有种就是页面提交了同一个名字的参数多个,比如
写道
username 123
username 123
permissions 123
info 31234
页面冲提交了了两个username ,而我的后台却只写了一个String username,这样同样会出错,这个是利用httpfox看的,
其实最好的是action中的和post相对应属性都设置成为String类型,省事,也不会再出现这个错误了,然后在execute中执行转换。这样也方便差错 参考技术B 这个错误有很多原因,检查你的文件名,如果你的文件是:upload,那么它的属性就是uploadFileName,uploadContentType, 这点很容易错误,还有就是那个路径,你需要先在webroot下面创建一个文件夹,然后把该文件夹的名字放在配置中,否则容易报控异常 参考技术C 检查你上传的url是否在UploadAction里有配置啊,404表示url请求有错误。
Struts文件上传
/* 文件上传的先决条件 * 1. 上传的表单必须以POST方式提交(method="post") * 2. 提交需要指定编码为: `multipart/form-data` (enctype="multipart/form-data`") * 3. 可以在xml配置文件中添加一个 name="input"的result, 便于错误信息回显 * 4. 如果下载的文件太大, 需要在xml配置文件中修改默认的文件的最大字节数, 如最大允许上传5M: * ``` * <constant name="struts.multipart.maxSize" value="5242880" /> * ``` */
1.上传的JSP页面中的代码:
//引入S标签
<!-- from表单 --> <s:fielderror fieldName="file"></s:fielderror> 错误信息提示 <s:form action="/fileupload" method="post" theme="simple" enctype="multipart/form-data"> <!-- 选择文件标签 --> <s:file name="file" /> <!-- submit按钮 --> <s:submit value="上传" /> </s:form>
2.具体Action类的操作:
public class FileUpLoadAction extends ActionSupport { private static final long serialVersionUID = 1L; //传过来的文件,file和jsp页面的[<s:fielderror fieldName="file"></s:fielderror>]fieldName一样 private File file; //传过来的文件名: private String fileFileName; //传过来的文件类型: private String fileContentType;
生成三个字段的getter,setter方法
//业务处理 public String execute() throws Exception { //获取到"/123"的路径 String path = ServletActionContext.getServletContext().getRealPath("/123"); //将文件类型进行"/"截取,得到最后一个元素[1],进行字符串拼接 //fileName=UUID.文件类型 String fileName=UUID.randomUUID().toString()+"."+fileContentType.split("/")[1]; //在"/123"中建一个名为fileName的文件 File files=new File(path,fileName); //将传过来的文件file拷贝到"/123"中名为fileName的文件中 FileUtils.copyFile(file, files); return NONE; }
3.struts.xml中的代码:
<struts> <!-- 服务器允许最大的上传字节大小 --> <constant name="struts.multipart.maxSize" value="5242880"></constant> <include file="struts-default.xml"></include> <package name="fileuploads" extends="struts-default"> <action name="fileupload" class="com.gxxy.filetransport.filedownload.FileUpLoadAction"> <interceptor-ref name="fileUpload"> <!-- 设置上传文件的字节大小,这个大小只能小于服务器允许的最大的上传字节大小 --> <param name="maximumSize">1048576</param> <!-- 设置允许上传的拓展名 --> <param name="allowedExtensions">png,jpg,txt</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <result name="input">/JSP/filetransport/fileupload.jsp</result> <result name="none">/JSP/filetransport/fileupload.jsp</result> </action> </package> </struts>
以上是关于struts2中上传文件时报404错误的主要内容,如果未能解决你的问题,请参考以下文章