JavaServer Faces技术与应用
什么是框架(Framework):
一堆组件协同运作的机制,该系统更具扩充性、维护性。(J2EE、Struts……)
J2EE(EJB,JMS,JavaMail,Portal,JDBC,JTA/JTS,JNDI,RMI,Socket,LDAP)
Struts(validation、Action、ActionForm。。。)
技术的演进:(CGI—ASP—Servlet—JSP—Framework)
CGI应该说是Web应用的祖先了,它实现了用户浏览器与服务器的交互。这是个划时代的进步,但是它的开发太复杂。随后微软推出ASP技术,ASP使开发变得非常简单,这也使得ASP在一段时间内风靡全球。不久Sun也推出了Servlet(Sun的CGI解决方案)技术,但是Servlet要在Java代码中嵌入很多的HTML代码使得代码比较混乱,而且不便于维护,这样Sun又推出了JSP,JSP与Servlet恰恰相反是在HTML代码中嵌入很多Java代码。这点和ASP有点类似。但是都很混乱,逻辑和显示没有分开导致它们成为了不伦不类的东西,而且很难调试,MVC模式的引入使这种局面有所改观,JSP开发者可以选择Mode1和Mode2的方式进行开发,能够勉强的使业务逻辑和显示的分离,但这样并不完善,混乱依旧,WEB框架在这种背景下诞生了,WEB框架(例如Struts)大多是基于MVC设计模式,他们定义了自己的一套规范,分别把业务逻辑,显示和流程控制分开,开发者只要按照他们的规范进行开发,就可以开发出低耦合,高维护的WEB应用程序
名词解释:
Model 1:以JSP为中心的开发模型。
当然这种开发模式在进行快速和小规模的应用开发时,是有非常大的优势,但是从工程化的角度考虑,它也有一些不足之处:应用的实现一般是基于过程的,一组JSP页面实现一个业务流程,如果要进行改动,必须在多个地方进行修改。这样非常不利于应用扩展和更新。
由于应用不是建立在模块上的, 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离。所以非常不利于应用系统业务的重用和改动。
Model 2 :表示的是基于MVC模式的框架。
JSTL :JSP 标准标记库(JSTL)是 JSP 1.2 定制标记库集,这些标记库实现大量服务器端 Java 应用程序常用的基本功能。通过为典型表示层任务(如数据格式化和迭代或条件内容)提供标准实现,JSTL 使 JSP 作者可以专注于特定于应用程序的开发需求,而不是为这些通用操作“另起炉灶”。
什么是JavaServer Faces(JSF)
是一个使用者界面框架(UIFramework),专门用来开发以Java为基础的Web Application的展示层部分,用此框架可使Web Appliction在UI的开发上更具扩充性、维护性。
JavaServer Faces目的
Ø 便于开发、加速开发
Ø 开发角色分离
Ø Web UI标准化、组件化
JSF相关知识介绍
Ø 现今所遇到的开发挑战
Ø 怎样分离开发角色
Ø JSF要解决的问题
现今所遇到的开发挑战:
1,用户界面(User Interface) 与业务逻辑(Model)无法完全分离。
2,就算使用表达式语言(Expression Language) 和标签库(Tag Library)仍然无法完全分离
3,没有实现真正的MVC设计模式(MVC Design Pattern),Struts也一样。
4,View层应该能产生事件(Event),使系统唤起事件管理者(Event Handler),开发者再利用Event Handler进行逻辑处理
5,种类繁多的客户端
目前Framework太多,大多假设客户使用的是浏览器,且使用html作为标记语言
开发角色的分离:
Ø JSF是真正的MVC
MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
我对MVC的理解:
M:实现业务逻辑
C:选择业务逻辑
V:显示处理结果
Ø 开发角色的分离 —View的开发
View的开发可以由网页开发人员和组件开发者来完成,网页开发者负责完成页面的设计,组件开发者可以开发应用所需要的组件(如:菜单和树等组件)供应用程序开发者使用,而且也可以用别人已经开发好的组件,这样在以后随着组件越来越多、越来越丰富会使得在View这层的开发更简单,更具扩展性。
Ø 开发角色的分离 -Model的开发
由应用程序开发者负责。
Ø 开发角色的分离 —Controller的设置
由应用程序开发者负责。
JSF要解决的问题:
Ø JSF要解决的问题―便于开发
1,开发工具机密结合
Project Rave、Sun ONE Studio、jBuilder、Eclipse等
2,正的MVC-开发角色分离
JSF网页开发者(View设计)
应用程序开发者(负责Mode和Controller)
组件开发者(扩充现有的组件或开发新的组件)
工具厂商
Ø JSF要解决的问题—事件驱动
JSF组件的解释:每个页面包括一些 JSF 组件用来描述 WEB 控件,如表单、输入框、按钮等等(可以理解为小到一个按钮或一个输入框是一个组件,大到一个树形菜单或一个Form也是一个组件),组件可以嵌入另一个组件中,正如输入框可以在表单中。每个 JSP 页面就这样表示为组件树。
JSF规定了2种事件处理方式,一种是ActionListener另一种是ValueChangeListener。
如果是一个按钮就可以注册为ActionListener,如果是一个输入框或复选框等等就可以注册为ValueChangeListener,当鼠标单击按钮时就会触发ActionListener事件,当你在输入框中改变一个值提交后就会触发ValueChangeListener事件。
JSF要解决的问题—支持不同的客户端
名次解释:
ØJSF Core Library
1,基本程序运作(生命周期控制、事件处理)
2,UI组件架构(UI Component Library)
ØRender
将Server端的UI组件转换成任何一种浏览器都可解释执行的语言
ØRenderKit
一堆Render的组合
JSF具备以下特点
1,能够与开发工具搭配使开发更方便
2,不局限与一种浏览器
3,不一定只能和JSP搭配
JSF与Struts的比较
相同之处:
1,都采用标签库(taglib)来处理表示层。
2,二者都采用了JavaBean来保存jsp页面上的数据。(struts中就是FormBean;JSF中就是back bean)
3,都采用bean作为控制层。(Struts是ActionBean;JSF是Backing Bean)
4,都采用xml配置文件来处理页面导航等问题,增加了系统的灵活性。
5,都采用资源文件来处理国际化和本地化的问题
不同之处:
1,二者的侧重点不同。Struts侧重于控制层而JSF侧重于表示层。
2,控制层:
Struts通过Form的Action来提交请求,通过ActionServlet来分发请求,最后由ActionBean来处理请求。
JSF采用事件模式处理用户提交的请求,JSF实现了事件监听器来监测事件,例如当用户单击了一个按钮就会触发一个按钮单击事件,还有valuechange事件监听器来监测数值改变的事件等。