`
mypengkun
  • 浏览: 13603 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

前言

  最近的这段时间一直在学习Java EE,刚刚完成了从0到1的蜕变,所以顺便整理一下我所了解到的Java EE,给刚入门学习的新人一些头绪,而所谓“启示录”,就是这个意思。

  一.Java EE是什么?

  Java EE(Java Enterprise Edition)是一种企业级应用的软件架构,同时是一种思想,一套规范。

  二.Java EE的发展史

  Java Enterprise Edition的发展不知不觉已经12年了,不知道大家有没留意,一开始,Java Enterprise Edition简称“J2EE”,直到版本5才改名为Java EE,而现在最新的版本则是Java EE 6。

Java EE启示录(图一)

  到这里,或许有人会问,为什么会有这么多套Java EE规范?这些版本的差别是什么?

  1.J2EE1.2的出现,主要是将之前各个单独的规范绑定到一起。

  2.J2EE1.3,则是继续完善J2EE体系结构。

  3.J2EE1.4,主要是加入了一个重要主题:Web Service

  4.而Java EE 5,主题则是“简化”,简化之前复杂的J2EE思想,改善开发体验。

  三.Java EE到底要解决什么问题?

  1.Java EE解决什么问题?

  从Java EE发展背景看,它与“分布式应用”以及“互联网应用”的关系密不可分,而这两者也正是Java EE要解决的问题!

  其实,分布式应用随着90年代互联网的兴起逐渐开始普及。在90年代中,各种分布式应用标准逐渐诞生,如:OMG的CORBA,MS的DCOM等,而Sun在推出Java的RMI(Remote Method Invocation)后,便以RMI作为通信基础构建了Java EE。我认为,Java EE最核心要解决的问题就是“分布式应用”。而在接下来的竞争中,Java EE也不负所托,逐渐取代了CORBA,DCOM的地位。

  2.分布式应用与RPC

  RPC(Remote Procedure Call),在聊到分布式应用时很多人会第一时间想到它。所谓RPC,就是远程调用一个服务,但效果和本地调用一样。在最初的时候,RPC很类似C语言的函数调用,但随着编程语言和技术的发展,特别是面向对象和面向组件技术的广泛应用,便出现了“远程对象/方法调用”。所谓“远程对象/方法调用”其实就是把调用远程对象和本地对象的区别隐藏起来,让调用者可以像使用本地对象那样调用远程对象。从本质上说,最初的RPC和后来的“远程对象/方法调用”稍有不同,在“远程对象/方法调用”中,被调的服务还需要考虑如:对象生命周期管理,事务处理……这些问题。但笼统地说,最初的RPC和“远程对象/方法调用”都称为:RPC,所以之前提到的如:DCOM,CORBA,JAVA的RMI,.NET的Remoting都称为RPC。而我认为,RPC的本质就是:应用协议 + 传输协议。而各种不同的RPC实现之间的区别亦在此。

  而所谓的“分布式应用”,实际上可以说是用RPC方式,把各个分布在不同机器的应用模块联合成一个系统。可以说RPC是“分布式应用”的基础,所以就有“以RMI作为通信基础构建了Java EE”这一说了:>

  四.Java EE体系结构

  这里,我打算从分析“企业级应用”入手,并藉此逐步建立整个Java EE体系。

  1.概述Java EE体系结构

  为了有印象,我们先来个最简单Java EE架构图看看:

Java EE启示录(图二)

  从上图看到,Java EE一般分为4层:

  (1)客户端

  (2)web层

  (3)业务逻辑层

  (4)企业信息层(EIS:Enterprise Information System)

  呵呵,不要以为Java EE只是描述服务端规范,实际上,它还是包含了一些客户端相关东东,比如:Applet...不过,Java EE的重点还是在服务端这方面,而本文重点也是介绍Java EE在服务端这方面的内容。

  2.“企业级应用”分析

  (1)分布式应用

  首先从总的来看,一个“企业级应用”代表着,这个系统肯定是“非常大型的”,这么大型的系统,这么多的应用,是不可能把应用都部署在一台机器上的,所以“分布式应用”这个需求便顺理成章地出现。理想的“企业级应用”中,各种功能模块应该分布在不同的机器上,在需要某功能的时候,我们可以动态地进行调用。

  (2)系统分层

  企业应用中,业务的功能会非常复杂。此时,模块间的解耦以及系统的分层开始显得重要,解耦与分层会使得系统结构清晰,并且健壮。而传统的分层模式是一般是:接入层,逻辑层,数据层。

  (3)异步

  设计分布式应用时,你遇到的第一个问题就是:等待…..在企业级应用中,业务的处理时复杂的。如果把子模块部署到不同机器后,要处理一个业务,很可能需要到多台机器上进行调用;另外,子模块的运算也需要一定的时间,此时,“等待”就出现了。由于你无法预计这个复杂的业务什么时候才能处理完,所以,“异步”这个概念也顺理成章地被引入。(其实,这也体现了软件设计中“快慢分离”的原则)

  (4)事务,安全

  关于事务的重要性这里就不多说了。

  而安全,一般指对某个模块的授权,身份验证等等,在企业级应用中,安全绝对是重要的一块。

  (5)Java EE平台与其他已有资源、服务、系统的整合

  在Java EE出来之前,很多公司很可能已经建立了比较完善的企业信息系统(EIS),显然,和这些已有的系统整合,在企业级应用中显得尤为重要。

  3.Java EE体系结构详述

  OK,现在让我们来逐步了解,Java EE每个部件的作用吧。

  (1)Servlet,JSP

  JSP,Servlet同属“web层”,并都属于“动态网页技术”。所谓“动态网页技术”和传统的“静态网页技术”不一样,传统的“静态网页技术”说白就是把做好的html文件直接上传到服务器并直接供客户浏览,而“动态网页技术”则是每次都根据用户请求,动态生成响应页面并返回。“动态网页技术”的好处不言自明,无论从灵活性,数据保密性…等方面说都是“静态网页”所无法媲美的。但“动态网页技术”也是有缺点的,就是相对较慢,现在的解决方案一般是:把“动态网页”中相对固定的部分做缓存,即所谓“静态页面”。(额.…..“静态网页”和“静态页面”本质上没什么区别,都是静态页面,但思想上却有很大区别。而现在的程序员一般会对“静态”这个词赋予一个新的含义:“缓存”)

  【1】Servlet

  Servlet实际上就是按照Servlet规范编写的一个java类,与传统的命令行启动的Java应用程序不同,Servlet位于Web服务器内部,并由Web服务器加载并调用。

  【2】JSP

  JSP全称是:JavaServer Page。这项技术的推出目的其实很简单,为了弥补Servlet一个很重要的缺陷:“麻烦”。

  先看看Servlet到底什么地方让人觉得麻烦,下面是一个Servlet处理Get请求例子:


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("处理GET请求ing......");
    response.setContentType("text/html;charset=GB2312");
    PrintWriter out = response.getWriter();
    out.println("<HTML>");  // 静态内容
    out.println("<BODY>");  // 静态内容
    out.println("Hyddd's Servlet Demo " + new Date().toString());  // 动态内容
    out.println("</BODY>"); // 静态内容 
    out.println("</HTML>"); // 静态内容
}

  从上面这个例子,相信大家已经发现问题了,Servlet主要是把动态内容混合到静态内容中以产生html,这导致Servlet代码中将会输出大量的html标识,哇,地狱,简直就是地狱,同时,这也非常不利于程序员和UI美工的配合(不要指望美工人员会和你一起写html标识)。为了解决这些问题,JSP诞生了。

  JSP是一种建立在Servlet规范之上的动态网页技术,通常做法是:在html页面中嵌入JSP标记和脚本代码。JSP把静态内容和动态内容的分离,实现了内容和表示的分离。

  【3】Servlet与JSP的关系

Java EE启示录(图三)

  上图描述得比较清楚了,JSP文件先是转换为Servlet类,然后编译,并启动Servlet实例响应客户端请求。为什么说JSP是建立在Servlet上的动态网页技术,从这里可以看出来。

  Web层主要就是JSP以及Sevlet这两项技术。

Java EE启示录(图四)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics