zoukankan      html  css  js  c++  java
  • 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里面是用拦截器来实现的。

  • 相关阅读:
    为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
    Weblogic12c安装与配置详解
    淘宝自己的前端框架KISSY(类似jquery)
    ExtJS4中initComponent和constructor的区别
    Servlet的getContextPath(), getServletPath(), getRequestURI(), getRealPath("/")
    Hash Join 一定是选择小表作为驱动表吗
    oracle for loop 简单
    oracle正则表达式
    Android开发--用户定位服务--UserLocation
    android蓝牙开发---与蓝牙模块进行通信
  • 原文地址:https://www.cnblogs.com/ligui989/p/3220763.html
Copyright © 2011-2022 走看看