0 0

j2ee框架异常的解决方法struts2+srping+hibernate+freemark+lucence+jsp,5

<div class="iteye-blog-content-contain" style="font-size: 14px">做了几个web项目了但是对exception没有一个标准的写法,欢迎大家讨论下</div>
2013年4月16日 17:27

2个答案 按时间排序 按投票排序

0 0

采纳的答案

这是我之前收集整理的

异常设计原则(Effective Java):
只为异常条件使用异常。也就是说,不要为控制流使用异常,比如,在调用 Iterator.next() 时而不是在第一次检查Iterator.hasNext() 时捕获 NoSuchElementException 。
为可恢复的条件使用检查型异常,为编程错误使用运行时异常。这里,Bloch 回应传统的 Sun 观点 —— 运行时异常应该只是用于指示编程错误,例如违反前置条件。
避免不必要的使用检查型异常。换句话说,对于调用者不可能从其中恢复的情形,或者惟一可以预见的响应将是程序退出,则不要使用检查型异常。
抛出与抽象相适应的异常。换句话说,一个方法所抛出的异常应该在一个抽象层次上定义,该抽象层次与该方法做什么相一致,而不一定与方法的底层实现细节相一致。例如,一个从文件、数据库或者 JNDI 装载资源的方法在不能找到资源时,应该抛出某种 ResourceNotFound 异常(通常使用异常链来保存隐含的原因),而不是更底层的 IOException 、 SQLException 或者 NamingException 。




到底选择检查异常还是非检查异常???

    1、检查型异常代表关于一个合法指定的请求的操作的有用信息,调用者可能已经对该操作没有控制,并且调用者需要得到有关的通知 —— 例如,文件系统已满,或者远端已经关闭连接,或者访问权限不允许该动作。

    2、非检查异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。 如果是RuntimeException一般是”你“的问题。


Rod Johnson(spring之父)观点

              检查异常缺点:太多代码,难以读懂的代码、异常的无休止封装、易毁坏的方法签名、检查异常对接口不一定管用(可恢复及不可恢复)。
检查异常要比错误返回码好的多。如果调用代码能对异常做些切合实际的事情,请使用检查异常,如果致命的,或者调用者捕捉它没什么益处,请使用非检查异常。
在包级别决定每个包将怎样使用检查或非检查异常。用文字详细说明非检查异常的决定,因为许多开发人员将预料不到该决定。

使用非检查异常的唯一危险是那些异常可能没有被充分用文字加以详细说明。详细的异常说明。


这是iteye很早之前讨论的
http://www.iteye.com/topic/2038?page=12
http://www.iteye.com/topic/72170

2013年4月16日 17:40
0 0

2楼的回复内容比较杂,我就一些实际项目案例中异常的处理给予建议,仅供参考。

你的项目架构是struts2、spring、hibernate……
其实做这种web应用系统的异常相对比较简单,因为应用系统目前主流也就是mvc、service、orm。

hibernate使用的是unchecked exception,由HibernateException extends RuntimeException,所以你在调用hibernate方法的时候,都没有捕获这种unchecked exception。

ibatis使用的是checked exception,比如说直接抛出SQLException、或者extends Exception的checked exception。所以你在调用ibatis方法的时候,都要捕获异常。

对于你使用hibernate情况,很多比较优秀的框架平台在service层、controller层都不会处理。包括:springside、j-hi。

既然都没捕获,那么都在struts的action一起抛出。如果你没有对异常做统一的处理,那么这些orm抛出的异常直接在你访问struts的action时,在页面中显示(这种方式对用户很不友好)。所以struts2的配置文件中有一个<global-exception-mappings>的配置。这个配置的作用就是接住这些异常,然后进行处理。
有些实际系统的配置如下(截取j-hi平台的):

    <global-results>
      <result name="exceptionPage" type="dispatcher">
        <param name="location">/common/exceptionPage.jsp</param>
      </result>
    </global-results>
    <global-exception-mappings>
      <exception-mapping exception="org.hi.framework.web.BusinessException" result="exceptionPage" />
      <exception-mapping exception="org.acegisecurity.AccessDeniedException" result="exceptionPage" />
    </global-exception-mappings>

这里对业务逻辑异常、以及acegi的访问拒绝异常统一返回exceptionPage这个页面。
这里仅仅是使用统一的jsp对错误进行显示。这样还是不能够满足使用者对看得懂这些异常信息。此时,可通过struts的ExceptionMappingInterceptor统一拦截。

当然,业务层中自定义异常(具体是自定义checked exception、还是unchecked exception,取决于具体的情况。我个人建议自定义exception集成runtimeexception。)也可完全抛给上层的action。

很多实际大型项目对于异常处理都有一套体系。比如说:定义一个异常映射表,配置异常代码与错误显示信息(显示到浏览器让客户看得懂的显示信息),然后在上层捕获异常,返回错误码,再根据异常映射表获取对应的错误显示信息,响应到struts的global result。

2013年4月16日 23:02

相关推荐

    struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版

    struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版 struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动...

    Struts2+Spring2.5+Hibernate3+Freemarker框架整合

    整合S2SH+Freemarker+oscache,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    spring 3.0.4 +hibernate3.6+mybatis3.0.4+struts 2.1.8+freemark整合

    标题 "spring 3.0.4 + hibernate3.6 + mybatis3.0.4 + struts 2.1.8 + freemarker 整合" 描述了一个经典的Java Web开发集成框架,用于构建高效、可扩展的Web应用程序。这个组合在过去的几年里非常流行,因为它将多个...

    Struts2+Freemark

    Struts2和FreeMarker是两种在Java Web开发中广泛使用的开源框架。Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求,管理业务逻辑,而FreeMarker则是一个模板引擎,负责生成动态HTML或其他...

    Struts2.0+Spring2.5+freemarker+ajax

    Struts2还支持多种结果类型,如JSP、FreeMarker模板,使得视图层更加灵活。 Spring2.5作为依赖注入容器,允许开发者通过配置文件或注解来管理对象的生命周期和依赖关系。这种松耦合的特性使得代码更易于测试和维护...

    网络文件管理系统实例编程(struts2+hibernate+freemark)

    网络文件管理系统是一个基于Java平台的企业级应用,它利用Struts2、Hibernate和FreeMarker三大技术框架,实现对网络上文件的高效管理和访问。本实例编程着重讲解如何将这三种技术结合,构建一个实用且功能丰富的文件...

    ssh整合例子(spring3 + struts2 + hibernate4+dwr+ext+json)

    内含 ext+dwr+freemark+jasperreort+ireport+echance+oscache+velocite等技术 展示例子:http://zz563143188.iteye.com/blog/1462413 若要下载chm格式请到http://user.qzone.qq.com/563143188 程序源码下载地址10MB...

    简易的java后台管理框架,基于SpringBoot+FreeMark+ace admin+mysql .zip

    首先,SpringBoot是Spring框架的一种简化版,它内置了Tomcat服务器,简化了Spring应用的初始搭建和配置工作。通过“起步依赖”(Starter POMs)概念,开发者可以方便地引入如数据访问、Web服务等模块。在本项目中,...

    ssh springMvc,jquest easyUI多视图、多数据源开发框架源码

    SSH 是一种经典的Java Web开发框架组合,由Struts作为前端控制器,Spring作为应用上下文和依赖注入框架,Hibernate作为持久层ORM工具。Struts提供了MVC模式的实现,Spring则负责管理对象及事务处理,而Hibernate则...

    hibernate4+spring4+springmvc4+freemarkdemo

    【标签】"hibernate4"、"spring" 和 "freemark" 指的是项目中使用的三个关键技术。Hibernate 4是用于数据库操作的框架,Spring是一个全面的企业级应用框架,包括了AOP(面向切面编程)、DI(依赖注入)和事务管理等...

    使用ckeditor+struts2+freemaker的图片上传

    Struts2是一个基于MVC设计模式的Java Web框架,它简化了Java Web应用程序的开发。在CKEditor图片上传的场景中,Struts2可以作为后端接收上传请求的控制器。我们需创建一个Action类,该类包含一个方法来接收并处理...

    spring+freemark整合工程

    在IT行业中,Spring框架与FreeMarker模板引擎的整合是一个常见的任务,特别是在开发Web应用程序时。Spring MVC作为Spring框架的一部分,负责处理HTTP请求并提供视图层的解决方案,而FreeMarker则是一个强大的、轻量...

    spring+hibernate+freemarker+jQuery 登录注册例子

    本示例中,"spring+hibernate+freemarker+jQuery"的组合提供了一个高效且功能丰富的解决方案。让我们详细了解一下这些技术以及它们如何协同工作来实现这个系统。 首先,Spring是一个开源的Java框架,主要用于简化...

    Jersey Spring4 Freemarker HIbernate整合搭建

    "Jersey Spring4 Freemarker HIbernate整合搭建"这个主题就是关于如何将这几个关键组件整合在一起,以创建一个功能强大的RESTful服务。让我们详细了解一下这些技术以及它们在集成过程中的作用。 首先,Jersey是Java...

    Struts2源码(xwork|asm|commons|freemark|ognl)

    Struts2是一个非常著名的Java Web框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护、高性能的企业级应用程序的工具。Struts2的源码包括了多个关键组件,如xwork、asm、commons、...

    基于SSM框架的Java电商项目源码+数据库+项目说明.zip

    2. Spring MVC 3. Mybatis 4. redis 5. solr 6. EasyUI 7. UEditor 8. JQuery 9. Freemark 10. activMQ 11. httpClient 12. MySQL 13. FastDFS 14. ... # 开发环境 1. InteliJ IDEA 2. Maven 3. Tomcat7 4. JDK 5....

    freemarker与struts2详细配置

    &lt;constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/&gt; &lt;constant name="struts.freemarker.templateLoaderPath" value="/WEB-INF/classes/"/&gt; &lt;constant name="...

Global site tag (gtag.js) - Google Analytics