JSF初了解

来源:互联网 发布:单机版笔记软件 编辑:程序博客网 时间:2024/06/08 19:46

   最近在学习JSF,找了一些资料,做个小demo,下面总结一下:

   一、概念

   JSF是Sun继JSP技术之后推出的又一项Java Web应用开发技术。Java语言发明后,得益于其天生的平台无关性,迅速在软件开发者中获得广泛认可。此后,随着Internet技术在各个应用领域的普及和推广,Java Web开发的需求日渐强劲,Sun于是推出JSP来回应开发者对新技术的呼声。JSP取得了巨大的成功,但也暴露出很多技术弱点。例如,在JSP中表示层和业务层没有严格区分,JSP网页上HTML标签和Java代码混杂,使得大型Java Web应用的开发和维护十分困难,与现代组件化的编程思想格格不入。
   JSP的种种不足,催生了大量形形色色的Java Web框架,Struts就是其中的佼佼者。Struts在Java Web编程中引入了MVC的概念,实现了表示层和业务层的分离,在很长一段时间内,成为最受欢迎的Java Web框架。不过,Struts在Java Web用户界面的设计方面没有太大的创新,仍然需要直接操作JSP标签,因此,Sun决定制订一项新的技术标准,来支持组件化的UI设计,以弥补JSP技术的不足。这就是JavaServer Faces规范,简称JSF。

                              

   二、JSF进行Web开发的三大优势

   JSF优势之一:UI组件(UI-component) 
   UI组件(UI-component)一直是桌面程序的专利,Web程序中,虽然HTML定义了基本的UI标签,但要使这些UI标签像UI组件那样工作,还需要很多代码片断来处理数据及其表现形式,而且有效地组织这些代码片断使其协调一致也是一件繁琐的工作  。JSF的UI组件是真正意义上的UI组件,能极大地简化程序员的工作,例如,在页面上放置一个文本输入框,这个输入框立即具备了数据填充、界面更新、事件侦听、动作触发、有效性检查和类型转换的功能  。更为重要的是,程序员只需根据业务逻辑编写核心业务代码,JSF会保证代码在合适的时候被执行,完全不用考虑代码与代码之间该如何来配合  。
   JSF优势之二:事件驱动模式
   事件是面向对象方法的重要组成部分,对象之间通过事件进行沟通和交流,使得一个或多个对象能够对另一个对象的行为作出响应,共同合作去完成一项业务逻辑  。通常,编写Web程序时,程序员要为对象之间的沟通设计机制,编写代码  。虽然沟通的内容属于业务逻辑,但沟通的机制显然与业务没有太大关系,程序员因此为业务逻辑之外的功能浪费了时间  。JSF改变了这种状况  ,JSF的事件和侦听模式与大家熟悉的Javabean的事件模式类似,有Java基础的程序员并不需要学习任何新的东西  。JSF的UI组件可以产生事件,例如,当页面上一个文本输入框的内容被修改时,会发出一个“值改变事件”  。另一个对象如果对“值改变事件”感兴趣,只需注册为该对象的侦听者,并编写处理例程,即可命令JSF在事件发生时自动调用处理例程  。JSF做了所有该做的事,留给程序员的只有业务逻辑代码的编写  。
   JSF优势之三:用户界面到业务逻辑的直接映射
   举个例子,表单提交是Web编程最常见的任务,也是最复杂的任务之一  。当用户在网页上点击“确定”按钮时,浏览器将生成一个HTTP请求,发往服务器端的某个Servlet,执行该Servlet的service方法  。在service方法中,HTTP请求需要经历解码、类型转换、有效性验证、状态保存、数据更新等环节,处理这些环节的所有细节,对程序员来说是沉重的负担  。在JSF下,这些工作的很大一部分都由框架承担了,在程序员看来,这个过程是透明的,用户界面端的HTTP请求可以直接映射到后端的一个事件处理例程,JSF起到了承前启后的作用  。

   三、demo实现

   JSF的开发工具可以使用NetBeans、eclipse、myeclipse等,这里我们使用的是myeclipse。可以自己手动安装jdk,并做好环境配置等工作;也可以使用myeclipse自带的jdk,这里使用自带jdk。

   JSF是Java Web应用的用户界面(User Interface,UI)框架。所以这里主要是讲一下JSF框架搭建实例。具体步骤如下:

   1、新建一个web project项目

         

   2、引入相关jar包

   要使用JSF,首先您要先取得JavaServer Faces参考实现(JavaServer Faces Reference Implementation),请至 JSF 官方网站的 下载区 下载参考实现,在下载压缩文件并解压缩之后,将其 lib 目录下的 jar 文件复制至您的Web应用程序的/WEB-INF/lib目录下,另外您还需要 jstl.jar 与 standard.jar 文件,这些文件您可以在 sample 目录下,解压缩当中的一个范例,在它的/WEB-INF/lib目录下找到,将之一并复制至您的Web应用程序的/WEB-INF/lib目录下,您总共需要以下的文件:

          

   3、配置Web应用程序的web.xml,使用JSF时,所有的请求都通过FacesServlet来处理,您可以如下定义:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <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></web-app>
   在上面的定义中,我们将所有.faces的请求交由FaceServlet来处理,FaceServlet会唤起相对的.jsp网页,例如请求是/index.faces的话,则实际上会唤起/index.jsp网页,完成以上的配置,您就可以开始使用JSF了。
   下面就可以开始编写程序了,我们将设计一个简单的登录程序,使用者提交名称,之后由程序显示使用者名称及欢迎信息。

   4、我们编写一个简单的javaBean,这个Bean将存贮使用者的名称

package login;public class NameBean {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}
   5、配置faces-config.xml

   接下来设计页面流程,我们将先显示一个登入网页/pages/index.jsp,使用者填入名称并提交表单,之后在/pages/welcome.jsp中显示Bean中的使用者名称
为了让JSF知道我们所设计的Bean以及页面流程,我们定义一个/WEB-INF/faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.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>login.UserBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean></faces-config>
   说明:在<navigation-rule>中,我们定义了页面流程,当请求来自<from-view-id>中指定的页面,并且指定了<navigation-case>中的<from-outcome>为login时,则会将请求导向至<to-view-id>所指定的页面。在<managed-bean>中我们可以统一管理我们的Bean,我们设定Bean对象的存活范围是session,也就是使用者开启浏览器与程序互动过程中都存活。

   6、编写index.jsp页面:可以使用的Bean名称,即<managed-bean-name>中设定的名称,以及上面所定义的页面流程:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%><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>
   说明:我们使用了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页面。

   7、设计welcome.jsp页面:不必理会表单传送之后要作些什么,只要设计好欢迎页面就好了。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%><html><head><title>第一个JSF程序</title></head><body><f:view><h:outputText value="#{user.name}" /> 您好!<h3>欢迎使用 JavaServer Faces!</h3></f:view></body></html>
   说明:这个页面没什么需要解释的了,如您所看到的,在网页上没有程序逻辑,网页设计人员所作的就是遵照页面流程,使用相关名称取出数据,而不用担心实际上程序是如何运行的。

   所有代码编写完成,项目结构:

     

   8、将项目添加到tomcat中启动,访问:http://localhost:8080/JSFLogin/pages/index.faces,运行效果如下:

         

   输入自己的名字,单击进入,成功跳转到welcome.jsp页面:

      

   【小结】

   总之,JSF是一项非常优秀的Java Web表示层框架技术,其引入的UI组件模型和事件驱动模式,使得Java Web应用的开发极大地简化了。而且,由于JSF有着高度抽象的、非常灵活的技术架构,未来其应用范围必将扩展到更多的领域。

0 0