应用服务器如何运行 servlet 和 JSP 代码
正如前面提到过的,J2EE 规范强制一种部署 java Servlet 和其他 J2EE 组件的标准格式。一个称为 部署描述符的 XML 文档就是这种标准格式的一部分。部署描述符包含从每个 servlet 到用于调用特定 servlet 的 URL 的映射。应用服务器使用部署描述符中的信息来决定应该针对给定的请求调用哪个 servlet。
应用服务器调用 JSP 页面的方式类似于 ASP.NET 运行库调用 ASP.NET 页面的方式。 J2EE 应用服务器将每个 JSP 页面转换为一个单独的特殊 servlet,它在该页面被请求时编译和运行。这个特殊的 servlet 保持加载在内存中,直至 JSP 文件改变。这样最大限度地降低了必须为每个 JSP 页面创建和编译一个类所导致的性能影响。
模型-视图-控制器(MVC)体系结构
J2EE 是在考虑到一个特定的应用程序结构的情况下开发的,这个结构称为 模型-视图-控制器(Model-View-Controller,MVC)。MVC 定义了三个应用程序层之间的清楚分离:
模型:应用程序的数据和业务规则集——通常称为应用程序的业务逻辑。
视图:应用程序的用户界面。
控制器:定义了应用程序如何对用户输入或模型层的变化作出反应——通常称为应用逻辑。
MVC 体系结构的优点
J2EE 中没有任何东西强迫您使用 MVC 体系结构来组织应用程序,但是存在这样做的许多很好理由。通过定义三个层之间的清楚分离,MVC 允许构成每个层的组件之间的松散耦合。这样使得组件更加可复用和更灵活。例如,假设您的需求之一是支持某个 web 应用程序中相同数据的不同类型的视图,因为不同的部门需要数据库中相同数据的不同子集。您需要开发特定于每个必需子集的新的视图组件。如果视图逻辑和数据库访问代码是紧密耦合的——ASP.NET 页面就是将数据库访问代码和 HTML 交织在一起,那么每个视图都要包含数据库访问代码。维护重复的代码不仅需要大量的工作,而且还可能导致出错。MVC 体系结构在这种场景中使用数据库代码作为该模型的一部分,而不同的视图组件可以复用它。
J2EE 组件和 MVC
图 1 显示了我们到目前为止所讨论的 J2EE 组件如何映射到一个 MVC 体系结构。注意模型和视图之间不存在任何联系。控制器的功能是充当两者之间的中转站。
图 1. MVC 与 J2EE Web 应用程序
在典型场景中,用户提交一个其目标是一个 servlet 的 HTML。servlet 分析输入,并使用模型中的类来调用业务逻辑以满足该请求。然后 servlet 将结果传递给一个 JSP 页面,以便向用户显示那些结果。
JavaServer Faces
您或许使用过 Web Forms 来开发 ASP.NET 应用程序的用户界面和 UI 控制逻辑。 JavaServer Faces(JSF)规范提供了 J2EE 编程世界中的等价功能。像 Web Forms 一样,JSF 提供运行库组件,这些组件允许工具厂商为基于 Web 的 UI 开发提供拖放功能。它还允许厂商开发可供他们的开发工具使用的自定义组件。
要看到 JSF 的实际应用,可考察一下 WebSphere Studio 5.11 版中的系列工具(请参阅 参考资料)。WebSphere Studio 还有一个名为 Page Designer 的完全集成的工具,可以使用它通过拖放操作来可视化地开发 HTML 页面和 JSP 页面。Page Designer 已实现了 JavaServer Faces 规范,您在使用它时应该会看到一些熟悉的组件,比如 HTML 表单、DataGrids 和 DataList。您还会看到熟悉的“代码分离(code behind)文件(使用 Java 语言),它们包含特定页面的 UI 事件处理代码。
JSF 环境的一个杰出特性在于,它允许您将页面分组为符合逻辑的树形结构。例如,如果有一组包含多个表单的页面,那么 JSF 树形结构就很理想——特别是在用户可能基于先前的输入或基于某些用户特征,通过一条不同的路径经历那些页面的情况下。该结构为树中的每个页面指定一个合理的名称。您在自己的事件处理代码中使用这些名称来导航不同的分支,具体取决于特定的运行时条件。
¥498.00
¥29.00
¥399.00
¥299.00