Struts2学习笔记(七)

声明式异常处理

注: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的大多数功能都由拦截器实现。






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值