大型项目青睐的技术与平台

时间:2022-11-24 00:50:10

之前所说的框架都有一个共同点,就是全都是开源免费的,而且那些框架并不属于Java EE的规范。这些框架技术在面对中小型应用的时候游刃有余,但在大型应用面前就有些捉襟见肘了。

1JSF框架

JSFJava Server Faces的简称,和Tapestry一样,JSF也是基于组件技术的MVC开发框架,是一种区别于传统Web开发流程的技术。JSF是由Sun推出的,因为Sun的名气很大,所以Java EE官方的Web层解决方案还是JSF。而且和Tapestry基于Servlet不同的是,JSF是基于JSP的。

Java EE 5中,JSF只是一个标准,各个厂商和组织都可以根据标准的要求开发自己的实现,常用的JSF实现有Sun JSFMyFacesFacelets JSF等。使用JSF开发Web应用的时候,将不会体会到请求-响应这个传统流程。与Tapestry相同,JSF的主要组成部分也是页面,每个页面在后台都会有一个页面BeanPage Bean),这个页面Bean会和前台的页面本身进行数据绑定。

比如前台页面包含一个用户登录组件,这个登录组件中肯定包含用户名和密码两个空间,于是后台的页面Bean中响应的就会有两个分别代表用户名和密码的字符串作为前台页面的数据模型。

当用户修改前台页面上控制变量的值并提交页面的时候,后台页面Bean的数据模型也会立刻改变。反之,后台数据的改变也会反映到前台的控件上,这使得JSFWeb开发更加类似于Swing等桌面程序的开发。

假设用户要更改自己账户中的年龄,根据JSF的请求处理过程,这个请求的每个步骤和相应触发的事件如下:

1)恢复视图

为选择的页面查找或创建一个组件树,恢复构成视图的组件,组件值可能来自用户传来的request或是存放在服务器端的数据。指的之一的是,有些组件会在此状态次啊产生动作时间对象。对应本例,就是在用户填写好修改年龄的信息并单击确定那妞提交form后,后台需要将用户填写的修改年龄的页面组件重现,以便进行下一步。

2)应用请求值

恢复好的视图中每个组件各自从用户提交来的request对象中查找自己的值,并存储找到的值,同时还要对每个组件的值进行语法验证。对应本例,就是将从request中提取到的用户名、年龄等值再重新复制给恢复好的组件。语法验证区别于后面的语义验证,如本例中会检查输入的年龄之是否为整数。

3)处理验证

处理验证阶段检查请求中的新值是否满足要求,如果出现异常将会抛出异常消息,对应到本例,就是检查用户提交的年龄值是否符合实际情况,如不能为负数或太大的正整数。

4)更新模型值

将通过验证的组简直更新到绑定的模型对象属性,即根据该页面组件值修改其页面Bean中对应变量的值,对应到本例,就是修改后台页面Bean的用户名和年龄属性。

5)调用应用

调用注册的监听器(如ActionListener)来对模型对象的新值进行处理,对应到本例,就是修改数据库,把用户的年龄替换为新的数值。

6)呈现响应

针对先前受到的request,根据导航逻辑返回一个合适的视图给客户端,对应到本例,则是返回提示修改成功或失败的页面组件给客户端浏览器。

因为JSF组件和标签的封装程度非常高,在典型的应用中已经不需要开发者去处理HTTP细节了。页面操作会被自动映射到后台的JavaBean中,处理逻辑直接与后台的JavaBean交互。另外JSF使用POJO作为控制器,因而比较灵活,可以使用任意的方法来处理用户的请求,但Struts 2的控制器必须是实现了Action接口的类或者继承自ActionSupport类,其处理用户请求的代码只能写到execute方法中。

2、EJB 3.0业务层技术

EJBEnterprise Java Bean的简称,同JSF一样,EJBJava EE的规范。EJB工作在业务层,这点和Spring一样,但是EJBSpring优越的地方在于其具有分布式能力,可以远程调用。EJB是面向巨大业务量的重量级解决方案,而Spring只是轻量级框架技术。EJB必须部署在EJB的容器中如WeblogicJBoss等,目前EJB的最新版本是EJB 3.0

EJB 3.0主要分为会话(SessionBean和消息驱动(Message-DriverBean。前者主要负责同步业务的功能开发,而后者专注于异步业务。会话Bean又可以分为有状态的会话BeanStateful Session Bean)和无状态的会话BeanStateless Session Bean)。

EJB的基础是RMI,即Remote Method Invoke,远程方法调用。EJB 3.0的开发讲究的是“POJO+POJI”,POJO前面已介绍过,POJO是指Plain Java Interface。“POJO+POJI”的意思就是用普通的Java对象和接口开发EJB

3、JPA持久层技术

JPA的全称为JAVA  Persistence API,是Java EE 5中一套完整的持久层解决方案。JPAHibernate同处在持久层,但JPA并不是Hibernate的替代品。因为JPA是一种规范,可以由很多的厂商去实现,Hibernate中现在也有JPA的实现。

JPA的出现总结了EJB 2.x中性能很差的实体Bean,现在JPA已经是Java EE持久层技术的不二选择。再加上JSFEJB 3.0,三者组成了Java EE 5官方的解决方案,同时也成为了大型项目普遍采用的一套完整的解决方案。

JPA的特点:JPA吸收了许多主流的持久层框架的优点,如HibernateORM工具等。同时JPA没有和Java EE的容器绑定,因此可以在Java SE的环境中使用并对其进行测试。另外JPA定义了服务提供者接口(Service Provider Interface),在不用修改实体代码的前提下,开发者可以使用不同的持久化提供者,只要它们能够提供持久化存储的解决方案即可。

什么是实体?

实体不同于实体Bean,二者是不同的对象,而且实体也不是实体Bean的后继产物,是一种全新的编程概念。在典型的多层企业级应用中,通常会存在两种不同的对象。

1)业务逻辑组件

此类组件提供业务方法,能够完成具体的业务逻辑,如根据单价计算用户订单,给客户的信用卡开账单等,在EJB 3.0中,这类独享一般由会话Bean实现。

2)持久化数据对象

通过不同的持久化机制能够将Java对象存储到持久化源中,这类对象用来表示数据,如银行账户信息,人力资源数据等。在JPA中,这些被持久化的对象称为实体。

JPA推崇POJO的编程模型,所以在JPA中,实体都是POJO,开发者能够将其持久化到持久源(数据库或遗留系统)中。实体中以属性的方式存储数据,可以通过方法关联到相应的属性。

实体类必须声明逐渐,这点和数据库表差不多。同时实体中不但可以有存取属性的方法,还可以由一定的业务方法,如扣除账户余额,向账户存入资金等。JPA中的实体是本地对象,不能够直接对其进行远程访问。如果需要远程访问,一般是采用会话Bean对其进行包装,在JPA规范中实体的工作步骤如下所列。

从持久化源中装载数据,并提供属性域来存储载入的数据。

通过修改内存中的Java对象,改变数据的取值。

将数据存回到持久化源中,从而达到更新持久化数据的目的。