zoukankan      html  css  js  c++  java
  • struts的声明式异常处理

    情景

    使用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

    查看原文:http://www.wewill.top/2016/06/02/struts%E7%9A%84%E5%A3%B0%E6%98%8E%E5%BC%8F%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/

  • 相关阅读:
    Java -- JDBC 批处理
    Java -- JDBC mysql读写大数据,文本 和 二进制文件
    Python之操作符优先级
    闲聊之Python的数据类型
    UPX和WinUpack压缩壳的使用和脱法
    改进我们的小游戏
    Python while循环语法
    Python条件分支语法
    python条件分支
    小插曲之变量和字符串
  • 原文地址:https://www.cnblogs.com/wewill/p/5588727.html
Copyright © 2011-2022 走看看