A Web Module That Uses JavaServer Faces Technology: The hello1 Example

1、JSF

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,它是輕量級容器管理對象(PO​​JO)。在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)的過程。

2、具體實例

這個實例的下載連接以下: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文件註釋只是我的學習所用,直接保存後,當項目運行時會報錯的,須要去掉註釋便可正確運行項目。

相關文章
相關標籤/搜索