JavaServer Faces技術是用於構建基於Java技術的Web應用程序的服務器端組件框架。html
JavaServer Faces技術包括如下內容:java
用於表示組件和管理其狀態的API; 處理事件,服務器端驗證和數據轉換; 定義頁面導航; 支持國際化和可獲取性; 併爲全部這些功能提供可擴展性git
標記庫,用於向Web頁面添加組件以及將組件鏈接到服務器端對象github
JavaServer Faces技術提供了定義良好的編程模型和各類標記庫。標記庫包含實現組件標記的標記處理程序。這些功能顯着減輕了使用服務器端用戶界面(UI)構建和維護Web應用程序的負擔。只需不多的努力,您就能夠完成如下任務。web
建立一個網頁。編程
經過添加組件標記將組件拖放到網頁上。瀏覽器
將頁面上的組件綁定到服務器端數據。服務器
將組件生成的事件鏈接到服務器端應用程序代碼。session
保存並恢復超出服務器請求生命週期的應用程序狀態。app
經過自定義重用和擴展組件。
JavaServer Faces應用程序提供的功能相似於任何其餘Java Web應用程序。典型的JavaServer Faces應用程序包括如下部分。
一組網頁,其中佈置了組件。
用於向網頁添加組件的一組標記。
一組託管bean,它是輕量級容器管理對象(POJO)。在JavaServer Faces應用程序中,託管bean用做支持bean,它定義頁面上UI組件的屬性和功能。
Web部署描述符(web.xml
文件)。
(可選)一個或多個應用程序配置資源文件,例如faces-config.xml
文件,可用於定義頁面導航規則以及配置Bean和其餘自定義對象(如自定義組件)。
(可選)一組自定義對象,能夠包括應用程序開發人員建立的自定義組件,驗證程序,轉換程序或偵聽程序。
(可選)一組自定義標記,用於表示頁面上的自定義對象。
下圖顯示了典型JavaServer Faces應用程序中客戶端和服務器之間的交互。響應客戶端請求,Web頁面由實現JavaServer Faces技術的Web容器呈現。
該Web頁面myfacelet.xhtml
是使用JavaServer Faces組件標記構建的。組件標籤用於向組件添加組件view
(myView
在圖中表示),這是頁面的服務器端表示。除了組件以外,網頁還能夠引用對象,例如:
在組件上註冊的任何事件偵聽器,驗證器和轉換器
JavaBeans組件,用於捕獲數據並處理組件的特定於應用程序的功能
根據客戶端的請求,視圖將呈現爲響應。渲染是基於服務器端視圖,Web容器生成可由客戶端(例如瀏覽器)讀取的輸出(例如HTML或XHTML)的過程。
這個實例的下載連接以下:https://github.com/javaee/tutorial-examples(能夠指網頁下載,或者使用git下載:git clone https://github.com/javaee/tutorial-examples)
關於如何使用maven打包並部署到glassfish服務器中去,參見博客《Maven+glassfish基礎搭建與使用》,此篇博客主要是介紹JSF技術與其中一個具體實例hello1中的hello.java文件和web.xml文件
下載並解壓tutorial-examples-master,找到目錄tutorial-examples-master\web\jsf\hello1\src\main\java\javaeetutorial\hello1下的hello.java文件。我的閱讀源碼的理解,以註釋的形式展出。
hello.java
1 /** 2 * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. 3 * 4 * You may not modify, use, reproduce, or distribute this software except in 5 * compliance with the terms of the License at: 6 * https://github.com/javaee/tutorial-examples/LICENSE.txt 7 */ 8 package javaeetutorial.hello1; //這是一個javaee教程的一個實例hello1包 9 10 11 import javax.enterprise.context.RequestScoped;//導入註釋類型RequestScoped包 12 import javax.inject.Named;//導入依賴注入Named包 13 14 @Named 15 @RequestScoped 16 public class Hello { 17 18 private String name; //私有變量name 19 20 public Hello() { 21 } 22 23 public String getName() { 24 return name; 25 }//獲取變量name的值 26 27 public void setName(String user_name) { 28 this.name = user_name; //給name賦值 29 } 30 }
tutorial-examples-master\web\jsf\hello1\src\main\webapp\WEB-INF目錄下的
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> <!--xml的版本信息和編碼方式--> 2 <web-app version="3.1" <!--webapp的版本信息--> 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" <!--使用符合XML規範的XHTML文檔--> 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <!--使用xsi做爲前綴的Namespace--> 5 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <!--定義了XML Namespace和對應的XSD(Xml Schema Definition)文檔的位置的關係。--> 6 <context-param> <!--上下文參數--> 7 <param-name>javax.faces.PROJECT_STAGE</param-name><!--參數名--> 8 <param-value>Development</param-value><!--參數值--> 9 </context-param> 10 <servlet> 11 <servlet-name>Faces Servlet</servlet-name> <!--servlet名--> 12 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class><!--servlet所從屬的類--> 13 <load-on-startup>1</load-on-startup> <!--加載的第一步--> 14 </servlet> 15 <servlet-mapping> <!--servl映射--> 16 <servlet-name>Faces Servlet</servlet-name><!--映射名--> 17 <url-pattern>*.xhtml</url-pattern><!--映射路徑--> 18 </servlet-mapping> 19 <session-config><!--會話配置信息--> 20 <session-timeout><!--會話刷新時間30ms--> 21 30 22 </session-timeout> 23 </session-config> 24 <welcome-file-list><!--首頁文件列表--> 25 <welcome-file>index.xhtml</welcome-file><!--首頁展現的文件名--> 26 </welcome-file-list> 27 </web-app>
web.xml文件註釋只是我的學習所用,直接保存後,當項目運行時會報錯的,須要去掉註釋便可正確運行項目。