- 浏览: 890663 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
Java引入了异常处理给程序调试带来的方便,但给客户带来的烦恼,任何客户都不希望看到一大串堆栈信息。这篇文章就是纪念一个教训。
事件缘由:老板在给客户做演示的时候,出现长串堆栈信息。尽管之前我们做过很多测试,都没有出现问题。因为数据库数据不完整性带来的灾难被老板碰到了。这让我们感到很尴尬。决定彻底解决这类隐患。
设计背景:
我们系统采用3层结构。即 DAO,SERVICE, ACTION(strut2)。DAO利用spring对hibernate的封装实现。 service 是核心业务逻辑的实现,同时也是事务处理层。action扮演controllor层的作用。
设计过程:
1,dao层的异常分可预测,和不可预测。
在可预测的异常我们可以抛给service层处理,有些包含了很有用的信息。如入户名重复的异常。
不可预测的异常我们可以自己封装起来,然后重现包装自定义的异常抛给servic处理。
2,servic层的异常也和dao一样。分两中。处理雷同。
3,在action中我们利用struts2的设计理念。action中可以处理任何来自底层的异常。这样如果是有用的信息,我们可以抛给用户,以便提示用户。如果是更友好点,我们可以包装起来抛出。抛给struts2,让她来处理。只要在struts.xml中配置相关处理即可。这样可以统一处理异常。也可以分类处理异常。重用性比较高。也灵活。减少手动编程。
4,框架本身的异常。struts2等框架自身有时候也会有异常抛出。当然这种情况很少。只要有可能,我们就要预防。以防患于未然。做法也很简单 在web.xml 中配置 <error-page> 标签的信息。这样有服务容器来处理并定向到指定的页面。
编码实现:
1,自定义异常(主要用于包装异常)
public class AMPException extends RuntimeException {
private static final long serialVersionUID = -3888868544018808942L;
public String errorCode;
public AMPException(String message) {
super(message);
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
}
public class ActionException extends AMPException {
private static final long serialVersionUID = 7637165153080210218L;
public ActionException(String message) {
super(message);
}
}
public class ServiceException extends AMPException {
private static final long serialVersionUID = 4872117656104037525L;
public ServiceException(String message) {
super(message);
}
}
public class DaoException extends AMPException{
private static final long serialVersionUID = 8037899278793078796L;
public DaoException(String message) {
super(message);
}
}
2接口 定义如下(以service为例,dao层类似)
public interface SigProfileManager {
/**
* Save a profile's information
* @param sigProfile the SigProfile object
* @return the SigProfile object
* @throws Exception
* */
SigProfile saveSigProfile(SigProfile sigProfile) throws Exception;
}
实现类
public class SigProfileManagerImpl implements SigProfileManager {
public SigProfile saveSigProfile(SigProfile sigProfile) throws Exception {
try {
// 逻辑处理代码
} catch (Exception e) {
throw new ServiceException(errorMsg + e.getMessage());
}
}
}
3action 层。可以处理也可不处理。这要看业务逻辑本身,和信息本身是否需要重包装。更重的是的
controllor层自身是否有异常处理机制。一般比较成熟的框架都会有异常的处理机制的。
public class SigProfileAction extends BaseAction {
public String list() throws Exception{
try {
//service tie call
} catch (Exception e) {
throw new ActionException(errorMsg + e.getMessage());
}
return SUCCESS;
}
}
我用的是struts2,处理配置起来很方便在struts2.xml 中有两个地方可以配置
1,批量处理。可以处理每个action的异常
<global-exception-mappings>
<exception-mapping exception="org.springframework.dao.DataAccessException" result="dataAccessFailure"/>
<exception-mapping exception="java.lang.Exception" result="dataAccessFailure"/>
</global-exception-mappings>
2,单个处理
<action name="users" class="userAction" method="list">
<interceptor-ref name="adminCheck"/>
<result name="success">/WEB-INF/pages/admin/userList.jsp</result>
<result name="failure">/WEB-INF/pages/admin/error.jsp</result>
<exception-mapping exception="java.lang.Exception" result="failure"/>
</action>
4,容器处理
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
http://hi.baidu.com/webcell/blog/item/1b87f0196f954c71dbb4bd14.html
评论
发表评论
-
UrlRewriteFilter--动态URL静态化
2011-04-25 13:38 2043版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声 ... -
Java框架数据库连接池比较(c3p0,dbcp和proxool)
2011-04-08 22:34 707现在常用的开源数据连 ... -
Java Proxool 源代码分析
2011-04-03 00:31 1091入口点:ProxoolFacade. 启动顺序: ... -
一个相当好的自定义标签---分页(二)
2011-04-02 22:23 937在上一个介绍里面主要讲到了分页标签的配置,逻辑处理,引用。 ... -
一个相当好的自定义标签---分页(一)
2011-04-02 22:21 1448发现在系统中有好多写得很好的代码,也不知道是哪位前辈留下来的. ... -
恢复被CVS被Override and Update后的代码
2011-04-02 20:45 2027今天做了件相当愚蠢的事,把一个新的功能(之前未提交过代码)写完 ... -
MD5加密
2011-03-07 09:03 864因为用到所以就写了个加密的方法 如您发现有任何错误请Mailt ... -
抓取谷歌网页问题
2011-03-02 11:52 885当使用 URL url = new URL("htt ... -
readme
2011-03-01 15:57 8122011-3-1 /** * 循环创建父目录 * @ ... -
proxool配置文档(一)
2011-02-21 22:16 1110一、 所需要包 conmmons-loggin ... -
proxool配置文档(一)
2011-02-21 22:10 956一、 所需要包 conmmons-loggin ... -
总结一些常用功能源码
2011-02-18 09:32 911最近比较闲,总结一些开发中常用到的功能源码,把它挂出来;这样一 ... -
jboss + JMS 开发实例
2011-02-14 17:07 1801核心提示:异步进程通信是面向服务架构(SOA)一个重要的组 ... -
成为软件架构师
2011-02-01 21:48 919现在软件架构师满天飞 ... -
log4j中配置日志文件相对路径
2011-01-28 16:52 1160方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4 ... -
HttpClient|HttpClient请求详解
2011-01-28 12:50 1142HttpClient 是 Apache Jakarta Com ... -
Log4J通用配置|注意问题 笔记
2011-01-28 12:46 1127关于日志的等级 那些去 百度就知道了! 这几天 要搭个新框架 ... -
JAVA WEB学习笔记(一)-Cookie和Session专题
2011-01-27 12:46 1085一、cookie机制和session机制的区别******** ... -
深入 理解 Statement 和 PreparedStatement
2011-01-26 22:05 1065一、使用Statement而不是PreparedState ... -
培析J2EE分层结构
2011-01-20 22:56 935http://hi.baidu.com/gabe2008/bl ...
相关推荐
J2EE的核心模式是指在实际开发中常用的最佳实践和设计模式,这些模式可以帮助开发者遵循一套标准的方法来解决常见的企业级问题。 1. **分层架构模式** J2EE应用通常采用分层架构,包括表现层、业务逻辑层和数据...
三层架构是一种常见的软件系统设计模式,主要应用于企业级应用开发中,特别是在ASP.NET等Web应用程序中非常流行。它将应用程序分为三个逻辑层:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和...
其次,笔试题部分通常会考察你的基础理论知识,比如J2EE架构、MVC设计模式、Java语法、多线程处理、异常处理、数据库连接池等。理解J2EE的分层架构(如表现层、业务逻辑层、数据访问层)是必备的基础,同时熟悉...
综上所述,本文提出了一种基于J2EE的四层体系结构方案,旨在通过合理的分层设计提高系统的可扩展性和可维护性。此外,还特别强调了在构建此类系统时需要考虑的安全性问题,并提出了具体的解决方案。这对于未来类似...
- **缺乏层次分离**:在多层架构中,如果各层之间的职责不明确,则会导致耦合度过高,影响系统的可维护性和可扩展性。 - **忽视缓存机制**:合理利用缓存可以显著提升应用性能,但在J2EE中常常因为忽略缓存策略而...
第二个项目是网上超市,采用了四层架构设计模式,增加了DAO层,这样的分层设计有助于业务逻辑和数据访问逻辑的分离,是企业级应用开发中常用的设计方法。该项目涉及用户管理和商品管理两大模块,展现了对电子商务...
总的来说,"j2ee人事管理系统"项目是一个全面的实战案例,涵盖了J2EE开发中的多个关键知识点,包括数据库设计、SpringMVC框架的应用、依赖注入以及源码分析。通过对这个项目的深入研究,开发者可以提升自己的技术...
J2EE的核心在于它的分层架构,主要包括以下层次: 1. 客户端层(Client Layer):这是用户与应用交互的部分,可以是传统的Web浏览器,也可以是富客户端应用如Java Applet或Swing应用。 2. Web层(Web Layer):这...
- **设计Java/J2EE应用**:遵循SOLID原则,采用分层架构,确保系统的可扩展性和维护性。 - **性能优化**:通过缓存策略、数据库索引优化等方式提高响应速度。 - **线程安全检查**:确保共享资源的访问是同步的,避免...
1. **J2EE架构**:了解MVC(Model-View-Controller)模式在J2EE中的应用,以及如何组织和分层应用程序。 2. **Servlet和JSP**:学习如何使用Servlet处理HTTP请求,以及如何在JSP中编写动态内容。 3. **数据库操作**...
本讲义将涵盖J2EE的核心组件、架构模式以及实际开发中的最佳实践。 **J2EE核心组件** 1. **Servlet与JSP**:Servlet是Java编程语言中处理HTTP请求的服务器端组件,而JSP(JavaServer Pages)则是一种用于创建动态...
7. **Spring框架**:Spring是Java EE开发中的另一个重要工具,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)架构模式以及许多其他企业级功能。Spring Boot简化了Spring应用的初始化和配置。 8. ...
3. **架构设计**:教授如何进行有效的软件架构设计,包括设计模式、架构模式以及架构设计的过程和评估方法。 4. **案例实践**:通过具体的项目案例,加深对Java架构的理解,并学会如何在实际工作中应用所学知识。 5....
2. 设计:基于J2EE架构设计系统结构,包括组件间接口和通信方式。 3. 编码:使用Java编写各层组件,如Servlet、JSP和EJB。 4. 测试:进行单元测试、集成测试和系统测试,确保代码质量。 5. 部署:将应用打包成WAR或...
6. **架构设计与模式**:掌握面向对象设计原则和设计模式,如MVC(Model-View-Controller)、工厂模式、单例模式等。理解架构设计的核心原则,如分层架构、微服务架构等。 7. **技术选型**:在项目初期,需要根据...
在J2EE项目中,定期进行代码审查,消除代码冗余,优化设计模式,可以预防“技术债务”的积累,确保软件架构的长期稳定。重构应伴随着自动化测试,以确保改动不会引入新的错误。 #### 4. 异常处理与日志记录 强大的...
1. 分层架构:J2EE应用通常采用分层架构,包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。各层之间的松耦合使得系统更易于维护和扩展。 2. 模块化设计...
为了更好地组织和管理代码,J2EE开发中常常采用以下几种设计模式: - **MVC (Model-View-Controller)**:分离表示层、业务逻辑层和服务层,使得各个部分职责清晰、相互独立。 - **DAO (Data Access Object)**:...