专栏首页钟绍威的专栏struts的声明式异常处理 demo

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-mappingresult

先放上刚刚解决方案的代码

<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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 装配bean

    spring有三种装配bean的方式:隐式装配、java代码装配、xml装配 隐式装配最为省事方便,也称为自动化装配 这三种装配方式可以混搭着来用 在这里通...

    用户1174983
  • java.io.StreamCorruptedException: invalid type code: AC错误的解决方法

    问题描述: 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建...

    用户1174983
  • linux常用命令之压缩打包用法选项DEMO注意选项DEMO用法选项用法选项DEMO

    DF df – report file system disk space usage 查看文件系统的使用清空 用法 df [-hi] [path]选项-h h...

    用户1174983
  • 简易前端模板引擎

    模板解析 解决的问题: 将data和js+html片段解析成html片段,完成赋值和js逻辑,如下所示: 输入: var data = {     name: ...

    用户1217459
  • 数据结构——栈

    大家先想象一下这个场景:当我们去打羽毛球时,通常会带一桶羽毛球,不管我们是要拿出还是放入一个羽毛球,都要从最上面拿,如果想拿到下方的羽毛球,必须先把上面的拿出来...

    三猫
  • js的深拷贝,浅拷贝

    对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性...

    山河木马
  • C#-Xamarin利用ZXing.Net.Mobile进行扫码

    但,实际上Xamarin已经有很多开源代码了;只要不是特别特殊的项目,基本上是都可以满足开发。

    Kiba518
  • 资产瞎配模型(一)

    大类资产配置是量化中一个重要的领域,本文尝试实现若干资产配置模型。全文纯属瞎配,欢迎指正!

    量化小白
  • C4C销售订单中业务伙伴的自动决定功能Partner determination procedure

    例子:我新建一个Sales Order,account 字段选择ID为1001的Account:Porter LLC

    Jerry Wang
  • iOS中获取要要保存到相册中的图片

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823

扫码关注云+社区

领取腾讯云代金券