J2EE基础部分视频已经看完了,脑海中对这个J2EE有了一个比较模糊的轮廓,下面是我这几天看视频对J2EE的一些认识,由于根本谈不上理解,所以写这些不是为了给别人一个指导,而是把自己目前所认识的程度记下来,为了给以后深入的理解做一个参照,大家看完一笑而过就好,或者留下点痕迹那就更好了。
J2EE是一个平台,也可以称作一个技术架构,说白了就是一解决问题的方法。一个新事物出现是有它必然的理由的,而J2EE就是为解决日益复杂的需求而生的,它有很多好处,比如:可伸缩性、灵活性、易维护性,还有简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值等等等等,诸多的好处,但是没有亲身体会过,也就不知道它到底好在哪里,就好像对着没吃过酸梅的人说梅挺酸的,他当然是不会有反应的,但这个甜头相信迟早会尝到的。
有了J2EE这个平台后,就会出现关于这个平台的一系列规范、开发方式和现成的组件等。先从J2EE的宏观入手,好比看一个人先看整体一样,J2EE采用经典的MVC架构,也就是多层分布式应用模式,只要做过项目的人,都会明白这种架构的好处,而J2EE将这种模式继续发扬光大。架构图如下:
从图中可以看出浏览器和JSP充当的是视图,也就是View;Servlet是控制器(C层),EJB或Java类做模型。
模型,是业务数据(状态)和服务(行为)的表示,JDBC和EJB提供访问数据的机制;也就是说Model层是实现系统中的业务逻辑和数据处理,写到这里我有一个强烈的感觉,就是J2EE中的M是指三层中的Model、BLL、DAL的合体,因为从它的作用上来看,它确实充当了这么一个角色。但大家好像并不这么认为,这只能靠以后用敲代码做项目去理解了。
JDBC:相当于ODBC,是为了以统一方式访问不同数据库的API,这样就为程序员省下了很大的力气,不用去关心底层用的是哪家的数据库系统,只需调用JDBC的API就可以了。
EJB:这又是一个技术规范,并不是一个产品,它分为:Entity Bean,域模型对象,和数据库中表记录形成映射关系;SessionBean,用于实现业务逻辑,一般通过Entity Bean实现数据库访问。MessageDriven Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理,实际上是一个异步的无状态Session Bean,这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。
控制器,就好像媒婆一样,负责给M和V牵线搭桥。作为一个合格的媒婆就得认识很多单身的姑娘(以下比喻为View)和小伙子(以下比喻为Model),当姑娘(View)对媒婆提出心中喜欢小伙子(Model)的要求后,媒婆就得从认识的小伙子中挑选,找到最接近姑娘心思的那个,并且被选中的小伙子还要努力的改造自己,让自己完全符合目标,最后由媒婆引荐给姑娘。
从上图中可以看出,这个媒婆是由Servlet充当的,用专业术语来描述:Servlet是提供基于协议的请求/相应服务的Java类,用来处理各种Request和Response。
视图:包含JSP和HTML等,HTML主要是在浏览器中把Model传来的数据变成可视化的,而JSP为添加动态内容提供了多种机制,弥补了HTML的缺陷。
其实J2EE不止可以分为三层,可以分为四层甚至更多,如下图就是四层架构:
比较三层和四层这两种分法,三层更多是从逻辑出发,而四层考虑更多的是物理方面的需求,分法不同,道理其实是一样的。
知道了大体的架构,就该是组织方式了,sun公司就引入了一个叫JavaBean的东西,我把它叫 “咖啡豆”,它有点类似于微软平台上的com组件,功能上也和com组件差不多,可以重复利用、且独立于平台,如百度百科所举的例子:一个购物车程序,要实现购物车中添加一件商品这样的功能,就可以写一个购物车操作的JavaBean,建立一个public的AddItem成员方法,前台Jsp文件里面直接调用这个方法来实现。如果后来又考虑添加商品的时候需要判断库存是否有货物,没有货物不得购买,在这个时候我们就可以直接修改JavaBean的AddItem方法,加入处理语句来实现,这样就完全不用修改前台jsp程序了。
分布式部署最主要的就是组件之间的调用和通讯,这里用到了两个技术,一个是JDBC,是业务逻辑层调用后端数据库的统一API接口;另一个就是JNDI,是Web层访问业务逻辑层不同的命名和目录服务的统一API接口,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
有了以上这些,J2EE的大概轮廓就算是出来了。