`
Sayler
  • 浏览: 13729 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA WEB 系统设计开发知识体系

阅读更多
1.1 Browser
1.1.1 HTML
1.1.2 CSS
1.1.3 JavaScript
1.1.4 AJAX

1) DWR
2) Jquery
1.2 Presentation Layer
1.2.1 Servlet/Filter/Listener/JSP
1.2.2 Struts
1.2.3 JSF

1.3 Business Logic layer
1.3.1 BO/Service/DomainObject
1.3.2 Spring

1.3.2.1 为什么需要Spring?


为什么要用spring,我们可以几个非常常用的方面来分析一下.
        Spring是基于j2ee框架. 他站在非常实用的角度帮助程序员解决了很多不需要程序员搞和程序员一直重复搞的问题. 下面我只讲能节省我们工作的地方以使得大家对spring有足够的兴趣.

        1, 松耦合问题.
        这个问题我不费太多笔墨. 因为太多的文章解释这个问题. 大名叫:依赖注入. 说白了就是根据配置文件动态组装复杂对象. 或许有人又问, 我就是用程序组合也很简单啊. 是的, 你程序组装简单业务的是很简单. 如果组装的对象里面包含了Ejb, 包含了JMS, 包含了远程RMI那就没有这样组装简单了. 就说到这里.不说那么多废话.

        2, AOP, 面向切面编程. 这个功能我们自己是不好设计的. 这个功能大家也都知道是干什么的, 例如方法的事务管理, 用户安全验证, 日志记录, 等等. 为了避免将更多的代码放进方法中去.spring使用这个AOP来监控符合你配置的正则表达式的方法名字. 并允许在执行这个方法的前后执行你的方法. 这个是建立在spring上下文框架下的一个功能. 原理是映射机制. 如果没有上下文是不好搞的.
        虽然spring AOP对于大多程序员就足够了. 但与AspectJ相比, 他只能是功能比较弱的解决方案. AspectJ提供了SpringAOP不可能实现的多种切点类型. 如果不够用,你可以引入AspectJ. 来帮助你做更多的工作.

        上面两个是大的方面的一个简单的说明. Spring在更多细节中方便了大家的工作. 下面我继续依次给以说明.

        3, Bean工厂节省了.
        你不用再自己构造工厂了. 不用再用自己构造单例模式了. 不用自己再关心对象的创建了. 不用new对象了. 一切都直接从 上下文的框架中取就行了. 框架会帮助你构造你需要的对象. 你只需要跟上下文打交道就可以了. 当然,你多出了装配的工作. 但这是必须要付出的代价. 因为复杂性被集成在了配置里面. 使得你在开发层面只关心业务. 要是配置有可视化的工具就太好了. 但别着急, 找找, 现在只有想不到,没有找不到.

        4, 集成Hibernate使用节省了事务的显式代码.
        这个其实还是切面的一个好处应用. 配置进去是很简单. 既然能节省工作, 我就给你说一下.

        5, Spring 针对不同的数据库访问模式提供了不同的模板. 分别适用于不同的持久机制.
        包括: 针对JCA CCI的链接, 针对JDBC的, 支持命名参数的JDBC的链接, Hebernate的,针对iBATIS sqlMap的, Oraclede TopLink的. 这些模板使用方式的统一降低了程序员使用不同数据库的成本.模板的使用让你只关心数据的准备, 而看不到那些样板代码, 其实那些样板代码都还在, 只是被巧妙的隐含到了template中了.
        例如: List list = jdbcTemplate.query(“select * from table1”,new Object[]{“a”,”b”},new RowMapper(){…..}); 意思表达到了.
        其中对数据源的引用可以配置使用JNDI以从应用服务器中获取数据库的连接. 这样程序就可以集中处理业务逻辑而不必关心数据库的具体情况 .
        如果不能从JNDI中取得, 那就必须在spring中配置一个连接池. 可以使用开源的DBCP. 这个支持多种数据库连接.


        6, 数据库层面的缓存的使用.
        Spring并不提供实际的缓存解决方案, 而是要以来第三方的缓存方案. 包括: EHcache,Gigaspaces, JBoss Bache, JCS, OSCache, Coherence .无论采用哪种缓存方案, 对于spring的配置都是一样的. 但缓存的配置文件都是要分开的. 简化了使用缓存的成本.


        7. 安全验证方面节省的工作.
        基于多种方式的用户验证. 都节省了很多工作.

        8, 访问 RMI , 访问 Http Invoker, 访问Web Service
        如果要穿越防火墙最后是后两种. 但httpInvoder局限于spring的对象. webService 可以多种.平台. 不管使用哪种, spring都为他们的配置提供了统一简单的配置. 使用起来非常方便. Xfire协助你访问webService简单易用.

        9, JMS的访问. 大量冗余的代码被节省了. 配置好了即可使用. 当然你需要使用activeMQ第三方的队列服务器来接受消息.

        10 , 访问EJB.. JNDI都非常简单了. 所有额外的工作,你配置好之后, spring都帮你做了. 你要做的就是: 使用


为什么不选择EJB呢?

打个比方吧,spring就像银行为我们提供很多的服务,以前有个叫ejb的银行,但是服务态度不好,学院派的风格,程序员快疯了。Johnson这位程序员很愤怒,新开了这家spring银行,非常的友善,于是很快地流行起来。感觉中型项目比较适合,几百块钱就不必麻烦去找银行了。大型项目 估计还要找Ejb这家大型银行。

1.3.2.2 Spring 简介和使用范围

Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。它是一个基于IoC和AOP(Aspect Oriented Programming 面向方面编程)的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等。 从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

  ◆目的:解决企业应用开发的复杂性

  ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

  ◆范围:任何Java应用

  简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

  ◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

  ◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

  ◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

  ◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

  ◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

  所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。



  让我们明确Spring范围。尽管Spring覆盖了许多方面,但我们已经有清楚的概念,它什么应该涉及和什么不应该涉及。

  Spring的主要目的是使J2EE易用和促进好编程习惯。

  Spring不重新开发已有的东西。因此,在Spring中你将发现没有日志记录的包,没有连接池,没有分布事务调度。这些均有开源项目提供(例如CommonsLogging用来做所有的日志输出,或CommonsDBCP用来作数据连接池),或由你的应用程序服务器提供。因为同样的的原因,我们没有提供O/Rmapping层,对此,已有有好的解决办法如Hibernate和JDO。

  Spring的目标是使已存在的技术更加易用。例如,尽管我们没有底层事务协调处理,但我们提供了一个抽象层覆盖了JTA或任何其他的事务策略。

  Spring没有直接和其他的开源项目竞争,除非我们感到我们能提供新的一些东西。例如,象许多开发人员,我们从来没有为Struts高兴过,并且感到在MVCwebframework中还有改进的余地。在某些领域,例如轻量级的IoC容器和AOP框架,Spring有直接的竞争,但是在这些领域还没有已经较为流行的解决方案。(Spring在这些区域是开路先锋。)

1.3.2.3 Spring 带来的好处


  ◆方便解耦,简化开发

  通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  ◆AOP编程的支持

  通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP(Object Oriented Programming  面向对象的程序设计)实现的功能可以通过AOP轻松应付。

  ◆声明式事务的支持

  在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

  ◆方便程序的测试

  可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。

  ◆方便集成各种优秀框架

  Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。

  ◆降低JavaEEAPI的使用难度

  Spring对很多难用的JavaEEAPI(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些JavaEEAPI的使用难度大为降低。

  ◆Java源码是经典学习范例

  Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。


下面的一些描述,可能跟上边有重叠, 列在这里做为参考:


  ◆Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题,。

  ◆Spring能消除在许多工程上对Singleton的过多使用。(Singleton的过多使用,会减少系统的可测试性和面向对象特性。)  

  ◆Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

  ◆使用Spring构建的应用程序易于单元测试。

  ◆Spring使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或localEJBs来实现业务接口,却不会影响调用代码。

  ◆Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适于许多web应用。例如,Spring能使用AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。

  ■Spring为数据存取提供了一致的框架,不论是使用JDBC或O/Rmapping产品(如Hibernate)。

  Spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。


1.3.2.4 Spring 的一些细节问题?
1) 事务控制的粒度/范围问题:详细信息有待补充(暂时可参考:Spring事务管理.doc )
2) … …


1.3.2.5 Spring + Struts + Hibernate 的Sample Project


1.3.3 EJB


1.4 Data Layer
1.4.1 标准 SQL 语言
1.4.2 Hibernate
Hibernate 的设计思想
Hibernate 为我们解决了那些问题?
1.4.3 Oracle
1.4.4 Mysql
1.4.5 H2

1.5 其他


1.5.1 Cache的应用与设计
1.5.1.1 设计原理/原则
1.5.1.2 JCS cache
1.5.1.3 EH cache
1.5.1.4 Jboss cache
1.5.2 SOA
1.5.3 WebService
1.5.4 集群
1.5.5 负载均衡
1.5.6 SAP

java内存溢出调试工具JProfiler
http://www.51testing.com/html/31/472.html

计划工具: PSP

测试方面
工具 test direct ,ttp
插件: findbugs, checkstyle , PMD,见附件
分享到:
评论
1 楼 JavaLanguageFun 2009-12-05  
强大!收藏一个

相关推荐

    JSP+Web开发实录

    JSP(Java Server Pages)是基于Java Servlet以及整个Java体系的Web开发技术。JSP技术可以让Web后台开发人员和前台设计人员快速地开发出容易维护的动态网站。 本书将全面介绍JSP的基础知识以及应用技术。主要内容包括...

    基于javaweb在线考试系统的设计与实现(含word文档毕业设计)

    第3章 系统设计 5 3.1 系统总体设计 5 3.1.1系统的架构设计 5 3.1.2 系统工作流程设计 6 3.2 系统数据库设计 7 3.2.1 数据库设计原则 7 3.2.2 数据库概念结构设计 7 3.2.3 数据库逻辑结构设计 9 3.3系统功能设计 14 ...

    JAVA面试题及知识点整理

    Java、大数据各种组件面试题及知识点总结。设计Web开发到大数据架构,含34个大技术点。 JVM,JAVA基础,Java集合,...此文档看完对整个知识体系有一定的提升和系统性的了解,每个组件的讲解都是和实际开发出发的总结

    毕设&课设&项目&实训-开发知识体系,主要是全栈开发知识体系。 目的:每一个开发人员都应.zip

    包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...

    基于JavaEE的通用商城系统设计毕业论文设计.pdf

    摘要:Java EE体系结构是目前建立电子商务及其它基于 Web的企业应用程序的 首选技术之一。本文对基于 Java EE的通用商城系统进行了研究与设计,对基础 知识、需求分析、业务范围、系统需求、概要设计方案进行了详细...

    java自考重点知识讲解.zip

    产品市场,SUN 公司专门成立了一个项目开发小组,目标是设计嵌在消费性电子产品的小型分布式系统软件,能够适用 于异构网络、多主机体系结构,能实现信息安全传递。项目小组的最初设想是用 C++语言完成这个目标。...

    XXXX知识服务系统主要通过对实体类、关系类,方便用户全面了解XXXX知识体系。.zip

    软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    基于Java的疫情信息登记数据库系统的设计与实现【附源码】

    通过对国内疫情信息系统设计和开发了解以及查阅研究相关的文献和期刊,对系统研究所涉及到的相关内容和技术进行深入了解,在汲取前人的经验和优势的基础上,总结已有系统的功能特点以及技术手法并设计出符合实际需要...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    Java体系架构知识点整理,包括Java基础、Spring、MySQL、算法题等.zip

    它的设计目标是“一次编写,到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)...

    java开源包11

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    java开源包6

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    java开源包9

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    java开源包4

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    java开源包101

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    java开源包5

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    java开源包8

    Smart Cache 是一个采用 Java 开发的 HTTP/1.1代理服务器,也可以用来作为Web的缓存系统。 高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash ...

    基于Java面向对象程序设计课程报告.doc.doc

    .word教育资料基于Java语言的简易坦克大战游戏设计课程报告摘 要: 本课程设计使用Java语言开发了一个简单坦克大战小游戏,主要采用面向对象程序设计 思想来完成程序的需求分析,概念及逻辑设计,系统的详细实现等...

Global site tag (gtag.js) - Google Analytics