您的位置:首页 > 编程语言 > Java开发

【JavaEE】The Introduce of 'JSF'

2017-05-01 08:59 323 查看
一、是什么?

       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/j2ee http://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就不错。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: