【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

时间: 2024-09-14 08:03:07

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

【Struts2框架】第二节Result-Global_Results_全局结果集

Global_Results_全局结果集,定义了一个大家都可以使用的结果集. 例子: <package name="test" namespace="/javaee" extends="struts-default"> <!-- 同一个package中的Action都可以直接用 --> <global-results> <result name="mainpage">/Hello

【Struts2框架】第二节Result-向结果传参数

重定向需要传值的原因就是栈值不共享 struts.xml: <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="result2" class="cn.edu.hpu.action.ResultAction2"> <result type="redirect

为MapReduce框架使用SQL类语言:使用高级声明式接口让Hadoop易于使用

简介 在过去二十年中,计算能力的稳步增强催生了铺天盖地的数据量,这反过来引起计算架构和大型数据处理机 制的范式转换.例如,天文学中的强大望远镜.物理学中的粒子加速器.生物学中的基因组测序系统都将海量数据交到了科 学家手中.Facebook 每天会收集 15TB 的数据到 PB 级的数据仓库中.在业界(例如,Web 数据分析.点击流分析和网络 监控日志分析)和科学界(例如,大规模模拟产生的数据的分析.传感器部署以及高吞吐量实验室设备),对大型数据挖掘 和数据分析应用的需求都在增加.尽管并行数据库系

【Struts2框架】Struts2总结

Struts2总结: 1.Actiona)namespace(掌握)b)path(掌握)c)DMI(动态方法调用-感叹号加方法名)(掌握)d)wildcard(通配符的配置)(掌握)e)接受参数(掌握前两种)f)访问request等(掌握Map,IOC方式)g)简单数据验证(掌握addField和<s:fieldError) 2.Resulta)结果类型(掌握四种,重点两种)b)全局结果(掌握)c)动态结果(了解) 3.ognl表达式(精通)a)# % $ 4.Struts标签a)掌握常用的 5

异常处理-Struts2项目中声明式异常捕捉 却显示No result defined for action

问题描述 Struts2项目中声明式异常捕捉 却显示No result defined for action LoginForm.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"

Struts2声明式验证

声明式验证步骤 一 .编写Action类 package com.tg.action; import com.opensymphony.xwork2.ActionSupport; public class CheckAction extends ActionSupport { /** * */ private static final long serialVersionUID = 7982435824916880105L; private int age ; private String us

一个让开发人员仅通过声明式代码的方式实现智能数据结构的Java框架

一个朋友的框架发布1.1版本,和1.0在运行时生成额外字节码不同,1.1在编译时通过maven插件生成额外字节码,因此避免了暴露微量的设计模式给用户,让用法更简单粗暴,性能也更高.很大一部分不太像框架了,而更像是java语言的扩展,是个重大升级.此外,充分吸取1.0的教训,给出架构图并,让所有文档中英文双版,避免别人不明全局.另外,不再兼容java7. 原文 - https://github.com/babyfish-ct/babyfish/blob/master/README_zh_CN.md

struts2.0-Struts2 验证器 声明式验证 的配置文件中EL的使用

问题描述 Struts2 验证器 声明式验证 的配置文件中EL的使用 解决方案 你是怎么看contextMap和stack的?在页面上debug吗? 解决方案二: 你确定你找的是同一个map或者值栈?contextMap是包装了application,你去看看源码存值方式,是不是有调用完之后,map清key的代码.

【spring框架】spring使用Annotation进行声明式事务管理

声明式的事务管理 a)事务加在DAO层还是Service层? UserService调了UserDao,调了它的save方法,而UserDao它会去访问数据库. 在Dao里面,事务的还是就是save的开始,事务的结束就是save的结束,这是最直观的.也可以用AOP来写,Spring已经给你写好了. 那么事物的边界(beginTransaction()事务开始和事物结束getTransaction().commit())加在哪里比较好呢? Dao一般都是固定的单一的CRUD,也就是核心的事务操作,