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

简介:
如何抓到异常的?
步骤:(以之前写的小样例为例)

如果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

相关文章
|
2月前
|
监控 安全 Java
异常类知识详解
异常类知识详解
|
5月前
|
Java 程序员 API
Java异常类型及异常处理方式
Java异常类型及异常处理方式
|
7月前
|
算法 程序员 编译器
【C++ 异常】深入探究C++的stdexcept类库
【C++ 异常】深入探究C++的stdexcept类库
68 0
|
7月前
|
缓存 Java 程序员
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
|
Java 编译器 程序员
Java异常处理(1)--异常概述与异常体系结构
Java异常处理(1)--异常概述与异常体系结构
108 1
Java异常处理(1)--异常概述与异常体系结构
|
缓存 前端开发 Java
Java后端开发你应该知道的全局异常处理
在开发Web应用程序时,异常处理是一项非常重要的任务。异常处理可以提高程序的健壮性和稳定性。Java后端开发人员可以设计一个统一的全局异常处理方案来解决异常处理的问题,避免代码冗余,提高开发效率。在本文中,我们将介绍如何设计Java后端的全局异常处理方案。
623 0
如何用c++实现异常处理
如何用c++实现异常处理
如何用c++实现异常处理
|
XML 前端开发 安全
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
163 0
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
|
Java
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
234 0
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
|
XML JSON 前端开发
设计一个全局异常处理器
cicada: 基于 Netty4 实现的快速、轻量级 WEB 框架;没有过多的依赖,核心 jar 包仅 30KB。