J2EE(Java 2 Platform, Enterprise Edition)为构建复杂的企业级应用提供了全面的技术支持和规范标准。自从上世纪末推出以来,J2EE 已经成为企业信息系统(EIS)领域 中不可或缺的一部分。它通过组件化、多层次的分布式应用模型,允许开发者构建具有高可扩展性、可维护性和安全性 的企业级解决方案。J2EE平台的核心特性是它能够支持构建可扩展、模块化、和松耦合的企业级应用。
J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编程接口确定了 Web 应用与驻留它们的服务器之间的通信方式。J2EE 注重两件事,一是建立标准,使 Web 应用的部署与服务器无关;二是使服务器能控制构件的生命周期和其他资源,以便能够处理扩展、并发、事务处理管理和安全性问题。
组件化开发模型
在J2EE平台上,应用被设计成一系列组件,这些组件能够被独立开发、部署和管理。组件化开发模型让复杂应用的构建变得更为简单,它包括以下几个关键组件:
- Servlets: 用于处理HTTP请求和响应的Java服务器端组件。
- JavaServer Pages (JSP): 结合HTML或XML标记语言的Servlet,更注重于视图部分,它将Java代码嵌入到HTML中,易于实现展示逻辑。JSP通常用于生成动态的HTML内容,并与用户进行交云。
- Enterprise JavaBeans (EJB): 用于实现业务逻辑的服务器端组件。它们运行在应用服务器上,并由容器管理。EJB分为三种类型:EntityBean(实体 Bean)、Session Bean(会话 Bean)和 Message Driven Bean(消息驱动Bean。
- 会话 Bean 代表与客户间的短暂对话。在执行数据库读写时,会话 Bean 可以请求 JDBC 调用,也可以使用实体 Bean 执行调用,这时会话 Bean 是实体 Bean 的客户端。会话 Bean 的字段中包含对话的状态,如果服务器或客户端出现故障,会话 Bean 将消失。会话 Bean 可以有状态,也可以无状态。有状态会话 Bean 包含客户端方的对话状态,对话状态是会话 Bean 实例的字段值加上可以从会话 Bean 字段阅读的所有对象。有状态的会话Bean 不表示持久数据库中的数据,但能够以客户端的名义访问和更新数据。无状态会话 Bean 没有客户端的任何状态信息。它们一般不提供保留任何状态的服务器行为。无状态会话 Bean 需要的系统资源较少。提供通用服务或表示共享数据视图的业务对象适合作为无状态的会话 Bean。
- 消息驱动 Bean 能处理从 JMS 消息队列接收到的异步消息。JMS 将消息路由到消息驱动 Bean,由消息驱动 Bean 从池中选择某个实例处理消息。消息驱动 Bean 在 EJB 容器中管理。由于它们不是由用户的应用直接调用的,因此不能借助 EJB 本地接口从应用进行访问。但是,用户的应用可以将消息发送到 Bean 所监听的 JMS 队列中,以此来实例化消息驱动 Bean。
- 实体 Bean 表示数据库中的数据及作用于数据的方法。在关系型数据库中,表中的每一行就是一个 Bean 的实例。实体 Bean 是具有持久性的事务处理型 EJB,只要数据存在于数据库中,实体 Bean 就存在。
多层结构的分离和集成
J2EE的多层次体系结构将企业应用的各个部分分隔开来,以实现高度模块化,并方便团队的分工合作。以下是J2EE体系结构的四个主要层次:一般分为客户端层、Web层、业务逻辑层和数据持久层。这样的分层架构有助于减少层间的依赖性,易于维护和扩展。
- 客户端层是与最终用户直接交互的一层。在传统的企业应用中,客户端可以是桌面应用程序(例如使用Swing或JavaFX构建的),也可以是基于Web的瘦客户端。客户端层负责提供用户界面和收集用户输入,然后将其转发到Web层或直接到业务逻辑层。
- Web层位于客户端层和业务逻辑层之间,主要负责处理HTTP请求和响应。这个层次包含两个关键组件:Servlet和JSP(Java Server Pages)。Servlet是一种用于处理客户端请求并产生动态网页的Java技术。而JSP则是一种用于创建动态内容的页面技术,它允许开发者将Java代码嵌入到HTML页面中。J2EE通过这两个组件将Web内容的动态生成与页面的静态内容分离。
- 业务逻辑层是J2EE体系结构中的核心,负责处理应用的业务规则和逻辑。在这个层次,企业级JavaBean(EJB)组件被用来构建可重用的业务对象。EJB提供了事务管理、安全性和多线程等企业级服务,让开发者能专注于业务逻辑的实现。
- 数据持久层,又称为企业信息系统(EIS)层,负责与后端数据存储进行交互。在此层,通常使用JDBC(Java Database Connectivity)或JPA(Java Persistence API)与数据库进行通信。数据持久层将业务逻辑层传递来的数据持久化,也可以将存储的数据检索出来供业务逻辑层使用。
基于服务的通信模型
在J2EE架构中组件之间的通信对于整个应用的正常运行至关重要。以下是组件间通信的两种主要方式:
- 远程方法调用(RMI),RMI允许Java对象之间进行方法调用,就像本地方法调用一样。RMI是基于Java的序列化机制,能够将对象从一个Java虚拟机(JVM)传输到另一个JVM。这意味着Web层或客户端层的组件可以通过RMI调用业务逻辑层中EJB组件的方法。
- 企业信息系统(EIS)集成,J2EE允许通过JDBC或JPA等技术实现业务逻辑层与数据库之间的集成。这种集成使得数据持久层能够将业务逻辑层处理后的数据持久化到数据库中,或者从数据库中检索数据供业务逻辑使用。
MVC模式在J2EE中的应用
模型-视图-控制器(MVC)是一种常用的软件设计模式,用于创建用户界面。在J2EE中,MVC模式被广泛应用于Web组件中。
企业级应用的安全性
6.4.1 J2EE安全模型概述 J2EE安全模型基于声明性安全和程序性安全。声明性安全通过配置来控制用户对资源的访问,而程序性安全则在代码中实施访问控制。
6.4.2 常见的认证与授权机制 认证(Authentication)和授权(Authorization)是两个核心概念。J2EE提供了多种认证方式,如基本认证、表单认证等,并支持自定义认证机制。授权则通过安全角色和权限来控制访问。
6.4.3 集成第三方安全框架的实践 在实际开发中,经常需要集成如Spring Security、Apache Shiro等第三方安全框架来满足更复杂的安全需求。