`
neil-jh
  • 浏览: 147804 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

关于项目中的异常与Action和Properties的讨论

阅读更多

异常

异常分“意外异常”和“错误异常”两类

意外异常—是可以预见的异常。意外异常一般用可检测的异常(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;
         }
    }
}

*********************************************************

2
1
分享到:
评论

相关推荐

    Struts_In_Action(中文完整版)

    6. **异常处理**:Struts的异常处理机制可以帮助开发者优雅地管理程序中的错误和异常,书中会讨论如何配置和使用ActionError和ActionMessage。 7. ** strutstiles 插件**:Struts Tiles是一个强大的布局和页面组装...

    Java平台统一异常框架归类.pdf

    在JavaEye论坛上,有关Checked异常和Unchecked异常的讨论很多,简而言之,Checked异常是在编译时需要处理的异常,而Unchecked异常则可以在运行时处理。 程序异常的处理通常涉及异常信息的国际化,以适应不同地区的...

    jboss seam 学习资料,seam in action和官方手册

    2. **配置与部署**:介绍如何设置Seam项目,包括pom.xml、seam.properties和web.xml的配置。 3. **JSF集成指南**:深入理解Seam与JSF的交互,包括Facelets模板和Seam组件的使用。 4. **EJB和CDI集成**:讲解Seam如何...

    Struts项目实施经验

    - ActionForm:封装用户输入数据的JavaBean,与JSP中的表单元素对应,用于数据验证和传递。 4. **国际化与本地化** - Struts支持多语言,通过资源文件(.properties)实现,可以在不同国家和地区的用户间切换界面...

    JavaEE企业级项目开发(SSH) 01 单元设计.doc

    学会如何进行数据校验并应用到实际项目中,可以避免因用户输入错误导致的程序异常。 在访问Web元素方面,Struts2提供了访问Servlet API的能力,包括session、request、response等,这使得在Action中可以直接操作...

    struts in action

    《Struts in Action》这本书是Java Web开发领域中关于Apache Struts框架的经典之作。Struts是一个开源的MVC(Model-View-Controller)框架,它为构建基于Java Servlet和JSP的Web应用程序提供了强大的支持。在Java ...

    基于Struts框架的网上书店毕业论文

    4. **JSP与Servlet**:讨论Struts如何与JSP和Servlet结合,实现动态页面和后端服务的交互。 5. **Action与ActionForm**:详述Action类作为控制器的角色,以及ActionForm对象在传递用户数据到后台服务中的作用。 6....

    struts-2.1.2所有jar包

    7. **异常处理**:Struts 2允许定义全局和Action级别的异常处理策略,提供统一的错误页面,增强用户体验。 8. **国际化(i18n)**:Struts 2支持多语言环境,通过资源包(properties文件)可以轻松实现应用程序的...

    Struts基础教程附录

    6. **国际化与本地化**:Struts支持多语言环境,通过资源包(properties文件)管理不同语言的文本,实现应用的国际化和本地化。 7. **异常处理**:Struts提供了全局的异常处理机制,允许开发者定义在出现异常时如何...

    解决Struts提交中文出现乱码和提交日期型数据报错的问题

    5. **错误处理**:在`struts.xml`或`struts.properties`中,配置全局或特定Action的异常处理,捕获并处理类型转换异常。 通过以上步骤,一般可以解决Struts框架在处理中文和日期型数据时出现的问题。当然,每个项目...

    struts资料大全.rar

    以上是Struts框架的一些关键知识点,压缩包“struts资料大全.rar”中可能包含关于这些主题的详细教程、示例代码和实战指导,对于学习和提升Struts开发技能非常有帮助。通过深入学习和实践,开发者能够更好地理解和...

    Struts1有关的资料

    9. **国际化与本地化**:Struts1支持多语言环境,通过资源包(.properties文件)管理消息和文本,可以根据用户的浏览器设置动态切换语言。 10. **生命周期与工作原理**:当用户发送请求时,Struts1的...

    Struts2.1权威指南光盘源代码第16章

    1. **Action与Result**:在Struts2中,Action类是业务逻辑处理的主要部分,而Result则负责展示结果。第16章可能会详细介绍如何创建自定义Action和Result,以及如何配置它们在struts.xml文件中的映射。 2. **...

    MyEclipse2013中图形界面配置struts2的操作方法

    下面,我们将详细讨论如何在MyEclipse2013中使用图形界面配置Struts2,以及这个过程中的关键知识点。 首先,我们需要理解Struts2的核心概念。Struts2框架基于拦截器模型,通过Action类处理用户请求,并将结果返回到...

    浪曦struts2源码第9课

    6. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据,以及在Action中的属性访问。 7. **WebRoot**:这个目录通常包含Web应用的静态资源,如...

    struts-console

    在Java Web开发中,Struts Console扮演着至关重要的角色,尤其在基于Struts框架的项目中,它能够帮助开发者高效地进行配置管理、动作调用、以及异常处理等操作。 标题"struts-console"暗示了我们讨论的是与Struts ...

    精通struts技术.rar

    Struts通过Action类作为Controller,实现了业务逻辑与展示逻辑的分离,使得代码更易于维护和扩展。 2. **配置文件**:在Struts中,应用的配置主要在struts-config.xml文件中进行,包括Action、Form Bean、...

    java 框架论坛系统

    5. **Tiles框架**:在大型项目中,Struts常与Tiles框架结合使用,用于页面布局和组件重用,提高代码的可维护性。 6. **国际化与本地化**:论坛系统通常需要支持多种语言,Struts提供了方便的国际化支持,通过资源...

    孙卫琴精通sutruts第十章源码chapter10

    6. **国际化与本地化**:介绍如何在Struts中实现多语言支持,以及资源文件(.properties)的应用。 7. **异常处理**:Struts的异常处理机制,包括自定义异常类和配置全局异常映射,以及如何在出现错误时优雅地显示...

    Struts在行动,Struts应用教程

    通过"Struts在行动"的学习,开发者不仅可以掌握Struts框架的基本使用,还能了解其在实际项目中的应用和最佳实践,为构建高效、稳定的Web应用打下坚实基础。同时,这也将有助于开发者提升面向对象设计、MVC模式理解...

Global site tag (gtag.js) - Google Analytics