【JavaEE】The Introduce of 'JSF'

来源:互联网 发布:淘宝联盟分享赚互刷 编辑:程序博客网 时间:2024/05/17 23:14

一、是什么?

       1、定义

       JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。“企业开发人员”和 Web 设计人员将发现 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而“系统开发人员”将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。JSF 还通过将良好构建的模型-视图-控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。最后,由于 JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完全能够为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。

       

       2、官网:

       http://jsfcentral.com/     https://javaserverfaces.java.net/


       3、版本:
       JSF 2.2 (2013-04-16) — JSF 2.2 introduced new concepts like stateless views, page flow and the ability to create portable resource contracts.
       JSF 2.1 (2010-10-22) — Maintenance release of 2.0. Only very minor amount of spec changes.
       JSF 2.0 (2009-06-28) — Major release for ease of use, enhanced functionality, and performance. Coincides with Java EE 6.
       JSF 1.2 (2006-05-11) — 核心系统和API改进. Coincides with Java EE 5. Initial adoption into Java EE.
       JSF 1.1 (2004-05-27) — 错误修复,没有更改规范.
       JSF 1.0 (2004-03-11) — 初始规范发布。


       4、组成

        一组JSP页面
        一组后台bean(为在一个页面上的UI组件定义的属性和函数的JavaBean组件)
        应用程序配置资源文件(定义页面导航规则、配置bean和其它的自定对象,如自定义组件)
        部署描述文件(web.xml)
        一组由应用程序开发者创建的自定义对象(有可能)
        一些可能包含自定义组件、约束、转换器或者监听器的对象
        为在页面中表现自定义对象的一组自定义tag

       

        5、主要组件(参考《JSF入门》中文版,下面有链接)

        为了展现UI组件和管理它们的状态,操作事件、服务器端的确认和数据变换;定义页面导航;支持国际化和可访问性;提供对所有特性的可扩展性的API为了在JSP中表示UI组件和拍发组件给服务器端对象的两个JSP自定义tag库。

二、优缺点?

     1、优点

    (1)引入了基于组件和事件驱动的开发模式,使开发人员可以使用类似于处理传统界面的方式来开发Web应用程序(有之前我们敲VB的感觉)。提供了行为与表达的清晰分离。 不用特别的脚本语言或者标记语言来连接UI组件和Web层。JSF技术API被直接分层在Servlet API的顶端。 技术为管理组件状态提供一个丰富的体系机构、处理组件数据、确认用户输入和操作事件。

    (2)JSF确实与后台紧耦合,通过页面的表达式(EL)来访问后台bean的属性与方法。但可以使用Spring bean,可以使用CDI bean,可以使用JSF Managed bean。

    (3)PrimeFaces是一个提高JSF Web应用程序开发效率的开源类库,shoucase  https://www.primefaces.org/showcase/  https://www.primefaces.org/showcase/  https://www.primefaces.org/showcase/ 

          

      2、缺点

    (1)JSF是一套完整的框架,不仅仅是UI,它没有实现前后端分离,恰恰相反,是耦合在一起、
    (2)在JavaEE7中 JSF版本是2.2,它忆放弃使用JSP做为表现层,而是使用了Facelets做为表现层,也是一种基于模板技术的表现层解决方案。
    (3)http://www.aiyiweb.com/javasript/15240 (吐槽,做了JSF很久的人的吐槽)


三、对比JSP和Struts2?

     1、对比JSF和JSP
     (1)JSP是一种构建动态Web应用的组件技术;
     (2)JSF是一种构建动态Web应用的框架技术。

        2、对比Struts2和JSF

        Struts 2和JSF都属于表现层框架,但是它们的框架性质不同,Struts 2框架只是一个单纯的MVC设计模式实现框架,而JSF本质上是一种事件驱动型的组件模型。JSF同微软的ASP.NET更加相似。JSF的应用,使开发Web应用程序同传统的C/S设计(例如Visual Basic模式)更加相似,可以处理Web页面中的单击按钮事件或者是选择下拉框事件等,因为JSF的核心是以事件驱动的。使用JSF开发应用,开发者甚至可以不用去关心传统的Web开发细节(如HTTP),页面的内容或者是操作可以直接对应到服务器端的JavaBean实现类,JSF框架自动将该交互封装在一起。而Struts 2框架则是一个非常传统的MVC设计模式,但是该框架被广大的程序员所熟悉和使用,Struts 2整合JSF,可以使Web开发模式为开发者所接受,同时又可以利用JSF完整的封装性能。


四、一个Demo

      1、在eclipse中新建web项目

      2、在Web应用程序的/WEB-INF/lib目录下,添加以下jar文件:

* jsf-impl.jar* jsf-api.jar* commons-digester.jar* commons-collections.jar* commons-beanutils.jar* jstl.jar* standard.jar
       3、配置web应用程序的web.xml文件,使用JSF时,所有请求通过FacesServlet来处理,web.xml定义如下:

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><description>JSF Demo</description><display-name>JSF Demo</display-name><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.faces</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list></web-app>
       在上面的定义中,我们将所有.faces 的请求交由 FaceServlet 来处理,FaceServlet 会唤起相对的.jsp 网页,例如请求是/index.faces 的话,则实际上会唤起/index.jsp 网页,完成以上的配置,就可以开始使用 JSF 了。
       此时,完成了项目的创建,web.xml的配置,接下来就是开发程序了,设计一个简单的登录程序,使用者提交名称,之后由程序显示使用者名称以及欢迎信息。

       1、编写一个JavaBean 

package onlyfun.caterpillar;public class UserBean {private String name;public void setName(String name) {this.name = name;}public String getName() {return name;}}
       这个Bean将存贮使用者的名称,编译好之后放置在/WEB-INF/classes下

       2、设计页面流程

      登入网页/pages/index.jsp ,用于使用者填入名称并提交表单之后在/pages/welcome.jsp中显示Bean中的使用者名称与欢迎信息。同时为了让JSF知道Bean以及页面流程,定义一个/WEB-INF/faces-config.xml:

      (1)faces-config.xml

<?xml version="1.0"?><!DOCTYPE faces-config PUBLIC"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN""http://java.sun.com/dtd/web-facesconfig_1_0.dtd"><faces-config><navigation-rule><from-view-id>/pages/index.jsp</from-view-id><navigation-case><from-outcome>login</from-outcome><to-view-id>/pages/welcome.jsp</to-view-id></navigation-case></navigation-rule><managed-bean><managed-bean-name>user</managed-bean-name><managed-bean-class>onlyfun.caterpillar.UserBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean></faces-config>
        在<navigation-rule>中,我们定义了页面流程,当请求来自<from-viewid>中指定的页面,并且指定了<navigation-case>中的<from-outcome>为login时,则会将请求导向至<to-view-id>所指定的页面。在<managed-bean>中我们可以统一管理我们的Bean, 我们设定Bean对象的存活范围是session,也就是使用者开启浏览器与程序互动过程中都存活。接下来要告诉网页设计人员的信息是,他们可以使用的Bean名称,即<managed-bean-name>中设定的名称,以及上面所定义的页面流程。
       (2)index.jsp

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@page contentType="text/html;charset=GB2312"%><html><head><title>第一个 JSF 程序</title></head><body><f:view><h:form><h3>请输入您的名称</h3>名称: <h:inputText value="#{user.name}"/><p><h:commandButton value="送出" action="login"/></h:form></f:view></body></html>
        在<html>之前使用了JSF的core与html标签库,core是有关于UI组件的处理,而html则是有关于HTML的进阶标签。
        <f:view>与<html>有类似的作用,当您要开始使用JSF组件时,这些组件一定要在<f: view>与</f:view>之间,就如同使用HTML时,所有的标签一定要在<html>与< /html>之间。
        html标签库中几乎都是与HTML标签相关的进阶标签, <h:form>会产生一个表单,我们使用<h: inputText>来显示user这个Bean对象的name属性,而<h:commandButton>会产生一个提交按钮,我们在action属性中指定将根据之前定义的login页面流程中前往welcome.jsp页面。

       (3)welcome.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@page contentType="text/html;charset=GB2312"%><html><head><title>第一个 JSF 程序</title></head><body><f:view><h:outputText value="#{user.name}"/> 您好!<h3>欢迎使用 JavaServer Faces!</h3></f:view></body></html>
        之后,通过配置你的tomcat,就可以进行访问了,注意,url的末尾,不是index.jsp,而是index.faces。

         Addition:在html页面中,使用了JSF的EL表达式(Expression Language),这里需要区别JSF的EL表达式以及JSP的EL表达式:

#{expression} //JSF的EL
${expression} //JSP的EL


四、附注

       1、入门教程: 《JSF入门》简体中文版.pdf

       2、最新版本的javadoc API (JavaServer Faces API 2.2):https://javaserverfaces.java.net/nonav/docs/2.2/javadocs/index.html   

     3、博客学习: http://blog.csdn.net/martinchong/article/details/53844185 

       这门技术,在官网上的资料比较晦涩,想要学习的网友,可以多去论坛,ITeye就不错。



0 0
原创粉丝点击