
1.5 Java Web开发所需要的技术
前面对JavaEE和MVC进行了讲解,从讲解中可以知道,要开发Java Web需要遵循上面的标准和规范,当然读者可以自己实现上述规范,从而进行Java Web开发。但幸运的是,目前市场上有不少的开源框架已经实现了上述规范,比如Struts、Spring、Hibernate等,这些开源框架大大地减轻了开发人员的工作量。
1.5.1 Ajax
Ajax并不是一个新技术,它其实是整合了XMLHttpRequest、JavaScript、DOM、CSS、XML等众多技术。
Google的Sugges(t搜索建议)、Map、Gmail等都实现了Ajax技术。它采用XMLHttpRequest对象进行数据的异步交互,使用JavaScript增强用户体验,使用DOM组织内容,使用CSS显示外观,使用XML封装数据。在创建一个XMLHttpRequest对象时,一般采用如下写法:
var xmlhttp; if (window.XMLHttpRequest) { //其他浏览器 xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { //IE浏览器 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); } }
采用Ajax还需要用到JavaScript、DOM、CSS、XML等技术,在后面的章节中笔者将详细介绍上述技术。
随着Ajax的逐渐流行,开发人员发现,Ajax的代码非常零乱,难于维护。为了解决这个问题,很多的Ajax框架便应运而生了,比如Ext、Prototype、DOJO、DWR、GWT、Buffalo等。
这里以Ext为例进行简单介绍。Ext最初来源于Yui-Ext,后来Ext又独立于Yui发展,它积累了众多的组件,有表格、表单、动态树、菜单、工具条、对话框等,以方便开发人员的使用。Ext的官方网址为http://www.sencha.com/,首页如图1.14所示。

图1.14 Ext的首页
Ext一经推出,就以其优美的界面迅速流行起来,开发人员只需要很少的JavaScript代码,就能实现一个漂亮的界面和复杂的功能,比如实现一个带Tab的对话框,如图1.15所示。

图1.15 Ext实现带Tab对话框的示例
上述复杂的对话框示例所需要的JavaScript代码如下:
Ext.onReady(function(){ //定义变量tabs var tabs = Ext.createWidget('tabpanel', { renderTo: 'tabs1', width: 450, activeTab: 0, defaults :{ bodyPadding: 10 }, items: [{ contentEl:'script', title: 'Short Text', closable: true },{ contentEl:'markup', title: 'Long Text' }] }); //定义变量tabs2 var tabs2 = Ext.createWidget('tabpanel', { renderTo: document.body, activeTab: 0, width: 600, height: 250, plain: true, defaults :{ autoScroll: true, bodyPadding: 10 }, items: [{ title: 'Normal Tab', html: "My content was added during construction." },{ title: 'Ajax Tab 1', loader: { url: 'ajax1.htm', contentType: 'html', loadMask: true }, listeners: { activate: function(tab) { tab.loader.load(); } } },{ title: 'Ajax Tab 2', loader: { url: 'ajax2.htm', contentType: 'html', autoLoad: true, params: 'foo=123&bar=abc' } },{ title: 'Event Tab', listeners: { activate: function(tab){ alert(tab.title + ' was activated.'); } }, html: "I am tab 4's content. I also have an event listener attached." },{ title: 'Disabled Tab', disabled: true, html: "Can't see me cause I'm disabled" } ] }); });
通过上面的示例,读者可以看出,要实现一个带Tab的对话框,只需要不多的JavaScript代码即可实现,这在没有Ext之前,是很难想象的。Ext提供了与后台进行交互的功能,但与Ext本身联系比较紧密,不方便单独使用它的Ajax功能。
1.5.2 MVC框架
目前实现MVC的框架非常多,比如大家都熟悉的Struts、Spring和WebWork等。通过前面对Mode l的介绍可以知道,Model 2会导致多个Controller的出现,并且对页面导航的处理比较复杂,所以Craig R. McClanahan于2000年5月提交了一个框架给Java Community,这就是后来的Struts。2001年7月,Struts 1.0正式发布。截至到目前,Struts 2.2.3已经正式发布了。
Struts 2概览图如图1.16所示。

图1.16 Struts 2概览图
在2002年,Rod Johnson编写了一本书《Expert One-on-One J2EE设计与开发》,在这本书中,他描绘了Spring的雏形。最终,他因为不能忍受EJB实现的繁杂,从而决定开发一个框架,这就是Spring。Spring由6部分组成,分别实现了开发Java应用程序的不同内容。得益于Spring框架设计的灵活性,使得它能与众多开源框架相结合。
Spring 3框架图如图1.17所示。

图1.17 Spring 3 框架图
可以看到,Spring 3的整个框架的核心建立在Core的基础之上,包括DAO、ORM、JEE、Web和AOP,由此也可以看出Spring 3的强大。
1.5.3 持久层技术
随着EJB 3的发布,也有越来越多的人直接使用JPA。Hibernate 3也提供了对JPA的支持,因此,在当前的Java持久层框架中,Hibernate 3仍然是一个比较好的选择。Hibernate在2001年发布了它的第一个正式版本;2003年6月,Hibernate 2发布;2003年年末,Hibernate被JBoss吸纳;2005年3月,Hibernate 3正式发布。
为什么要使用ORM(Object/Relational Mapping)呢?这是因为开发人员使用的技术是面向对象技术,而使用的数据库却是关系型数据库,一个完整的类很难以对象的方式存储在一个关系型数据库中,它更适合存储在对象型数据库中。但目前关系型数据库仍然占主流位置,所以要使用ORM在对象型和关系型之间建立关系,从而可以使开发人员完全用面向对象的思想去设计业务逻辑,而数据的存储仍然使用关系型数据库。
Hibernate对Java和.NET的支持体系图如图1.18所示。

图1.18 Hibernate对Java和.NET的支持体系图
可以看到,因为JDK 5.0推出的Annotations,Hibernate也开始支持Annotations,从而推出了Hibernate Annotations,使得Hibernate 3的配置文件不再只有XML这一种选择。