您的位置:首页 > 编程语言 > Java开发

Java学习笔记-----中间件,组件,容器,框架的精彩理解

2017-10-23 17:40 441 查看
在现在企业级应用中,我们的应用软件一般分为三层
三层分别是表示层,业务逻辑层,数据持久层
------------------------------
|表示层|业务逻辑层|数据持久层|
------------------------------
我们来说说三层中的代表软件
表示层
这一层一般在客户端pc机上,最常见的是IE浏览器,这就是表示层的软件
表示层是直接与使用者交互的软件
业务逻辑层
这一层一般在服务器端,顾名思义,所有业务逻辑处理都在这一层完成
最典型的是appserver,比如IBM的websphere,BEA的weblogic还有tomcat/jboss等
这一层也是三层中的重点,我们要说的大部分内容都是关于这一层的,这个等会再说
这一层就叫做中间层
数据持久层
这一层典型的就是数据库,一般也在服务器端
但该服务器一般与装业务逻辑层软件的服务器分开
当然你也可以用IO输入输出流往硬盘上写东西
但没人会建议你这么做,因为这样做你的数据缺乏管理,不管怎样
这一层要做的就是保存数据,业务逻辑层软件一般不负责保留数据
或者说业务逻辑层只负责暂时储存数据,一关机,业务逻辑层数据全部over了

那么数据的持久化(也就是储存数据)就必须要在这一层完成。

什么是中间件,中间件是业务逻辑层的应用软件
是处理业务数据与客户端之间业务逻辑的一种应用软件
一种提供网络服务的服务器端应用软件
举个非常简单的例子,网上银行,某个人想用IE进入工行的账户,然后转帐
在这个例子中,客户端表示层显然是IE,数据持久层显然是银行的核心数据库
那么中间件是什么?中间件就是提供这种服务的系统。
这三层的划分如下
------------------------------
|表示层 | 业务逻辑层 | 数据持久层 |
------------------------------
| IE | 网上银行 | 数据库 |
------------------------------

什么是组件,组件是什么?组件其实就是一个应用程序块
但是它们不是完整的应用程序,不能单独运行
就有如一辆汽车,车门是一个组件,车灯也是一个组件
但是光有车灯车门没有用,它们不能跑上公路
在java中这些组件就叫做javabean,有点像微软以前的com组件
要特别说明的是,由于任何一个java文件编译以后都是以类的形式存在
所以javabean肯定也是一个类,这是毫无疑问的
好,那么容器里装载的是什么呢?就是这些组件
而容器之外的程序需要和这些组件交互必须通过容器
举个例子,IE发送了一个请求给容器,容器通过调用其中的一个组件进行相关处理之后
将结果反馈给IE,这种与客户端软件交互的组件就叫做servlet
但是组件有很多种,那么如何区分这些组件呢?
有多种管理办法,比如同是同样是servlet,有些是通过jsp生成的
而有些是开发人员自己写的,那么通过jsp生成的servlet集中放在一个地方
而开发人员自己写的则需要在xml里面配置一些基本的参数
同时,不同组件有可能还需要继承一些特定的父类或者接口,这也是容器管理的需要
还有其他的一些组件,这里就不一一说明举例了
那么容器有很多种,按照他们装载的组件类型划分
比如有装ejb的ejb容器,有装servlet与jsp还有静态页面的web容器等等
//这种只含有web容器的应用服务器也被叫做web服务器
当表示层的应用软件通过网络向appserver发送一个请求的时候
appserver自动找到相应容器中的组件,执行组件中的程序块,把得到结果返还给客户
而我们要做的事就是写组件也就是javabean,然后放到appserver里面去就可以了
至于怎样与IE通讯,怎样截获网络上的请求,怎样控制对象的数量等等
这些繁琐而无味的工作我们都不管,都由appserver去做吧,把注意力集中在业务逻辑上
appserver与其他相关软件的关系如下图:
-------------------------------------------------------
| 表示层 | 业务逻辑层 | 数据持久层 |
-------------------------------------------------------
| | ----------------- | |
| IE | | javabean | | |
| -> ----------------- -> DB |
| client <- appserver <- |
| |-------------------------| |
| | 虚拟机 | |
|--------------|-------------------------|------------|
| Windows | Linux/Saloris |LinuxSaloris|
|--------------|-------------------------|------------|
图上可以看出:虚拟机负责处理中间件与操作系统之间的交互
appserver则负责组件的管理以及与其他两层的业务交互
要说明的是上图中还包含有应用程序客户端容器(Application client container)
管理应用程序客户端组件的运行,应用程序客户端和它的容器运行在客户机
这种情况比较复杂一般说的是两个server之间的通讯
比如jsp/servlet容器在一个服务器上,而ejb容器在另外一个服务器上等等
这是分布式操作系统大面积应用的基础,这个以后再说
嗯,那么话题再回到中间件上去,什么是中间件?
appserver就是所谓的中间件,但是中间件不仅有appserver,还有其他的东西
换句话说,appserver只是中间件的一种
而关于中间件有诸多规范以及遵循这些规范的模型
最流行的规范无非两种,一个是j2ee还有一个是.net
但是.net几乎只有微软在用,所以很多人把.net这个规范就当成是微软的中间件产品
也不为过,毕竟没几个公司喜欢跟着微软屁股后面跑的。

容器从某种意义上说其实就是一个可运行的java写的应用程序
犹如c++/c编译后生成的.exe文件
不同的是java编译后的文件需要用命令行或者脚本启动执行
由于容器是由java写的,所以容器都能够跨平台。

JDBC
和数据库的连接
这个严格说来是数据库产商需要关心的事
关于AppServer如何与数据库的连接
但是也需要开发人员做一点事,因为AppServer不知道什么时候组件需要用到数据库
同时也需要开发人员告诉AppServer他们使用的是什么数据库,ip地址等等
JDBC就是关于这一套东东的规范
包括数据库的产商应提供什么样的接口
AppServer应用服务器应该如何去连接
开发人员应该如何去配置这些连接等等
还有一些数据源,连接池等概念参考相关数据在此就不再赘述
其它的规范比如JMX等确切地说与开发人员关联并不大了
这类高级应用只对AppServer应用服务器产商重要。

Struts
表示层框架,名字来源于飞机的金属框架
可能有读者会提问了
表示层不是客户端么?
没错,但是语言这东西,众口烁金,别人都这么说你就不好不这么说了
最早表示层说的是客户端,后来随着时间的发展
人们也把服务器端直接与客户端//比如IE
打交道的那部分也称为表示层//JSP+Servlet
那么表示层框架是干什么的呢?
早先大规模应用JSP的时候,人们发现,JSP里面充斥着逻辑代码与数据
可读性极差,于是人们借用很早很早以前的MVC模式的思想
把表示层组件分为V-Viewer,也就是JSP
M-Model模型,一般来说是一个JavaBean
C-Controller控制器,一般来说是一个Servlet
所有人通过JSP和服务器打交道,发送请求,Viewer把这个请求转发给Controller
Controller通过调用一个Model来处理该请求,然后返回数据到Viewer
这么一个过程,从而达到数据与逻辑的剥离,增强代码可读性,降低维护成本
而帮助人们实现这一系列东西的就是Struts框架,就是这么一个东西
Struts的竞争对手主要是产商们极力倡导的JSF也就是Java Server Faces
但是由于Struts出道时间早,所以应用比较多
JSF则是产商们大力支持,前景看好
对于这一层来说,在JSP的html代码中出现的java语句越少越好
因为java代码越少说明页面处理的业务逻辑越少,也越合理
这也是Struts最初的目的,记住这话。

Spring 大名鼎鼎的Spring框架
有人曾说2005年一片叫春之声,指的就是该框架
Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一书
Rod Johnson认为,J2ee里面的那一套//尤其是ejb
太重了,对于单机的系统来说,没有必要使用那么复杂的东西
于是就开始设计并引导Spring小组开发出这样一个构架
不能不说他是个天才,因为的的确确不是所有的系统都是跨多服务器的
没有必要把一个简单的系统设计得那么复杂//天才的那几个共性又体现出来了
Spring从诞生之日起就是针对EJB的,力争在不少应用上取代EJB
而它也确实达到了这个目的
现在包括WebLogic等主流应用服务器还有主流IDE都开始逐渐接受该框架
并提供相应支持
提到Spring就不能不说控制反转Ioc//Inversion of Control
和依赖注射DI//Dependency Injection
什么叫控制反转呢?
套用好莱坞的一句名言就是:你呆着别动,到时我会找你。

Hibernate
名字取材自ORM最早的一句玩笑话//ORM就是OR-Mapping
说用了ORM之后,程序员就可以去冬眠了,而不需要操心那么多事
这里不得不说的是,该框架由于做得太好,以至于被J2ee招安,成为EJB3.0的一部分
替代原有EJB2.X里面关于Entity Bean而成为EJB ORM的工具
这里解释一下ORM//OR-Mapping
中文名对象关系映射
什么意思呢?我们知道传统的数据库都是关系型的
一条条记录以表格的形式储存,而表与表之间充斥着是关系/关联
比如说一个人,名字zhaoce,性别男,年龄23那么数据库中是这么储存的
姓名 性别 年龄 zhaoce m 23 某女 f 22
而实际应用服务器中的实体都是以对象的形式存在,一个个对象
zhaoce是以这种形式存在的
Human human=new Human();
human.setName("zhaoce")
human.setSex("m");
human.setAge(23);
这样的,那么我们知道,传统的JDBC是通过一个二维字符串将数据取出
需要我们自己将其包装成对象,在存入的时候,我们还需要将对象拆开
放入sql语句中//Insert into Huamn values('zhaoce','m',23)
然后执行该sql语句
太麻烦太麻烦,ORM理念的提出改变了这一切,ORM认为,这些东西应该由框架来做
而不是程序员,程序员做他该做的,不要为这种破事分心,还测试半天
于是就出现了Hibernate,JDO,TopLink等等,甚至.net里面也有ADO.net
过去一段时间是Hibernate和JDO争风,现在看来Hibernate逐渐成为主流并被官方接纳
成为规范标准之一,替代掉原来EJB2.X的ORM EntityBean
TopLink则是Oracle公司推出和Oracle数据库结合的一种ORM
商业用软件,贵且复杂,不过正在逐渐开放
而象表示层一样,这一种专门面对数据层的代码也被称为数据持久层
所以数据持久层这一概念有时不仅仅指代数据库
关于ORM,最高的境界应该是在java代码中不出现任何一句的sql语句
注意,是不包括sql语句,Hibernate的hql以及ejb的ejb-ql不算在内
至于出现不出现hql/ejb-ql等替代ql,这要视具体情况而定,不过最好也是不出现
当然最后所说的过分理想的情况往往不现实,总之一句话
以sql为代表的ql/*还有hql,ejbql等*/语句在代码中出现得越少越好
记住这话,现在未必能够理解,学了以后就懂了
这三个是目前最为常用的框架 而目前光已公布的框架就>500
还在不停增加中,不可能一一列举,有兴趣的可以去看相应文档 要指出的是框架不是应用程序
只是一堆组件的有序复合,应用时不能脱离于应用服务器单独存在。

SOA
面向服务的构架
不说太多,这个属于上上层建筑
不过不妨记住我的一句话,可以帮助理解这个概念
面向什么就是对什么做封装
面向对象就是对对象做封装
面向服务类似,剩下的靠悟性。
反射
1.4新增功能,非常强大
通过反射,程序可以解析出类本身的属性也就是变量
/注意这里说的属性不是.net里面的属性,我不喜欢微软造的新名词,乱
还有行为也就是方法,然后通过invoke()方法调用该方法
甚至可以新增对象等,java首创,本是其它语言所没有的
后来被微软抄了去,利用该功能,开源框架广泛受益并大量采用,近乎疯狂地使用。

书籍
《Thinking in Java》 //实话说,一般,尤其是翻译后的版本,原版还行
《Java教程》 //电子工业出版社出版的那本,上下册,很厚,但翻译得不错
《21天学通Java》 //入门极好,但是《21天学通j2ee》极烂,不要买
《Mastering EJB》 //翻译过的书质量我不清楚,估计不怎样,请看原版书籍
《精通Hibernate》 //看清楚作者,孙卫琴,其它人的别买
其它的可以不用了,网络上的远比书上来得多,来得好,虽然也来得杂。
最后的建议
一,不要做一个浮躁的人
二,学好英语,很重要
三,阅读源代码和文档
四,共享源代码,不要做一个功利的人
五,热爱Java。

文章出处:http://bbs.51cto.com/thread-1031231-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: