JavaServer Faces(JSF)是用于在Java Enterprise Edition平台(JavaEE)中构建基于Web的应用程序的当前前端技术。
在本文中,我们将讨论在构建可用于生产环境的JSF应用程序时应考虑的要求和建议,包括开发环境的设置和准备,原型和设计,开发和故障排除以及性能调整。
一,背景 在1998年以及Java EE(J2EE)的早期阶段,Sun Microsystems实施了对Web应用程序的第一个支持,即Java Servlets。Servlet是围绕处理HTTP请求和使用Java类在服务器端生成动态HTML内容的概念设计的。
与当时的可用技术(例如CGI,Perl,PHP和ASP)相比,Java Servlet是一种非常干净的方法。尽管它广受欢迎,但是对于大多数Web应用程序来说,当在Java类内部生成相对较大的HTML标记的需求变得迫切时,它已开始变得不切实际。
这导致在1999年创建了一种新的标准技术JavaServer Pages(JSP),该技术颠倒了在Java类内部生成动态HTML标记的概念,改为使用scriptlet在HTML页面内部编写Java代码。
JSP和Servlet在一起已有一段时间了,它们已经在所有级别的应用程序中狂野地实现了。大多数应用程序的设计都使Servlet用于业务逻辑,而JSP用于动态视图处理。这是基于“模型-视图-控制器”(MVC)设计模式的。
但是,在此类应用程序中,存在许多耗时且由应用程序开发人员手动处理的技术要求,例如:MVC,绑定(即,将用户界面输入组件链接到服务器端字段),输入验证,模板(即UI设计布局和视图的封装),页面导航和工作流,复合UI组件等。这导致了许多框架和API由3创建第三政党组织,社区和供应商来解决这些问题。最受欢迎的是:Apache Struts,Tiles,Tapestry和Spring MVC。
2004年,Sun决定从头开始采用一种新的Web技术,以包括大多数Web应用程序必需的所有必需功能,以及基于组件和事件驱动的Web应用程序的现代化概念,并且是JSF 1.0,然后是2006年的1.1和1.2。
由于缺乏成熟度,IDE集成和社区支持以及严重的性能和安全性问题,因此JSF 1.2的实现速度没有其前代产品(JSP和Servlets)快。
后来,在2009年,JSF 2.0包含许多新特性和增强功能,包括宣布的Facelets(3宣布第三作为一个模板引擎党雅各Hookom在2005年展开图的语言),并在JSP,AJAX支持默认的视图声明语言,GET请求支持等。后来,JSF 2.1发行了。当前,最新的可用版本是2.2,自2013年以来已发布。
二。现实应用程序中的JavaServer Faces 从一开始就设计JSF时就考虑了快速应用程序开发(RAD)。它具有良好的社会支持,以及3个的一大套房RD第三方组件(例如,PrimeFaces)。但是,在基于标准软件开发生命周期(SDLC)的所有阶段中,构建基于JSF的应用程序仍涉及许多详细任务。有些任务已经包含在JSF标准执行,而其他由3支持第三党。这些分类如下:
尽管安全性是一个非常重要的主题,但是我们决定不将其包含在本文中,因为它涉及许多标准,规范和技术(例如Servlet Spec。JAAS,OWASP和Spring Security),而这些标准,规范和技术均与安全性没有直接关系。 JSF。我们可能会在以后的文章中更详细地讨论安全性方面。
1)项目准备和环境设置 创建新的JSF应用程序时,需要许多配置,库和设置,其中包括:
WEB-INF文件夹中存在web.xml(尽管自2009年servlets 3.0规范以来它已成为可选)。
Web.xml必须包含以下配置:
2)页面原型和设计 过去,创建应用程序原型是一项简单的任务,可以由业务分析师(BA)使用任何建模工具(例如Microsoft Visio)完成,因为传统台式机和老式Web应用程序的设计期望并不高。但是,随着网页设计和用户体验的新趋势(包括响应式,轻型,扁平和地铁设计)的出现,这种情况已发生了巨大变化。由于用户界面设计已成为许多软件项目中授予标准的主要因素之一,因此这种趋势导致需要在项目的早期阶段甚至有时在授予之前就构建完整的应用程序原型。
在JSF应用程序中,可以使用以下三个选项之一来完成此操作:
纯JSF组件和主题:这被认为是实现原型的最简单方法。但是,这种方法限制了JSF开发人员完全依赖于当前可用的组件和主题,与HTML5现代主题相比,这些组件和主题的选项受到限制并且被认为是重量级的,并且缺乏新趋势的支持。而且,由于Java开发人员的人工成本比Web设计人员的成本高,因此这将导致项目成本增加。此外,这将使应用程序与组件库高度耦合,这将导致高昂的维护成本(即PrimeFaces对话框组件在4.0和5之间进行更改)。这也将使替换另一个组件成为一个巨大的挑战,
具有Web设计者定制支持的纯JSF组件: 尽管在设计中可以使用一些次要的自定义选项可能会很好,但是在这种情况下,网页设计人员的参与不会有太大帮助,这是许多挑战的原因。首先,自定义主题并覆盖其样式不是很灵活,这也不是一件容易的事。其次,这是一个非常耗时的过程,无法保证结果。第三,显然缺少支持这种定制的设计工具,这是使该选项对设计人员不推荐和不友好的主要因素之一。使用Facelets作为声明语言将无法解决问题,因为将JSF组件用于所有内容仍然会从标准JSF语法中产生相同的输出,并且它们与组件的耦合仍然很高。
3)开发与调试 JSF的设计旨在包括现代Web应用程序以实现RAD方法所需的许多技术要求,其中包括:
这主要是由两个原因引起的:(1)复杂的Web应用程序的客户端代码的复杂性(大多数现代Web应用程序就是这种情况),以及(2)JSF规范和实现的局限性,这将在后面的第11页中讨论。这个文件。
尽管JSF自2004年以来就已经可用,但是它仍然缺少许多技术功能和特性,这使得构建和调试JSF应用程序成为一个巨大的挑战。一些挑战包括:
<head>
<h:form>
<html>
4)性能调优 JSF具有一些可用于性能调优的配置,包括刷新周期和项目阶段上下文参数,但是如上所述,尽管JSF的设计是基于较高的抽象级别和众多精美功能,但它包括许多功能。严重的性能问题,包括:
在JSF组件树中包括所有静态资源(图像,CSS和JavaScript)的开销。 缺少应保留一段时间的用户界面资源的标准和透明缓存功能,并且避免对组件树中的每个请求(例如动态页面页眉,动态页脚和动态菜单)在JSF树中进行处理。 三,推荐建议 为了实现使JSF技术成为针对不同级别的应用程序的基于Web的应用程序开发的选择的目标,我们建议对JSF进行以下增强:
IV。Smart-Web 基于上述约束,局限性以及从针对具有不同可伸缩性级别(例如,小型,中型和企业级)的不同领域(例如政府,银行和教育)构建JSF项目中学到的经验教训,我开始了Smart-Web(开放式)源项目,其中包含上述大多数建议。 https://www.smart-api.com/frameworks/smart-eis1/jk-faces/
结论 尽管JSF已经实现开发用于构建企业级Web应用程序的快速应用程序的目标已经有10多年了,但是从分析到开发的整个软件项目阶段,开发人员都需要面对许多复杂的步骤和约束。最终的实现。其中一些问题是由第三方库处理的,有些是在应用程序级别处理的,还有一些仍未解决。
我们已经提出了一些新特性和动作,这些特性和动作将在JSF的未来发行版中加以考虑。
原文链接:http://codingdict.com