J2EE规范提出了自己的n-tiers结构。
在普通应用中,我们大多会按如下方式划分:
表示层:管理用户的请求,对用户的请求做出相应的响应,并向用户显示出相应信息。Struts框架在表示层可以对用户的请求进行处理,有控制器可以调用下层业务逻辑,可以对异常进行处理,以及对用户输入的信息进行验证。表示层还可以选择Velocity、JSF等。
业务逻辑层:负责业务逻辑的实现。Spring框架在业务逻辑层可以处理应用程序的业务逻辑、业务校验、对事务进行管理、管理业务层中各个对象的依赖关系,执行相应的业务程序来实现业务服务。
持久层:负责对数据库的访问。Hibernate框架在持久层为JAVA提供了面向对象的持久化机制和查询服务。可以采用面向对象的方法存储、更新、删除数据库的记录,以及查询数据库信息。持久层还可以选择ibatis等
数据层:用来存放业务数据,供上层调用,主要指一些数据库系统。
经典的ssh(Struts、Spring、Hibernate)这3个框架功能各不相同,根据Web应用的功能层次,可将这3个框架应用到不同的层次,最终来实现各层的功能以完成集成。
Struts应用在表示层、 Spring应用在业务逻辑层、Hibernate在持久层。
说到J2EE的分层结构,就不得不说说MVC设计模式。
MVC设计模式使“模型”、“视图”、“控制”相分离,降低了组件之间的耦合性,同时“模型”组件可以被系统中的其他组件重复利用,提高了代码的可重用性。
模型Model:独立的组件、或者开发模块。在应用中负责业务逻辑的处理。模型将业务逻辑封装成独立的模块,而且提供给不同的开发者使用。而且这些独立的模块可根据需要进行组装。
视图View: 代表和用户交互的界面。视图负责 显示从模型中采集的数据或用户输入的数据 和 请求的传递,将这些数据和请求传递给控制器和模型。
控制器Controller:负责将视图的需求分发给视图所依赖的所有模型,并在模型做了改变后,把这种改变分发到模型对应的所有视图中,视图中的内容会随之改变。一个视图可以依赖多个模型,一个模型可以对应多个视图。
总之,MVC设计模式的原理是:当有事件发生时,View将客户端请求发送给Controller,Controller将会改变Model或View。如果Controller改变了Model的数据,所有依赖Model的View都会被Controller通知,View会对Model进行状态查询,Model会对状态查询做出相应并通知视图进行改变。同样,如果Controller改变了View,View会从依赖的Model中获取相关数据并刷新View本身。