异常
异常分“意外异常”和“错误异常”两类
意外异常—是可以预见的异常。意外异常一般用可检测的异常(checked Exception) Exception
错误异常—不可预见的异常。例如:内存溢出而且无法解决。错误异常一般用不检测异常(unChecked Excetpion) RuntimeException
在项目中一般建议使用RuntimeException 异常来处理。
在我们的项目中一般有这么几层,视图层,Action层,业务Service层,Dao层。
一般情况我们在我们所有的业务在Service层来处理,所以我们把异常处理放在这一层。一般情况我们 throw 出这个异常。
我们在Action来调用Service的时候遇到业务逻辑的异常,让会被拦截器捕获抛出INPUT。下面举个例子说明。
Propertie
例子用到Propertie文件。这里先对Webwork中Propertie说明。
因为我们错误处理返回的错误提示都记录在Propertie文件中,新建一个Propertie文件。名称为error.properties放在classes目录下。
propertie文件都是用 key=value 来进行设置匹配的。
例如 not_exiet={0}\"{1}\"不存在的 在此文件中如果要用“”必须先转义 用 / 这个符号来进行转义。这里的{} 是指定显示的内容,这个可以在下面来进行指定。
在页面中可以用<ww:property value="%{getText('not_exiet')}"/> 或
<ww:property value="getText('not_exiet',{'参数1','参数2'})"/>得到 参数1对应{1},参数2对应{2}
error.properties 文件要配置在webwork.properties 文件中 加入 webwork.custom.i18n.resources=error 这么一句
异常
例如我有一个业务逻辑层。目的 推荐一个产品,如果推荐超过10个,那么就不能再推荐。这时候我们就可以抛出一个异常。这个异常我们定义为 usinessException 现如下
********************************************
public class BusinessException extends RuntimeException {
//错误的类型
public static final class ERROR_TYPE{
public static final String UNIQUE="unique"; // 唯一
public static final String NOT_EXIET = "not_exiet"; //不存在
public static final String RECOMMENDATORY_NUMBER_OUT = "recommendatory_number_out"; //越界
}
private String who; //谁的错误
pivate String errorType; //错误类型
pivate String value; //错误的值
public BusinessException(String who, String errorType, String value) {
this.who = who;
this.errorType = errorType;
this.value = value;
}
public String getWho() {
return who;
}
public String getErrorType() {
return errorType;
}
public String getValue() {
return value;
}
}
*******************************************************
错误异常定义好后,我们在业务层就可以抛出了
例如 推荐产品的业务方法如下
*******************************************************
public void recommendatoryTravelBureau(TravelBureau travelBureau) {
List<TravelBureau> travelBureaus = getRecommendatoryTravelBureau(); //等到多有产品
if (travelBureaus.size() >=10) { //如果产品超过10 个就抛出异常
throw new BusinessException("travel_bureau", BusinessException.ERROR_TYPE.RECOMMENDATORY_NUMBER_OUT, "10");
}
...............
}
**********************************************************
在Action中有个方法来调用此业务逻辑如下:
***********************************************
public String recommend() throws Exception {
travelBureauService.recommendatoryTravelBureau(travelBureau);
return SUCCESS;
}
************************************************
这时候如果遇到异常将被拦截器捕获,返回INPUT
拦截器如下:
*********************************************************
public class ExceptionInterceptor extends StaticParametersInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
try {
return invocation.invoke();
} catch (Exception e) {
ActionSupport actionSupport = ((ActionSupport)invocation.getAction());
exception(e,actionSupport);
return Action.INPUT;
}
}
private void exception(Exception e, ActionSupport actionSupport) throws Exception{
if(e instanceof BusinessException){
BusinessException be = (BusinessException)e;
String who = actionSupport.getText(be.getWho());
String errorType = actionSupport.getText(be.getErrorType(),new String[]{who,be.getValue()});
actionSupport.addActionError(errorType);
}else{
throw e;
}
}
}
*********************************************************
分享到:
相关推荐
1:非重用型:只能在被存储它的TEST中...右键ACTION PROPERTIES>EXTERNAL ACTION>USE A LOCAL,EDITABLE COPY。 调用重用型的ACTION可以在以后新版本中控件发生变化时只升级被调用的可重复型ACTION所在的源程序即可。
Spring In Action 第二版 书中例子与项目的 源代码
Struts2的Struts.properties配置文件详解 Struts2是一个基于MVC模式的...通过对Struts.properties配置文件中的这些参数进行设置和配置,开发者可以根据需要自定义Struts2的行为和性能,提高应用程序的开发效率和性能。
在实际的j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印到浏览器可能会让用户感觉莫名其妙,也有可能让某些用户找到破解系统的方法。 出来工作一年时间了,我也大概对异常处理有了一些...
基于J2EE的开发技术 - 实验项目1 - Action的实现与配置
在 Struts2 项目中,需要在 web.xml 和 struts.xml 文件中进行配置。web.xml 文件中,需要配置 Struts2 的过滤器,例如: ``` <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher.ng.filter....
自己写一个多个action之间跳转的小项目,和大家共享下!
在讨论获取项目的相对路径之前,我们需要了解绝对路径和相对路径的概念。绝对路径是指文件或目录在硬盘上的真正路径,例如 C:\xyz\test.txt 代表了 test.txt 文件的绝对路径。相对路径是指相对于某个基准目录的路径...
教你如何用ssh进行分页,从前端的jsp页面代码,到action代码,dao,daoimpl代码,service,serviceimpl,层层嵌套,层次清晰。一看就会!
action 是一个基于Spring Boot & MyBatis的项目,用于快速构建中小型API、RESTful API,以及企业级项目,该项目稳定、简单、快速,使我们摆脱那些重复劳动,专注于业务代码的编写,减少加班。 特征&提供 最佳实践的...
利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...
主要介绍了C#中Action和Func的区别,是进行C#程序设计时需要加以注意的知识点,需要的朋友可以参考下
Spring in Action CN.001<br>Spring in Action CN.002<br>Spring in Action CN.003<br>Spring in Action CN.004<br>Spring in Action CN.005<br>Spring in Action CN.006<br>Spring in Action ... <br>本书信息:...
个人简历中如何写项目经验 在个人简历中,项目经验是最重要的部分之一。许多求职者不知道如何填写项目描述,往往只是寥寥几笔,这样的简历肯定不会引起阅读者的兴趣。那么,如何写好项目经验呢? 首先,需要知道...
28. 纠正措施(Corrective Action):是指项目中的纠正措施,用于纠正项目中的错误和偏差。 29. 费用预算(Cost Budgeting):是指项目的费用预算,包括项目的总成本和预算。 30. 费用控制(Cost Control):是指...
常见调试技术与异常(错误)处理,内容全面
Action、Service 和 Dao 功能解析 在不分层的系统中,我们可以将所有的代码都写到一个地方,比如 Struts 的 Action 类。在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要做数据访问。为了更好地理解和分离 ...
Action和类型转换
资源中示例了一个struts2的配置文件中配置的action的result结果为另外一个action的配置,该跳转的过程中是带所有参赛调整的,在另外一个action中可以接受到当前action的所有参数,此配置文件是我日常开发中的经验...
Spring in Action第三版,中文pdf,带书签和书中源码!