【Struts2框架】第五节声明式异常处理-处理异常的过程

来源:互联网 发布:手机看最新电影软件 编辑:程序博客网 时间:2024/05/29 08:26
如何抓到异常的?
步骤:(以之前写的小样例为例)

如果CategoryService中的list方法出错(category_表不存在):
public List<Category> list()throws SQLException{Connection conn=DB.createConn();String sql="select * from category_";PreparedStatement ps=DB.prepare(conn, sql);List<Category> categories=new ArrayList<Category>();try {ResultSet rs=ps.executeQuery();Category c=null;while(rs.next()){c=new Category();c.setId(rs.getInt("id"));c.setName(rs.getString("name"));c.setDescription(rs.getString("description"));categories.add(c);}} catch (SQLException e) {e.printStackTrace();throw(e);//向外抛出异常}DB.close(ps);DB.close(conn);return categories;}
做到两点:throws SQLException和throw(e);

此时CategoryAction接收到CategoryService中的list方法抛出的异常:
public String list()throws Exception{categories=categoryService.list();return SUCCESS;}
注意加:throws Exception

CategoryAction中的throws Exception继续向外抛异常,之后struts.xml接住
<action name="*-*" class="cn.hpu.bbs.action.{1}Action" method="{2}">           <result>/admin/{1}-{2}.jsp</result>            <result name="input">/admin/{1}-{2}.jsp</result>                <result name="update">/admin/{1}-{2}.jsp</result>               <exception-mapping result="error" exception="java.sql.SQLException"/>              <result name="error">/error.jsp</result> </action>

其中 <exception-mapping result="error" exception="java.sql.SQLException"/>  
java.sql.SQLException异常有对应的result,找到result(error.jsp),显示异常的界面

在error.jsp中利用[Debug]可以看到,栈值中有exception,详细为:
exception   java.sql.SQLException: Table 'bbs2014.category_' doesn't exist

友好界面里最好写“出错了,请联系管理员”,要比“请稍后再试”好多了

全局的异常处理:
如果需要收集的异常过多,那么需要全局的异常处理机制,在struts中这样配置:
<package name="bbs2014_default" 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><!--extends="bbs2014_default"继承上面那个公用package--><package name="admin" namespace="/admin" extends="bbs2014_default">       <action name="*-*" class="cn.hpu.bbs.action.{1}Action" method="{2}" >       <result>/admin/{1}-{2}.jsp</result>            <result name="input">/admin/{1}-{2}.jsp</result>                <result name="update">/admin/{1}-{2}.jsp</result>   </action>
struts中支持声明式的异常处理指的是,要是有异常,就向外抛,最后会给一个统一的接口,然后让你在特定的页面做出处理。


转载请注明出处:http://blog.csdn.net/acmman/article/details/47086261

0 0
原创粉丝点击