Struts2学习笔记(七)

来源:互联网 发布:mysql支持多大并发量 编辑:程序博客网 时间:2024/05/17 02:06

声明式异常处理

注:Struts2支持声明式异常处理。

Struts2是通过拦截器(interceptor)来处理声明式异常处理。

要求在DAO、Service、Action层都需要抛出导演就可以了。其它的让Struts2来处理。详细过程如下:

实例:

如果在列表时出现错误,则方法如下:

public List<Category> list() throws SQLException{Connection conn = DB.createConn();String sql = "select * from _category";List<Category> categories = new ArrayList<Category>();PreparedStatement ps = DB.prepare(conn, sql);ResultSet rs = null;try {rs = ps.executeQuery();Category c = null;while(rs.next()){c = new Category();…………}} catch (SQLException e) {e.printStackTrace();throw(e);//此处向外抛出异常,让调用它的方法知道} finally{DB.close(rs);DB.close(ps);DB.close(conn);}return categories;}

然后在调用它的Action也向上抛出异常

public String list() throws SQLException{categories = categoryService.list();return SUCCESS;}

注意重点:我们需要在Struts.xml配置文件中配置需要处理的异常就可以了。

<action name="*-*" class="com.wjt276.bbs2009.action.{1}Action" method="{2}"><result>/admin/{1}-{2}.jsp</result><result name="input">/admin/{1}-{2}.jsp</result><!--<exception-mapping>标签是映射异常处理。表示映射哪种异常,此处是java.lang.Exception, 如果出现异常,那么它会跳转到reslut="error"的结果集,也就是/error.jsp --><exception-mapping result="error" exception="java.sql.SQLException"/><result name="error">/error.jsp</result></action>

当然,我们也可以将所有的异常使用同一个异常映射,那就是<global-exception-mappings>需要映射的packge只需要继承此package就可以了。如下:

<package name="bbs2009-deafult" extends="struts-default"><global-results><result name="error">/error.jsp</result></global-results><global-exception-mappings><exception-mapping result="error" exception="java.sql.SQLException"/></global-exception-mappings></package>

action继承这个包就可以了:

<package name="admin" namespace="/admin" extends="bbs2009-default"><default-action-ref name="index"></default-action-ref><action name="index"><result>index.html</result></action><action name="*-*" class="com.wjt276.bbs2009.action.{1}Action" method="{2}"><result>/admin/{1}-{2}.jsp</result><result name="input">/admin/{1}-{2}.jsp</result><result name="error">/error.jsp</result></action></package>

注意:如果使用全局异常映射(<global-exception-mappings>)和全局结果集(<global-results>)则需要全局结果集(<global-results>)在前。

如果局部(当前)Action、和全局结果集存在相同的<result>,则使用最近的那个结果。

其中值得注意的是如果用default-action-ref对应的是一个简单的结果是可以执行的,但是如果想要让它执行class里面的内容就不行了(慎用)。这与这种情况,我们可以在web.xml中进行这样的配置:

<welcome-file-list><welcome-file>index</welcome-file></welcome-file-list>

总结:

1、 在Action中进行异常映射

2、 在package中进行全局异常映射

3、 使用继承共用异常映射

4、 Struts2中异常处理由拦截器实现(观察struts-default.xml)

a) 实际上Struts2的大多数功能都由拦截器实现。






 

原创粉丝点击