介绍

JSF,即Java Server Faces,是JPC(Java Community Process)推出的一种基于组件构建Web应用的新技术,它能让开发工具拥有可视化拖曳组件构建服务端Web页面,并为组件提供事件编程机制。JDK5后JSF被正式纳入Java EE规范。
JSF提供了一种以组件为中心来开发Java Web用户界面的方法,简化了Web应用开发的复杂性。在开发工具的支持下,应用开发可以简单到只需将UI组件拖放到页面上,然后利用丰富而强健的JSF API为他们添加丰富的功能即可。
JSF遵循结构良好的MVC(模型一视图一控制器)设计模式,确保了应用程序具有更高的可维护性。
本质上,JSF是一种基于Java构建Web应用程序的服务端用户接口(UI)组件框架。它定义了一套UI组件和一套标准的API。所有UI组件都可以直接用在网页里,而且大部分组件几乎都是HTML form系列标记的翻版。
JSF API为组件提供了强大的功能。与组件关联的验证器能进行数据验证和完成前后台数据传送。点击链接或按下按钮时会触发事件,以便通过事件处理代码改变其他组件的状态或运行某段后台程序。利用导航机制,可以方便地控制页面的跳转。
JSF结合了第三方开源框架Struts和Swing的优点,得到了众多开发工具提供商和应用开发者的认可。

工作原理

JSF为UI组件声明了它们可能发生的事件(诸如数值改变、按下按钮等),并配置处理该事件的监听器。
UI组件可以搭配不同的渲染器(renderer)从而呈现不同的外观。
JSF通过辅助性的工具,如验证器(validator)、转换器(converter)等对前/后台数据执行验证和类型转换 。

JSF应用是事件驱动的。用户动作引发页面中预置的事件,从而触发监听器处理代码的执行。实际上,在事件发生时(如用户单击了一个按钮),相应的事件消息通过HTTP发往了服务器,然后由服务器端名为FacesServlet的特殊Servlet对该事件进行处理

JSF请求总是交由FacesServlet来处理,这是在Web应用的部署描述文件web.xml中指定的。在JSF应用的web.xml中有一个Servlet和一个Servlet-mapping标签。类似于下面的代码:

<Servlet><Servlet-name>FacesServlet</Servlet-name><Servlet-class>javax.faces.webapp.FacesServlet</Servlet-class><load-on-startup>0</load-on-startup>
</Servlet>
<Servlet-mapping><Servlet-name>FacesServlet</Servlet-name><url-pattern>*.faces</url-pattern>
</servlet-mapping>

这段代码中的servlet-mapping标签中的url-pattern元素表明,所有请求的URL对应的JSP文件都要改用.faces作为扩展名

JSF的组成

JSF应用也需要运行在Servlet容器中,通常包含以下几个组成部分:
包含UI标签的页面(JSP页面);
辅助Bean类,用于传递数据和执行处理;
验证器、转换器、事件监听器;
其它JavaBean组件;
应用配置文件(web.xml、faces-config.xml)。

JSF类库JSF技术实现者(提供商)提供,以JAR包提供,需要在自己的Web应用中导入。
SUN官方JSF参考实现提供了一组基本的UI组件,包括两个组件库:HTML组件库和Core库,前者映射了标准的HTML输入元素,后者提供辅助开发处理(如国际化、验证、数据转换等)。JSF API还允许扩展和创建定制UI组件。
还有不少第三方JSF实现,如Oracle的ADF Faces就是一个完全符合JSF规范的功能更强大的JSF实现库,包括多种呈现器、高级表格、颜色和日期选择器以及菜单、命令按钮、转移选择器和进度指示等)。
由Apache开源社区推出的MyFaces也是一个不错的JSF实现库,它对JSF基本UI组件进行了增强,如集成了Tiles支持、支持JavaScript菜单和树控件等。

JSF开发步骤

不管是否使用IDE开发环境,使用JSF框架开发Web应用通常遵循以下三个步骤:
(1) 视图设计
利用开发工具,可视化地快速构建Web用户界面,并将页面组件与后台JavaBean绑定。
(2) 模型设计
JSF框架实现了应用程序逻辑和表示的完全分离。在模型设计部分是编写称为辅助Bean(又叫受管Bean)的JavaBean,完成应用的相关业务逻辑代码。
手工部署JSF应用时,需要将编译好的JavaBean类放到Web应用的WEB-INF\classes目录下(Tomcat环境);利用RAD开发工具(如MyEclipse),则通常会自动把实现了业务逻辑的JavaBean类及相关JAR包自动部署到服务器的相关位置。
(3) 控制器设计
JSF的控制器由web.xml和faces-config.xml两个配置文件(均在WEB-INF目录下)完成。web.xml文件用于设置应用主控制器;Faces-config.xml文件设置页面导航,控制页面间的跳转流程。
在MyEclipse中,配置文件的设计基本上由工具自动完成,即使手工配置也是非常简单的。

1:22开始

javaee笔记(10)JSF相关推荐

  1. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  2. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  3. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  4. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

  5. Spring-学习笔记10【Spring事务控制】

    Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...

  6. MyBatis-学习笔记10【10.JNDI扩展知识】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

  7. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

  8. Linux学习笔记10

    Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...

  9. Think in Java第四版 读书笔记10 第16章 数组

    Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...

  10. 二级VB培训笔记10:知识点串讲

    二级VB培训笔记10:知识点串讲 一.对象概述 1.三大特性:封装性.继承性.多态性 参看<VB讲课笔记1202. 二级公共基础 - 程序设计基础> 2.对象的属性 了解VB对象的常用属性 ...

最新文章

  1. 在Eclipse中安装ADT
  2. VC2019无法打开文件msvcrtd.lib和Spectre 缓解库相关问题
  3. 信息服务器恢复需要多少时间,云服务器灾难恢复的4个计划
  4. 理工大学统考计算机在线作业,北京理工在线作业-现代远程学习技术-20210417121542.pdf-原创力文档...
  5. 静态页面 调用php数据,静态html页面如何更新点击数
  6. input失去焦点和获得焦点jquery焦点事件
  7. JavaWEB前端向服务器端发送对象
  8. 关于WPF的MVVM模式的吐槽
  9. Modelsim下载安装【Verilog】
  10. NXP RT1062 flashloader下载程序到RAM执行
  11. Foxmail登录网易邮箱提示LOGIN Login error user suspended
  12. Typora + PicGo + Github实现图床
  13. 监控摄像机选型攻略之常见机型选用
  14. 如何预防计算机专业的危害,程序员一族该如何预防“电脑病”?这份健康指南来帮你!...
  15. HTML5的学习资料(开发设计原则)
  16. 2016年最权威的1000集大型web前端视频教程(爱创课堂出品)
  17. 切入点表达式的写法详解
  18. Android 常用API自查表(二)
  19. win7共享xp打印机_快速有效的局域网共享方法,十年老技术现身说法亲测可用
  20. 强制Layout刷新

热门文章

  1. 【无线通信协议笔记】蓝牙篇:BLE HID协议
  2. 【语音识别】动态时间规整算法(RTW)语音识别系统【含GUI Matlab源码 341期】
  3. 刚刚,一页马克思手稿在阿里拍卖上拍到了290万
  4. oracle云erp产品有哪些,云ERP与传统ERP的区别有哪些百洋智能科技为您分析
  5. 分布式系统统一身份认证
  6. 一个普通视觉工程师对自己的要求:
  7. 数据分类分析--聚类
  8. Python-random函数用法
  9. 2021消防设施操作员(初级)岗位考试模拟题库应急疏散逃生知识部分
  10. xff_referer知识