1.1
J2EE
应用模型
J2EE
提供了一个企业级的计算模型和运行环境用于开发和部署多层分布式结构的应用模型。该模型具有重用组件的能力、基于扩展标记语言
(XML)
的数据交换、统一的安全模式和灵活的事务控制。它通过提供企业计算环境所必需的各种服务,使得部署在
J2EE
平台上的多层应用,可以实现高可用性、安全性、可扩展性和可靠性。
1.1.1 J2EE框架
目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java2平台企业版(Java 2 Platform EnterpriseEdition,J2EE)。
J2EE
是一种利用
Java 2
平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。
J2EE
技术的基础就是核心
Java
平台或
Java2
平台的标准版,
J2EE
不仅巩固了标准版中的许多优点,例如
"
编写一次、随处运行
"
的特性、方便存取数据库的
JDBC API
、
CORBA
技术以及能够在
Internet
应用中保护数据的安全模式等等,同时还提供了对
EJB
(
Enterprise JavaBeans
)、
Java Servlets API
、
JSP
(
Java Server Pages
)以及
XML
技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。
1.1.2
多层分布式结构的应用模型
J2EE
平台采用一个多层次分布式的应用模式。这意味着应用逻辑根据功能被划分成组件,组成
J2EE
应用的不同应用组件安装在不同的服务器上,这种划分是根据应用组件属于多层次
J2EE
环境中的哪一个层次来决定的。图
1
展示了两个多层次
J2EE
应用划分成在下面的表中描述的不同层次。图
1
中表示的
J2EE
应用部分代表了
J2EE
应用组件。
•
运行在客户机器上的客户层组件
•
运行在
J2EE
服务器上的
Web
层组件
•
运行在
J2EE
服务器上的业务层组件
•
运行在
EIS
服务器上的企业信息系统层软件
如图
1
所示,
J2EE
应用可以由三或四个层次组成,
J2EE
多层次应用一般被认为是三层应用,因为它们是被分布在三个不同的地点:客户端机器、
J2EE
服务器和数据库或后端的传统系统服务器。三层架构应用是对标准的客户端
/
服务器应用架构的一种扩展,即在客户端应用和后台存储之间增加一个多线程应用服务器。
图1:多层应用
1.3 J2EE
架构
通常,瘦客户端多层次应用是很难编写的,因为它包括很多行非常难以理解的代码,以处理交易和状态管理,多线程,资源池管理,以及其他复杂的低层次细节问题。基于组件的、与平台无关的
J2EE
应用的开发是很容易的,因为业务逻辑被组织成可重复使用的组件,而且
J2EE
服务器以容器
(Container)
的形式为每种类型的组件提供后台支持。由于你不必自己开发这些服务,你可以专注于解决你面临的业务问题。
1.3.1
容器(
container
)和服务
组件在部署时被安装在容器之中,是组件和特定平台底层功能之间的接口支持着组件。在
Web
,企业
Bean
或者应用客户端组件能够被执行以前,它必须被组装到
J2EE
应用里,并且被部署到它的容器里。组装流程包括设定
J2EE
应用中的每一个组件以及
J2EE
应用本身在容器之中的设置。容器的设置个性化了
J2EE
服务器对每个组件的后台支持,包括像安全性、交易管理、
Java
命名和目录接口查询,以及远程连接等等。这里是一些重点:
•
J2EE
安全模式,使你能够配置
Web
组件或企业
Bean
,使系统资源只能被授权的用户访问。
•
J2EE
交易模式,使你能够指定方法之间的关系,从而组成一个交易,这样交易中的所有方法将被作为一个单元对待。
•
JNDI
查询服务,为企业中多种命名和目录服务提供统一的接口,这样应用组件就可以访问命名和目录服务了。
•
J2EE
远程连接模式,管理客户端和企业
Beans
之间的底层通讯。在企业
Bean
被创建后,客户端调用它的方法,就像它在同一个虚拟机上一样。
实际上,
J2EE
架构提供可配置的服务,意思是在同一个
J2EE
应用中的应用组件可以根据他们部署的位置不同,表现不同。一个企业
Bean
可以通过不同的安全设置,是它在一个生产系统中获得一种层次的数据库数据访问,而在另一个生产系统中,则获得另一种数据库访问权限。
容器还管理着不可配置服务,如企业bean和Servlet的生命周期,数据库连接资源池,数据持续性(persistence),以及J2EE API中描述的访问J2EE平台的API。
尽管数据持续性机制是一个不可配置服务,
J2EE
架构允许你在需要比缺省的容器管理的持续性机制更多的控制时,用你的企业
Bean
实现中的相应的代码覆盖原有的容器管理的持续机制。例如,你可以使用
Bean
管理的持续性机制来实现你自己的搜索方法,或创建个性化的数据库缓存。
1.3.2
容器类型
在部署过程之中,
J2EE
应用组件被安装在如下类型的
J2EE
容器中。本文中涉及的
J2EE
组件和容器参见图
5
。
企业JavaBeans(EJB)容器,为J2EE应用管理着所有的企业Beans。企业Bean和它们的容器运行在J2EE服务器上。
Web
容器,为
J2EE
应用管理着所有的
JSP
页面和
Servlet
组件。
Web
组件和它们的容器运行在
J2EE
服务器上。
应用客户端容器,为
J2EE
应用管理着所有的应用客户端组件。应用客户端组件和它们的容器运行在客户端机器上。
applet
容器,是
Web
浏览器和
Java
插件的组合,运行在客户端机器上。
图
5
:
J2EE
服务器和容器
1.3.3
包装
J2EE
组件是单独包装的,为部署而捆绑到
J2EE
应用中。每个组件,其相关的文件如
GIF
和
HTML
文件,或者服务器端应用类,以及部署描述,被集成一个模块并添加到
J2EE
应用中。
J2EE
应用是由一个或多个企业
Bean
,
Web
,或应用客户端组件模块组成的。最终企业解决方案可以使用一个
J2EE
应用或根据设计需要由两个或更多的
J2EE
应用组成。
一个
J2EE
应用以及它的每一个模块都有它自己的部署描述。部署描述是一个
XML
文本文件,带有
.xml
后缀,描述组件的部署设置。一个企业
Bean
的部署描述,例如,声明交易属性,和企业
Bean
的安全认证。由于部署描述的信息是可以声明的,这样它可以在无需修改
Bean
的源代码的情况下,进行修改。在运行时,
J2EE
服务器读取部署描述,并依次对组件进行操作。
J2EE应用以及相关的模块是在一个Enterprise Archive(EAR)中发送的。EAR文件是一个标准的JAR文件,以.ear后缀结尾。在GUI版的J2EE SDK应用部署工具集中,你先创建一个EAR文件,在添加JAR和WAR到EAR中。如果你使用命令行打包工具,则先创建JAR和WAR文件,然后创建EAR文件。J2EE SDK工具:
•
每个
EJB JAR
文件包含它的部署描述,相关文件和企业
Bean
的
.class
文件
•
每个应用客户端
JAR
包含它的部署描述,相关文件和应用客户端的
.class
文件
•
每个
WAR
文件包含它的部署描述,相关文件和
servlet
的
.class
文件以及
JSP
页面的
.jsp
文件
使用模块和
EAR
文件使使用一些相同的组件组装多个不同的
J2EE
应用成为可能。无需额外的编程,只是把不同的
J2EE
模块组装到
J2EE EAR
文件中。
1.4 J2EE API
Java 2
平台标准版(
J2SE
)
SDK
在运行
J2EE SDK
时是必需的,它为编写
J2EE
组件提供核心
API
,核心开发工具,以及
Java
虚拟机。下面介绍科研管理系统中所涉及到的
API
。
1.4.1
企业
JavaBeans
技术
2.0
一个企业
Bean
是一段包含域和方法的代码体,用于实现业务逻辑的一个模块。你可以认为企业
Bean
是一个构建模块,可以单独使用或与其他企业
Beans
一起在
J2EE
服务器上执行业务逻辑。
由三种类型的企业
Bean
:
Session Bean
,实体
Beans
,和消息驱动
Beans
,这些在业务组件中描述过。有了实体
Beans
,你无需编写任何
SQL
代码或直接使用
JDBC API
执行数据库访问操作。
EJB
容器替你处理这些。当然,如果你不管因为任何原因,覆盖了却省的容器管理持续性机制,你将需要使用
JDBC API
。同样,如果你选用
Session Beans
访问数据库,你必须使用
JDBC API
。
1.4.2 JDBC 2.0 API
JDBC
是为
java
语言定义的一个
SQL
调用级(
CLI
)界面,也就是说其中心在于执行基本的
SQL
声明和取回结果。在此基础上可以定义更高层次的
API
,其中的接口包括直接将基本表与
JAVA
中的类相对应,提供更多的通用查询的语义树表示,以及
JAVA
语言的嵌入式
SQL
语法等。
1.4.3 Java Servlet
技术
2.3
Java Servlet
技术为你定义
HTTP
专用的
servlet
类。一个
Servlet
类扩展了服务器的能力,这个服务器存放着应用,而应用是以请求
-
响应编程模式被访问的。尽管
Servlet
可以响应任意形式的请求,但是它通常被用于扩展
Web
服务器存放的应用。
1.4.4 JavaServer Pages(JSP)
技术
1.2
JSP
页面技术是你能够在基于文本的文件中结合小段的
Java
编程语言代码和静态内容。一个
JSP
页面是一个基于文本的文件,它包含两种类型的文本:静态模板数据,它可以表示为任何基于文本的格式,如
HTML
、
WML
和
XML
;
JSP
元素,决定这个页面如何构造动态内容。
1.4.5 JavaMail
技术
1.2
很多互联网应用需要发送邮件进行确认,所以
J2EE
平台包含了与
JavaMail
服务提供商配合使用的
JavaMail API
,这样,应用组件可以使用它发送邮件。
JavaMail API
包含两个部分:一个是应用层接口,应用组件使用它发送邮件;一个服务提供商接口。
1.5 MVC
设计模式
MVC设计模式起源于Smalltalk语言,它由以下三个部分组成:模型(model),视图(view),控制器(Controller)。
Model
: 模型指的是真正完成任务的代码,包含应用系统的核心功
能表示一个应用系统的数据,并且包含访问、维护和管理这些数据的逻辑。所有属于应用系统持久状态的数据都应该保存于模型对象里。模型提供的服务必须足够适用于不同的终端。一个模型聚集了相关的数据和操作,以提供
一个详细而精确的服务
;
这些被封装在操作中的抽象事物的功能被模型化。一个模型的接口提供了访问和更新模型状态,执行封装在模型中的复杂进程
的方法。模型服务被控制器访问,用于查询或更改模型的状态。当模型状态
发生变化时,模型会通报给视图。对大多数
Web
应用程序而言,功能比界面
感觉更重要。在模型同界面分离的情况下,代码即可实现可管理性和可重用
性。例如,在一个保险应用程序中,模型就是处理计算保险费和同数据库交互的那些业务代码。模型通常也被称作业务逻辑。
View
:
视图表示模型的状态,是应用系统的外观,当模型发生改变时,
视图也将随之改变,以维持系统数据的一致性。在
MVC
模式下,通常的设计
前提是界面任务较小。当然视图也应该具有一定的功能性并遵守可用性的约
束,但视图界面不应当处理数据。事实上,视图的每一部分都只能包含采集
数据的逻辑,并把采集到的数据传递给设计模式中的其他组成部分进行处
理。
Controller
:
控制器是联系模型与视图之间的纽带,控制模型和视
图之间的交互过程。它获取并翻译用户输入的动作,指定执行该动作的模型,
或者根据用户的输入和执行的结果来选择下一个视图。
MVC
通过建立一个
“
订购
/
通知
”
协议来分离视图和模型。视图必须保证它的显示正确地反映了模型的状态。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地得到刷新自己的机会。这种方法可以让一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。
1.5.1 MVC
的优点
(1)
因为视图与模型分离,而且模型与视图之间没有直接依赖性,所以用户界面可以同时显示同一数据的多个视图。例如,
Web
应用程序中的多个页面可以使用同一模型对象。变化一传播机制可以确保所有相关的视图及时
得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
(2)
视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
(3)
模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进
行新的修改。
(4)
潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是
用在设计界面的设计中。
1.5.2 MVC
的缺点
(1)
增加了系统结构和实现的复杂性。
MVC
模式引入了新的间接级别,
因此稍微增加了解决方案的复杂性。它还增加了用户界面代码的事件驱动特
性,调试用户界面代码会变得更加困难。
(2)
视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)
视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据
.
对未变化数据的不必要的频繁访
问,也将损害操作性能。
(4)
频繁更新的成本。将模型与视图分离并不意味着模型的开发人员可
以忽略视图的特性。例如,如果模型发生频繁更改,则它可能向视图发出大
量更新请求。一些视图
(
如图形显示
)
的显示可能需要一定时间。因此,视
图可能滞后于更新请求。因此,在对模型进行编码时牢记视图是很重要的。
例如,模型可以将多个更新作为单个通知发送到视图。
模型
查询状态
向视图通知模型
在模型的公共
状态中的改变 API
中调用方法
视图
选择视图
控制器
用户动作/命令
方法调用
事件
图6 MVC
的体系结构
1.6 Struts对MVC实现
模型(
The Model
)
Struts框架没有提供特定的模型组件。
视图(
The View
)
Struts
框架中
视图组件对应于一个简单的
JSP
文件,这个
JSP
文件包含了
Struts
定义的标签,几个
JSP
的标签是
JSP
文件中的重点。这些标签在
Struts
框架中定义,它使
struts
应用项目和控制器之间实现松耦合。
控制器(
The Controller
)
控制器是Struts框架中的中枢,它由
org.apache.struts.action.ActionServlet
这个servlet来贯彻和执行的。这个
org.apache.struts.action.ActionServlet
接收所有客户端的请求,并把请求委派到指定的Action类(用户扩展自
org.apache.struts.action
)。ActionServlet委派请求是基于客户端传入的URI。一旦Action类完成处理,ActionServlet根据Action返回的键值来决定在什么视图中显示Action的类处理结果。ActionServlet类似于一个创建Action对象的工厂,由Action对象去执行应用中实际的业务逻辑。控制器是Struts框架中最重要的部分。
1.6.1 Struts的运行过程
下面是
一幅和
MVC
模式对应的
STRUTS
框架图
视图(view1)
Action1
Action2
ActionServlet Action3
(控制器)
Action4
视图(view2) 模型(Model)
图
7
STRUTS
框架图
图
7
是
Struts
框架下应用程序请求流通过的路径。这个处理过程由
5
个基本的步骤组成。
下面是
处理步骤的描述。
1
.
由显示视图产生一个请求。
2.
请求被ActionServlet(控制器)接收,它在struts-config.xml文件中寻找请求的URI,找到对应的Action类后,Action类执行相应的业务逻辑。
3
.
Action
类执行建立在模型组件基础上的业务逻辑,模型组件是和应用程序关联的。
4.
一旦Action类处理完业务逻辑,它把控制权返回给
ActionServlet。,Action类提供一个键值作为返回的一部分,它指明了处理的结果。ActionServlet使用这个键值来决定在什么视图中显示Action的类处理结果。
5.
当
ActionServlet把Action类的处理结果传送到指定的视图中,请求的过程也就完成了。
HttpServlet FrowardConfig
<<front controller>>
org.apache.struts.action.ActionServlet
org.apache.struts.action.ActionForWard
<<dispatcher>> ActionConfig
org.apache.struts.action.RequestProcessor
org.apache.struts.action.ActionMapping
Serializable
<<view helper>> <<request handler>>
org.apache.struts.action.ActionForm
org.apache.struts.action.Action
图8 Struts中MVC实现
图
8
中各个类的语义
1.
ActionServlet类:实现控制器,Struts必需的配置在ActionServlet.init()方法中加载。ActionServlet将所有的输入请求委托给RequestProcessor.
2.
RequestProcessor类:分配器,所有输入的请求都被控制器委托给分配器(dispatcher).
3. ActionForm类:存储表单数据,由ActionForm派生出来的对象用于存储请求对象中的参数,因此它们和用户是紧密耦合的。
4. ActionForward类:ActionForward对象是配置对象。这些配置对象有唯一的标识符,以使它们根据有意义的名称进行寻找。
ActionForward
对象封装提交的
URL
路径,它被请求处理程序用来标识目标视图。
5. ActionMapping类:它提供了引入的请求和相应的请求处理程序之间的映射。
6.Action类:请求处理程序。Action类的子类作为适配器用于引入的请求和模型之间。
Action
类的子类是为每个请求单独创建的。
Action
的基类提供了访问与框架相关的资源的公共函数,以及保存由它的子类的
exectue(…)
方法进行检查而得到错误的方法。
1.6.2 Struts
的主要组件:
1.6.2.1
控制器对象
控制器语义有
ActionServlet
。控制器语义提供了处理所有客户请求的中心位置。这就为控制器层提供了一个清楚的工作分配情况,控制器层主要的工作是处理试图和导航管理、将模型访问和操作交给有特定请求的请求处理程序(
Command
对象
[Gof]
)。所有引入的请求被映射到部署描述符的中心控制器上。
1.6.2.2
分配器对象
RequestProcessor
作为一个分配器运行,并通过实例化(或重用)一个请求处理和对应的表单
bean
来处理客户机请求。创建的错误或是表单
bean
和请求处理程序抛出的异常(由
RequestProcessor
处理),影响了
RequestProcessor
的视图管理功能。表单
bean
帮助
RequestProcessor
存储表单数据和分段传输视图需要的中间模型数据,
RequestProcessor
使用
<action>
声明实例化特定请求的请求处理程序。
1.6.2.3
请求处理程序
Action
类的子类作为适配器用于引入的请求和模型之间。请求最初由
RequestProcessor
截获,
RequestProcessor
则实例化一个对应的请求处理程序。这个从
Action
类继承而来的对象(也称为请求处理程序)是为每个请求而特别创建的。客户机请求封装请求
URI
中所需的动作作为
servlet
路径,该路径信息随后有分配器(
RequestProcessor
)提取,从而创建相应的请求处理程序来处理程序实例。命令模式将
URI
从请求
分享到:
相关推荐
基于J2EE架构的信息系统设计模式研究及应用
### 基于J2EE架构的生产管理系统设计 #### J2EE框架及技术选型 J2EE(Java 2 Platform, Enterprise Edition)是一种广泛应用于企业级应用开发的平台,它提供了丰富的API和服务,使得开发者能够构建高性能、可扩展...
系统设计采用基于J2EE架构的B/S与C/S结合模式,通过将纸面资料和电子文档转化为数字化信息,建立有序的档案信息库,并通过系统平台进行数据管理和存储。系统的主要功能包括政策法规管理、科研项目管理、科研成果管理...
《J2EE架构师手册:如何成为一位成功的J2EE架构》是一本旨在帮助读者快速提升J2EE架构技能的专业指南。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用的平台,它包含...
本文深入探讨了J2EE系统架构及其设计模式。 在多层J2EE系统中,通常包括客户端层、Web层、业务逻辑层(或称服务层)和数据持久层。这些层次分工明确,协同工作,以满足企业级应用的高可用性、可伸缩性和可维护性...
首先,J2EE架构基于分层模式,主要包含以下几个关键层: 1. **客户端层(Client Layer)**:用户界面通常通过Web浏览器或富客户端应用与系统交互。这一层负责处理用户请求,并展示返回的数据。 2. **Web层(Web ...
9. **设计模式**:如工厂模式、单例模式、观察者模式等,这些模式是解决常见软件设计问题的标准方法,对于架构师来说至关重要。 10. **性能调优**:包括数据库优化、内存管理、线程池设置等,确保系统在高并发场景...
首先对J2EE架构的管理系统作了简要介绍;然后讨论了在面向对象软件开发过程中设计模式起到的重要作用。并阐述了在J2EE开发应用程序的几种设计模式,及如何使用这几种设计模式来对企业信息管理系统项目进行开发。接着...
2. 设计模式:理解并能灵活运用常见的设计模式,如工厂模式、单例模式、装饰器模式等,以优化系统架构。 3. 微服务架构:随着技术的发展,J2EE架构师需要了解和掌握微服务架构,将其与传统J2EE结合,提升系统的灵活...
### 基于J2EE架构的智能元搜索引擎系统设计与实现 #### 一、引言 随着互联网的快速发展,信息量呈爆炸性增长,如何有效地获取所需信息成为了亟待解决的问题。传统的搜索引擎通过索引网页来提供搜索服务,但往往...
《J2EE架构师手册》是一本专门为那些在企业级Java平台上进行系统设计与开发的架构师准备的重要参考资料。这本手册深入探讨了J2EE(Java 2 Platform, Enterprise Edition)技术体系,旨在帮助读者理解和掌握构建高效...
《J2EE架构师手册》是一本专门为那些希望在J2EE应用领域成为成功技术架构师的专业人士编写的指南。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司推出的用于构建企业级分布式应用程序的平台,它包含了...
本文档专注于J2EE系统构架和设计模式,特别是层架构和MVC架构模式的应用实例,旨在深入讲解如何利用这些模式来优化系统设计。 首先,我们来区分架构(Architecture)与模式(Pattern)的概念。架构是软件系统的高层...
### j2ee架构详细概述 #### 一、Spring框架技术及其背景 ##### 1.1 Spring框架的特性 **1.1.1 关于Rod Johnson的《Expert One-on-One J2EE Design and Development》** Spring框架起源于Rod Johnson在《Expert ...
《J2EE架构与网络编程实训--超市管理系统设计报告》是针对软件开发领域的一份实践性报告,旨在通过设计和实现一个基于SSH(Struts、Spring、Hibernate)框架的超市管理系统,来提升开发者对J2EE平台的理解和网络编程...
基于J2EE架构设计与实现学生信息管理系统,侯爱民,曾广培,文中对基于J2EE架构开发企业级应用系统的设计原理和实现技术进行了探讨,着重讨论了J2EE架构的组成、MVC设计模式、WebLogic Server实现技�
在探讨J2EE架构的读书报告中,我们主要聚焦于J2EE平台上的一个核心设计模式——Model-View-Controller(MVC)模式。这个模式是软件开发中用于创建用户界面的重要工具,特别是在大型企业级应用中,J2EE与MVC的结合为...
### J2EE架构中各层的数据表示方法 1. **MVC三层体系结构中的数据表示**:数据在模型层、视图层和控制器层之间的传递和转换。 2. **系统中各层数据表示的设计**:确保各层之间数据的一致性和安全性,遵循合适的...
【J2EE架构与程序设计】是一门深入探讨Java企业级应用开发的课程,涵盖了从基础到高级的各种技术。在本课程中,学生将通过一系列的实验来掌握J2EE的核心概念和技术,包括Web应用的构建、用户会话管理、MVC设计模式的...