Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一

前端

Ajax技术是Web 2.0的重要技术之一,Ajax相关框架:最主流的jQuery、Ext JS 4.1、Prototype、DWR之外,还有Dojo、YUI等各种框架。

  • jQuery/Prototype:代表单纯的JavaScript库,主要用于简化JavaScript开发,尤其是jQuery基本上已经成为行业规范。
  • Ext JS:代表专业的JavaScript库+UI组件库的RIA框架。不仅可简化JavaScript开发,而且可以轻松地开发专业、强大的UI界面。
  • DWR:代表Java领域的RPC风格的Ajax框架。对于Java EE应用,DWR是十分明智的选择。

除了Ajax,客户端与服务器的通信还包括如下方式:

  • WebSocket通信技术:WebSocket会在服务器与浏览器之间建立基于TCP协议的Socket连接,该连接一旦建立,浏览器可以实时地向服务器发送数据,服务器也可随时向浏览器发送数据。由此可见,WebSocket可在浏览器和服务器之间进行双向的数据传输。重要的是,WebSocket已经成为HTML 5技术规范之一,被所有主流浏览器所支持。
  • Server-sent Events技术:这是一种简单的服务器推送技术,这种推送技术只允许服务器将数据推送给浏览器,浏览器无法向服务器发送数据,因此这种技术规范也被称为服务器推送技术。与WebSocket相比,服务器推送技术更简单一些,但功能也弱一些。一般来说,WebSocket适用于需要进行复杂双向数据通信的场景。对于简单的服务器数据推送场景,使用服务器推送事件就足够了。
  • COMET技术:COMET技术采用的是长轮询的实现。这种实现方式在每次请求时,服务器端会保持该连接在一段时间内处于打开状态,而不是在响应完成之后就立即关闭。这样做的好处是在连接处于打开状态的时间段内,服务器端产生的数据更新可以被及时地返回给浏览器。当上一个长连接关闭之后,浏览器会立即打开一个新的长连接来继续请求。不过COMET技术的实现在服务器端和浏览器端都需要第三方库的支持。COMET技术目前还没有称为Web规范。

Ajax技术的核心就是XMLHttpRequest对象,了解了XMLHttpRequest对象的运行周期,就了解了Ajax应用的运行机制。

  1. Ajax应用总是从创建XMLHttpRequest 对象开始,XMLHttpRequest 对象的作用如同其名字所暗示的,可以通过客户端脚本来发送HTTP 请求。Ajax应用的第一步总是创建一个
    XMLHttpRequest实例,然后使用它来发送请求,这种请求可以是GET方式的,也可以是POST方式的。
  2. XMLHttpRequest 对象发送完请求之后,服务器的响应何时到达?这需要借助于JavaScript的事件机制。还是回到XMLHttpRequest对象上来,它是一个普通的JavaScript对象,也可以触发事件。当它成功获得服务器响应后,该对象上注册的load事件处理函数被触发。
  3. 通过 JavaScript 的事件机制,使用事件处理函数可以获得服务器响应的数据。当XMLHttpRequest对象的status属性为200时,表明服务器响应是正确的;否则表明服务器响应出现错误。
  4. 进入事件处理函数后,事件处理函数必须借助于XMLHttpRequest对象来获取服务器响应,调用responseText属性、responseXML属性或response属性即可获取服务器的响应。至此,XMLHttpRequest对象的运行周期结束。
  5. JavaScript通过DOM操作将服务器响应动态地加载到HTML页面中。

Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一_第1张图片
系统的控制器使用Servlet充当,Servlet负责拦截用户请求,然后调用ChatService对象处理用户请求,根据处理结果,将请求forward到合适的页面显示。
Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一_第2张图片
Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一_第3张图片
这里关于Servlet的内容可以参见:Java学习笔记一Servlet及其后续博客。

后端 Struts 2+Spring+Hibernate

Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一_第4张图片
Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一_第5张图片
Java读书笔记:疯狂Ajax讲义+疯狂前端讲义+轻量级Java EE企业应用实战 一_第6张图片
前端组件: 主要负责收集用户输入数据,或者向客户显示系统状态。传统的Java EE 架构可能采用简单的JSP 、FreeMarker 等表现层技术作为前端组件。今天的前端组件往往会采用更丰富的前端开发技术,比如jQuery、AngularJS ,它们甚至抛弃了传统的JSP 、FreeMarker , 直接使用JSON 作为数据交换格式,使用HTMLs+css 作为表现层技术
控制器组件:对于Java EE 的MVC 框架而言,框架提供一个前端核心控制器,而核心控制器负责拦截用户请求,并将请求转发给用户实现的控制器组件。而这些用户实现的控制器则负责处理调用业务逻辑方法,处理用户请求。
业务逻辑组件: 是系统的核心组件,实现系统的业务逻辑。通常, 一个业务逻辑方法对应一次用户操作。一个业务逻辑方法应该是一个整体,因此要求对业务逻辑方法增加事务性。业务逻辑方法仅仅负责实现业务逻辑,不应该进行数据库访问。因此,业务逻辑组件中不应该出现原始的Hibernate 、JDBC 等API 。
DAO 组件: Data Access Object,也被称为数据访问对象。这个类型的对象比较缺乏变化,每个DAO 组件都提供Domain Object 对象基本的创建、查询、更新和删除等操作,这些操作对应于数据表的CRUD (创建、查询、更新和删除)等原子操作。当然,如果采用不同的持久层访问技术, DAO 组件的实现会完全不同。为了业务逻辑组件的实现与DAO 组件的实现分离,程序应该为每个DAO 组件都提供接口,业务逻辑组件面向DAO 接口编程,这样才能提供更好的解耦。
领域对象组件: 领域对象( Domain Object )抽象了系统的对象模型。通常而言,这些领域对象的状态都必须保存在数据库里。因此,每个领域对象通常对应一个或多个数据表,领域对象通常需要提供对数据记录访问方式。

轻量级Java EE 应用相关技术

轻量级Java EE 应用以传统的JSP 作为表现层技术,以一系列开源框架作为MVC 层、中间层、持久层解决方案,并将这些开源框架有机地组合在一起,使得Java EE 应用具有高度的可扩展性、可维护性。

JSP 、Servlet 3.x 和Java Bean 及替代技术

JSP 是最早的Java EE 规范之一, 也是最经典的Java EE 技术之一,直到今天, JSP 依然广泛地应用于各种Java EE 应用中,充当Java EE 应用的表现层角色。Servlet 和JSP 其实是完全统一的, 二者在底层的运行原理是完全一样的,实际上, JSP 必须被Web服务器编译成Servlet , 真正在Web 服务器内运行的是Servlet 。从这个意义上来看, JSP 相当于一个“草稿”文件, Web 服务器根据该“草稿” 文件来生成Serviet , 真正提供HTTP 服务的是Servlet,因此广义的Servlet 包含了JSP 和Servlet 。
就目前的Java EE 应用来看,纯粹的Servlet 己经很少使用了,毕竟Servlet 的开发成本太高,而且使用Servlet 充当表现层将导致表现层页面难以维护,不利于美工人员参与Serviet 开发,所以在实际开发中大都使用JSP 充当表现层技术。Servlet 3.x 规范的出现,再次为Java Web 开发带来了巨大的便捷, Servl et 3.x 提供了异步请求、注解、增强的Servlet API、非阻塞IO ,这些功能都很好地简化了Java Web 开发。
由于JSP 只负责简单的显示逻辑,所以JSP 无法直接访问应用的底层状态, Java EE 应用会选择使用JavaBean 来传输数据,在严格的Java EE 应用中,中间层的组件会将应用底层的状态信息封装成JavaBean 集, 这些JavaBean 也被称为DTO (Data Transfer Object , 数据传输对象),并将这些DTO 集传到JSP 页面,从而让JSP 可以显示应用的底层状态。
在目前阶段, Java EE 应用除了可以使用JSP 作为表现层技术之外,还可以使用FreeMarker 或Velocity 充当表现层技术,这些表现层技术更加纯粹,使用更加简捷, 完全可作为JSP 的替代。
关于这部分的知识参见JavaWeb基础学习笔记:Java学习笔记一Servlet

Struts 2+Spring+Hibernate

Struts 是全世界最早的MVC 框架,其作者是JSP 规范的制定者,并参与了Tomcat 开发,所以Struts从诞生的第一天起,就备受Java EE 应用开发者的青睐。多年来, Struts确实是Java EE 应用中使用最广泛的MVC 框架,拥有广泛的市场支持。Struts 框架学习简单,而且是全世界应用最方便的MVC 框架,所以互联网上充斥着大量Struts的学习资料,这使得普通学习者可以非常容易地掌握Struts 的用法。从另一方面来看, Struts 框架毕竟太老了,无数设计上的硬伤使得该框架难以胜任更复杂的需求,于是古老的Struts 结合了另一个优秀的MVC 框架: WebWork,分娩出了全新的Struts 2, Struts 2 拥有众多优秀的设计,而且吸收了传统Struts 和WebWork 两者的精华,迅速成为MVC 框架中新的王者。
虽然Struts 2.5 如此优秀,但在MVC 框架领域还有另外两个替代者: SpringMVC 和JSF 。Spring MVC 是Spring 团队所提供的开源MVC 框架,而且Spring MVC 在很多方法的设计上也非常优秀,因此SpringMVC 也拥有非常高的市场占有率。JSF 是Oracle 所推荐的Java EE 规范,拥有最纯正的血统,而且Apache 也为JSF 提供了MyFaces实现,这使得JSF 具有很大的吸引力。

传统的Java 应用都是采用JDBC 来访问数据库的,但传统的JDBC 采用的是一种基于SQL 的操作方式,这种操作方式与Java 语言的面向对象特征不太一致,所以Java EE 应用需要一种技术,通过这种技术能让Java 以面向对象的方式操作关系数据库。
这种特殊的技术就是ORM ( Object Relation Mapping ),最早的ORM 是Entity EJB (Enterprise JavaBean), EJB 就是经典Java EE 应用的核心,从EJB 1 0 到EJB 2.X ,许多人觉得EJB 非常烦琐,所以导致EJB 备受垢病。
在这种背景下, Hibernate 框架应运而生, Hibernate 框架是一种开源的、轻量级的ORM 框架,它允许将普通的、传统的Java 对象POJO 映射成持久化类,允许应用程序以面向对象的方式来操作POJO,而Hibernate 框架则负责将这种操作转换成底层的SQL 操作。再后来, Sun 公司果断地抛弃了EJB 2.X 规范,引入了IPA 规范。IPA 规范其实是一种ORM 规范,因此它的底层可以使用Hibernate 、TopLink 等任意一种ORM 框架作为实现。很明显,如果应用程序面向IPA 编程,将可以让应用程序既可利用Hibernate 的持久层技术一一因为可以用Hibernate 作为实现:也可以让应用程序保持较好的可扩展性一-因为可以在各种ORM 技术之间自由切换。
除了可以使用Hibernate 这种ORM 框架之外,轻量级Java EE 应用通常还可选择MyBatis框架作为持久层框架, MyBatis 是Apache 组织提供的另一个轻量级持久层框架, MyBatis 允许将SQL 语句查询结果映射成对象,因此常常也将MyBatis 称为SQLMapping 工具。

如果你有5 年以上的Java EE 开发经验,并主持过一些大型项目的设计,你会发现Spring 框架似曾相识, Spring 甚至没有太多的新东西,它只是抽象了大量Java EE 应用中的常用代码,将它们抽象成一个框架,通过使用Spring 可以大幅度地提高开发效率,并可以保证整个应用具有良好的设计。Spring 框架里充满了各种设计模式的应用,如单例模式、工厂模式、抽象工厂模式、命令模式、职责链模式、代理模式等, Spring 框架的用法、源码则更是一道丰盛的Java 大餐。

Spring 框架号称Java EE 应用的一站式解决方案, Spring 本身提供了一个设计优良的MVC 框架:Spring MVC ,使用Spring 框架则可直接使用该MVC 框架。但实际上, Spring 并未提供完整的持久层框架这可以理解成一种“空”,但这种“空”正是Spring 框架的魅力所在Spring 能与大部分持久层框架无缝整合: Hibernate? IPA? My Batis? TopLink ?更甚至直接使用JDBC ?随便你喜欢,无论选择哪种持久层框架, Spring 都会为你提供无缝的整合以及极好的简化。
从这个意义上来看, Spring 更像一种中间层容器, Spring 向上可以与MVC 框架无缝整合,向下可以与各种持久层框架无缝整合,的确具有强大的生命力。由于Spring 框架的特殊地位,所以轻量级JavaEE 应用通常都不会拒绝使用Spri吨。实际上,轻量级Java EE 这个概念也是由Spring 框架衍生出来的,Spring 框架暂时没有较好的替代框架。

目前比较火的框架Spring Boot、MyBatis以及Spring Cloud后续博客会继续讲解。

前端学习之Bootstrap入门 网格系统

你可能感兴趣的:(Java,网络前端)