• struts2异常处理


    java1234官网

    在sstruts2里面配置自己的异常处理

    1 <exception-mapping result="error" exception="java.sql.SQLException"/>
    2             <result name="error">/error.jsp</result>

    在service里面捕捉到异常后往外抛,如

     1 public List<Category> list()throws SQLException{
     2         Connection conn = DB.createConn();
     3         String sql = "select * from category";
     4         PreparedStatement ps = DB.prepare(conn, sql);
     5         List<Category> categories = new ArrayList<Category>();
     6         ResultSet rs;
     7         try {
     8             rs = ps.executeQuery();
     9             Category c = null;
    10             while(rs.next()){
    11                 c = new Category();
    12                 c.setId(rs.getInt("id"));
    13                 c.setName(rs.getString("name"));
    14                 c.setDescription(rs.getString("description"));
    15                 categories.add(c);
    16             }
    17         } catch (SQLException e) {
    18             // TODO Auto-generated catch block
    19             e.printStackTrace();
    20             throw (e);
    21         }
    22         DB.close(ps);
    23         DB.close(conn);
    24         return categories;
    25     }

    注意抛出异常throw(e),必须显示声明异常throw SQLException.

    当action调此方法时,会接住异常,再次往外平抛,由strust接住,找到此异常对应匹配的result,显示页面。

    如果有很多种异常怎么办?要写很多个吗?

    写一个package,在里面写个全局的异常映射,后面的包都继承这个包。代码如下

     1 <package name="bbs2_default" extends="struts-default">
     2     <!--     <global-results>
     3             <result name="error">/admin/error.jsp</result>
     4         </global-results>
     5          -->
     6         <global-exception-mappings>
     7             <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
     8         </global-exception-mappings>
     9     </package>
     1  
     2     <package name="admin" namespace="/admin" extends="bbs2_default">
     3         
     4         <action name="index">
     5             <result>/admin/index.html</result>
     6         </action>
     7         
     8         <action name="*-*" class="com.lch.bbs2009.action.{1}Action" method="{2}">
     9             <result name="success">/admin/{1}-{2}.jsp</result>
    10             <result name="input">/admin/{1}-{2}.jsp</result>
    11        <!--      <exception-mapping result="error" exception="java.sql.SQLException"/> -->    
    12             <result name="error">/error.jsp</result>            
    13         </action>
    14 
    15     </package>

    在admin包中没找到对应的异常,则在父包中找,返回一个相应的result,再在admin中找到对应的result,再跳转到对应的页面。

    但是这样还是比较麻烦,通常的做法是

    1  <package name="bbs2_default" extends="struts-default">
    2         <global-results>
    3             <result name="error">/error.jsp</result>
    4         </global-results>
    5         <global-exception-mappings>
    6             <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
    7         </global-exception-mappings>
    8     </package>

     global-results要在global-exception-mappings的前面。

    拦截器

    默认拦截器配置引用

     <default-interceptor-ref name="defaultStack"/>

    虽然在这里exception没有配置任何的interceptior,但是任何调用都会被上面这些拦截器过滤一遍。我们看一下exception的拦截器

    任何的拦截器都必须实现一个抽象类AbstractInrerceptor,这个抽象类必须实现一个接口Interceptor通过查看,找到拦截所用的方法

    这句话就已经调用了action了

    一句话总结,对于异常的声明式处理,在struts2里面是用拦截器来实现的。

  • 相关阅读:
    OTA在线升级Android7.1系统迅为IMX6Q开发板支持SATA,PCIE,EIM总线,WIFI蓝牙
    迅为iTOP2K1000开发板龙芯中科国产64位Loognix系统工业核心主板
    四核处理器IMX6Q开发板Android7.1系统支持SATA、PCIE、EIM总线、WIFI蓝牙OTA远程升级提供OpenWrt文件系统
    迅为瑞芯微RK3399开发板Debian9多媒体测试之Gstreamer测试
    迅为IMX6ULL开发板Qt for Android搭建开发环境
    迅为RK3568开发板Ubuntu系统编写运行Qt工程
    src/caffe/proto/caffe.pb.h:17:2: error: #error This file was generated by an older version of protoc which is #error This file was generated by an older version of protoc which is
    ubuntu/ linux挂载新硬盘
    so 对XXX未定义的引用
    nvcaffe 的一个问题解决
  • 原文地址:https://www.cnblogs.com/ligui989/p/3220763.html
Copyright © 2020-2023  润新知