struts的声明式异常处理 demo
情景
使用Struts封装的下载文件的功能
当下载文件找不到的时候,struts获取的InputStream为null
这个时候,就会报500错误
java.lang.IllegalArgumentException : Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check the tag specified for this action.
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:237)
.......
解决方案
因为getInputSteam是struts自己完成的,所以我们不能再用try-catch了
这时候就要用到声明式异常处理了
类似于web.xml中的error-page配置
声明式异常处理
声明式异常处理要用到两个标签exception-mapping和result
先放上刚刚解决方案的代码
<package namespace="...">
<global-results> <result name="notFound" type="redirect">notFound</result> </global-results>
<action name="download" class="xxxx">
<exception-mapping result="notFound" exception="java.lang.IllegalArgumentException"></exception-mapping>
....
</package>
当抛出异常,Struts就会检查struts.xml里面有没有配置exception-mapping,检查exception-mapping的class跟异常是否一样,如果一样就会找到exception-mapping的result,先检查当前action内的result是否有匹配的(如果是<global-exeception-mapping>就直接检查<global-results>),如果匹配上了,就执行result的内容,像正常的action返回result那样
在这里,就是返回了notFound的result,然后找到global-results里有一个叫做notFound的result,然后执行重定向notFound,notFound是一个action
注意,如果result返回了一个action,那么就要指定type="redirect"(默认的是dispatcher)
因为处理声明式异常的filter在接受action的后面,如果type是转发请求的话,不会经过ActionFilter的处理,结果会报404
error-page
在web.xml中,可以针对某个error代码(404、403、500。。。),去自定义错误页面
demo
<error-page> <error-code>404</error-code> <location>/index.html</location> </error-page>
这时候,用户乱输入地址,就会被自动跳转到index.html
- 微信年终放大招!小程序再次升级,这个功能超想要!
- WordPress 中禁止文章自动保存和修订版本的方法
- 第一届机器人学习大会总结
- Hadoop: MapReduce2的几个基本示例
- 使用 nRoute 框架来实现基于 Silverlight 的桌面应用
- oracle:如何用sql生成日历
- 极品双拼“马仔”mazai.com易主终端
- Hadoop:pig 安装及入门示例
- 区块链时代即将到来 它将如何改变我们的工作和生活
- 架设ftp反向代理服务器
- CentOS 7 上面安装PowerShell
- 苹果刻意降低旧 iPhone 效能的做法,或在法国面临刑事检控
- maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项
- 通过SmtpClient发送Exchange会议邮件
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Sublime Text的使用
- JVM垃圾回收机制和算法详解
- 使用 zabbix 监控 tomcat(包含jvm监控)
- Python open 读和写
- Linux系统SSH服务之 sshkey密钥认证实战
- Redis工作中常用命令,看这一篇就够了
- String、StringBuffer、StringBuiler深入分析,看这一篇就够了
- Windows安装pip方法
- 通过jvm字节码研究Synchronized
- 学synchronized锁升级过程,吊打面试官
- jvm启动加载类的全过程,全网最全一篇,告诉你什么是双亲委派机制
- sonar+Jenkins 构建代码质量自动化分析平台
- 几百行代码,实现了微信群聊,神奇!
- 深入解析==与equals()区别
- 工作中常用的十款idea插件