搞定J2EE核心技术与企业应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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这一种选择。