Struts2文件上传,以及上传拦截异常国际化处理
2015-12-19 14:31
591 查看
近期做项目遇到了非常多的文件上传,下面对struts2上传文件做一个详细的解释,我会附上部分代码。
看struts2官方的doc上传部分 你会发现,上传的action 必有三个属性 分别是
File xxx;//代表页面表单的input file 和 xxx 对应标签的name属性
String xxxFileName;//这里是上传file的名称
String xxxContentType;//这里是上传file的类型
三者缺一不可 值得说明的是 这里的File 并不是最终报错的File 它只是作为临时文件保存
默认的拦截器必须在fileUpload拦截器之后。
附:多文件上传,只需把action里的三个属性变为List即可
<s:fielderror></s:fielderror>
当你上传的格式非doc的时候异常信息就会在s:fielderror标签显示出来,但是客户碰到这样的异常都是一大串英文字符,肯定是看不懂的,这时候我们就可以用struts2的国际化来处理
在官方文档里我们可以看到异常信息对应的错误信息
这里我就展示两个
struts.messages.error.file.too.large ---------上传文件过大,不符合拦截的大小
struts.messages.error.content.type.not.allowed------------上传文件格式与拦截格式不符
那么怎么来让异常显示我们设置的为其对应的中文呢?
struts2的国际化分为三个级别 有application级别 也就是src下 包级别 action类级别
这里展示 application级别 首先在项目src下建立一个properties文件
命名为app_zh_CN.properties
然后在 Properties界面下add 以上两条异常信息
name对应异常value对应自定义提示
这样就能完成国际化了吗?很明显是不可以的。我们要在struts2.xml struts标签下添加国际化 i18n
<!--开启国际化 级别为application -->
<constant name="struts.custom.i18n.resources" value="app"></constant>
这样的设置好后 当有国际化异常后 拦截器会自动查找app_zh_CN.properties文件了
更过内容可以查看官方文档!
一、文件上传
1、jsp页面
<li> <div style="width: 170px; height: 25px; border: 1px solid 2dd3fd; background-color: #2dd3fd;border-radius: 3px; margin-left: -40px;"> <label class="wordtwo" style="color: white; font-size: 15px;">>> 请上传文件吧!</label> </div> </li> <li> <div class="uploader white" style="margin-left: 135px;"> <input type="text" class="filename" readonly/> <input type="button" name="file" class="button" value="上传..." /> <input type="file" size="30" name="upload"/> </div> </li>
2、文件上传action
看struts2官方的doc上传部分 你会发现,上传的action 必有三个属性 分别是File xxx;//代表页面表单的input file 和 xxx 对应标签的name属性
String xxxFileName;//这里是上传file的名称
String xxxContentType;//这里是上传file的类型
三者缺一不可 值得说明的是 这里的File 并不是最终报错的File 它只是作为临时文件保存
public class FileUpLoadAction extends BaseAction<Student>{ private File upload;//对应 jsp页面 <span style="font-family: Arial, Helvetica, sans-serif;"><input type="file" size="30" name="upload"/></span>name名 private String uploadFileName;//上传文件的名字 private String uploadContentType;//上传文件的类型 private String result; @Override public String execute() throws Exception { //获取保存路径 String path=ServletActionContext.getServletContext().getRealPath("/upload"); File file = new File(path); if(!file.exists()){ //如果路径不存在,则创建 file.mkdirs(); } FileUtils.copyFile(upload, new File(file,uploadFileName));//copy临时文件并保存 return SUCCESS; } ///////////////////////////////////////属性的封装/////////////////////// public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } }
3、struts2.xml的配置
<action name="FileUpLoadAction" class="com.zzuli.student.action.FileUpLoadAction"> <!--出现异常转向异常页面 这里就不写出上传成功转向的页面了 --> <result name="input">/WEB-INF/view/public/error.jsp</result> <interceptor-ref name="fileUpload"> <!-- 配置允许上传的文件类型 --> <param name="allowedTypes">doc,application/msword</param> <!-- 配置允许上传文件的大小--> <param name="maximumSize">3M</param></interceptor-ref> <!-- 系统默认拦截器 --> <interceptor-ref name="defaultStack"> </interceptor-ref> </action>
默认的拦截器必须在fileUpload拦截器之后。
附:多文件上传,只需把action里的三个属性变为List即可
二、国际化处理
上面的struts2的配置文件中,可以看到拦截的是 doc格式,那么上传其他格式,就会报异常转向下面的 result<span style="font-size:18px;"><result name="input">/WEB-INF/view/public/error.jsp</result></span>error.jsp页面就一个struts2的一个标签,用来显示异常信息
<s:fielderror></s:fielderror>
当你上传的格式非doc的时候异常信息就会在s:fielderror标签显示出来,但是客户碰到这样的异常都是一大串英文字符,肯定是看不懂的,这时候我们就可以用struts2的国际化来处理
在官方文档里我们可以看到异常信息对应的错误信息
这里我就展示两个
struts.messages.error.file.too.large ---------上传文件过大,不符合拦截的大小
struts.messages.error.content.type.not.allowed------------上传文件格式与拦截格式不符
那么怎么来让异常显示我们设置的为其对应的中文呢?
struts2的国际化分为三个级别 有application级别 也就是src下 包级别 action类级别
这里展示 application级别 首先在项目src下建立一个properties文件
命名为app_zh_CN.properties
然后在 Properties界面下add 以上两条异常信息
name对应异常value对应自定义提示
这样就能完成国际化了吗?很明显是不可以的。我们要在struts2.xml struts标签下添加国际化 i18n
<!--开启国际化 级别为application -->
<constant name="struts.custom.i18n.resources" value="app"></constant>
这样的设置好后 当有国际化异常后 拦截器会自动查找app_zh_CN.properties文件了
更过内容可以查看官方文档!
相关文章推荐
- JavaIDE__MyEclipse中SVN的使用方法
- 我的springmvc简单版
- java.lang.RuntimeException: java.lang.NoSuchMethodException:
- 【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
- Eclipse注释模板设置详解
- Eclipse添加注释简介
- java设计模式整体结构
- 为什eclipse中调试的时候总是不弹出调试界面而是安装运行
- java线程池框架源代码分析
- SpringMVC DWR 注解
- JAVA数组初始化及应用
- Java基础学习总结(32)——Java项目命名规范
- Java基础学习总结(32)——Java项目命名规范
- Java基础学习总结(32)——Java项目命名规范
- Java项目命名规范
- Myeclipse学习总结(5)——Myeclipse常用快捷键再学习
- Myeclipse学习总结(5)——Myeclipse常用快捷键再学习
- Myeclipse学习总结(5)——Myeclipse常用快捷键再学习
- Myeclipse常用快捷键
- Java23中设计模式(Design Patterns)详解