执行
外观
< Java 编程
导航 入门 主题: ) |
Java 代码可以以多种方式执行。复杂的 Java 应用程序通常使用第三方 API 或服务。在本节中,我们列出了打包和/或执行 Java 代码的最常用方法。
Java 语言第一版出现在客户端-服务器时代。使用丰富的 GUI 界面开发了胖客户端。Java 第一个版本 JSE(Java 标准版)在其工具包中拥有/拥有以下功能
- GUI 功能(AWT、Swing)
- 网络计算功能(RMI)
- 多任务功能(线程)
使用 JSE,可以进行以下 Java 代码执行
- 独立 Java 应用程序
- (图 1)独立应用程序是指用户界面和业务模块都在同一台计算机上运行的 Java 程序。应用程序可能使用也可能不使用数据库来持久化数据。用户界面可以是 AWT 或 Swing。
- 应用程序将从类的
main()
方法开始。当main()
方法退出或应用程序向 JVM 抛出异常时,应用程序停止。类根据需要加载到内存并编译,无论是来自文件系统还是来自 *.jar 文件,都由 JVM 完成。 - 调用以这种方式分发的 Java 程序需要使用命令行。一旦用户拥有所有类文件,他需要通过以下命令行启动应用程序(其中 Main 是包含 main() 方法的类的名称)。
类执行
java Main |
- Java 'jar' 类库
- 实用程序类、框架类和/或第三方类通常打包并分发在 Java '*.jar' 文件中。这些 'jar' 文件需要放在将使用这些类的 Java 程序的 CLASSPATH 中。
- 如果 jar 文件是可执行的,则可以从命令行运行它
归档执行
java -jar Application.jar |
- 客户端服务器应用程序
- 客户端服务器应用程序由前端和后端组成,每个部分都在单独的计算机上运行。其理念是业务逻辑将位于程序的后端部分,所有客户端都将重用该部分。这里的挑战是在前端用户界面代码和后端业务逻辑代码之间实现分离。
- 前端和后端之间的通信可以通过两种方式实现。
- 有关客户端-服务器编程的更多信息(包括示例代码),请参阅本书中的客户端服务器章节。
- Web 应用程序
- 对于许多客户端安装所需的应用程序,客户端-服务器模型不起作用。维护和升级数百或数千个客户端会导致问题。这是不切实际的。解决此问题的方案是为所有应用程序创建一个统一的标准客户端,即浏览器。
- 拥有一个标准客户端,创建统一的标准后端服务也是有意义的,即应用程序服务器。
- Web 应用程序是在应用程序服务器中运行的应用程序,并且可以通过浏览器客户端访问和使用。
- Web 应用程序主要关注三个领域,它们是
- 维基百科还有一篇关于Web 应用程序的文章。
随着重点从访问 GUI 客户端转移到瘦客户端应用程序,在 Java 2 版本中,Sun 推出了 J2EE(Java 2 扩展版)。J2EE 添加了
- 组件基础架构(Servlet、JSP、EJB 容器)
使用 J2EE,可以进行以下 Java 组件执行
- Java Servlet 代码
- (图 2)Java 通过服务器端编程,更具体地说,通过J2EE Servlet 获得了普及。Servlet 在简单的 J2EE 框架中运行,以处理客户端HTTP 请求。它们旨在替换CGI 编程,以渲染 Web 页面动态内容。
- Servlet 运行在一个被称为 Servlet 容器/Web 容器 的环境中。Servlet 的职责是
- 通过执行业务逻辑计算来处理请求,
- 根据需要连接数据库,
- 创建 HTML 以通过浏览器呈现给用户
- HTML 输出同时代表了展现逻辑和业务计算的结果。这代表了一个巨大的问题,并且没有真正的应用程序仅仅依靠 Servlet 来处理职责中的展现部分。对此有两个主要的解决方案:
- 使用模板工具(将展现部分存储在 HTML 文件中,标记在业务逻辑计算后需要替换的区域)。
- 使用 JSP(参见下一节)
- 维基百科也有一篇关于 Servlet 的文章。
- Java Server Pages (JSP) 代码
- (图 3) JSP 是一个 HTML 文件,其中嵌入了 Java 代码。第一次访问 JSP 时,JSP 会被转换为 Java Servlet。这个 Servlet 输出包含业务逻辑计算结果的 HTML。有一些特殊的 JSP 标签可以帮助动态地向 HTML 中添加数据。此外,JSP 技术允许创建自定义标签。
- 正确使用 JSP 技术,业务逻辑计算不应该放在 JSP 嵌入的 Java 部分。JSP 应该用于呈现静态和动态数据的展现。根据数据的复杂性,100% 的分离并不容易实现。然而,使用自定义标签可以帮助我们更接近 100%。这也在 MVC 架构(见下文)中提倡。
- EJB 代码
- (图 4) 在 20 世纪 90 年代,随着客户端服务器计算的发展,一个趋势开始出现,即远离大型机计算。这导致公司/企业中出现了许多小型独立的应用程序。很多时候,不同的应用程序使用相同的数据。为了解决这些问题,创建了一种新的理念,“企业计算”。其想法是创建可以在整个企业中重用的组件。企业级 Java Bean (EJB) 正是为了解决这个问题而出现的。
- EJB 是一个运行在 EJB 容器中的应用程序组件。客户端通过容器访问 EJB 模块,而不是直接访问。容器管理 EJB 模块的生命周期,并处理网络/企业计算中出现的所有问题。其中一些问题包括 安全/访问控制、对象池、事务管理 等。
- EJB 与任何可重用代码一样都存在相同的问题:它们需要足够通用才能被重用,并且 EJB 的更改或维护可能会影响现有的客户端。很多时候,EJB 在没有真正需要时被不必要地使用。EJB 应该被设计为企业中一个独立的应用程序,履行一项功能。
- 组合 J2EE 组件以创建 MVC 架构
- 这将我们引向 (图 5) 中所示的三层/三层架构。
- 在现代 Web 应用程序中,随着大量静态数据和精美图形的出现,数据如何呈现给用户变得非常重要,通常需要图形艺术家的帮助。
- 为了帮助程序员和图形艺术家协同工作,数据、代码以及呈现方式之间的分离变得至关重要。
-
- 视图(用户界面逻辑)包含构建展现所需的逻辑。这可以通过 JSP 技术来处理。
- Servlet 充当控制器,包含处理用户事件并选择适当响应所需的逻辑。
- 业务逻辑(模型)实际上实现了交互的目标。这可能是对数据库的查询或更新。这可以通过 EJB 技术来处理。
- 有关 MVC 的更多信息,请参阅 MVC。
在 J2EE 之后,Sun 对网络计算的下一步发展有了愿景。那就是 Jini。其主要思想是在网络环境中,会有许多独立的服务和消费者。Jini 将允许这些服务/消费者以健壮的方式动态地相互交互。Jini 的基本特性是:
- 无需用户干预即可将服务上线或下线。(与 EJB 不同,在 EJB 中,客户端程序必须知道 EJB 部署的服务器和端口号,而在 Jini 中,客户端应该找到、发现网络中的服务。)
- 当服务(服务的消费者)出现和消失时,通过适应实现自我修复。(服务需要定期续约以表明它们仍然可用。)
- JINI 服务的消费者不需要事先了解服务的实现。实现是动态下载并在消费者的 JVM 上运行,无需配置和用户干预。(例如,最终用户可能会看到略微不同的用户界面,具体取决于当时正在使用的服务。用户界面代码的实现将由正在使用的服务提供。)
一个最小的 Jini 网络环境包括:
- 一个或多个服务
- 一个查找服务,保存已注册服务的列表
- 一个或多个消费者
在撰写本文时(2006 年),Jini 并没有得到广泛使用。这可能有两个原因。一是 Jini 有点复杂,难以理解和设置。另一个原因是微软退出了 Java,导致业界转向使用专有解决方案。