JSF入門

1. 簡介

  • JSF技術是Sun公司在2004年發布的用于開發Web應用的框架。當前版本是2.2,由JSR344規范定義。它是Java EE 7推薦的Web標準框架。Mojarra(https://javaserverfaces.java.net/)是Oracle官方采用的JSF的參考實現,其他的參考實現還有Apache基金的MyFaces(http://http://myfaces.apache.org/)。
  • 受到Sturts、Tapestry等開源框架的影響,JSF是采用了MVC架構。
  • 受到Swing組件模型的啟發,JSF使得開發人員從組件、事件、模型的角度開發web應用,而不用再管http請求和響應等背后的事情。

2. Hello JSF

  • 環境:JDK7 or JDK8 + Netbeans 8 + Glassfish 4
  • 開發過程:
    • 新建Java Web項目,選擇Web應用程序
    • 輸入項目名稱hello-jsf
    • 修改上下文路徑為hellojsf
    • 選擇JavaServer Faces框架,然后點擊下面的配置標簽,確認使用的頁面語言為Facelets
    • 點擊完成
    • 右擊hello-jsf項目,選擇運行,Netbeans會自動啟動Glassfish服務器并部署項目,啟動完畢后會自動打開瀏覽器,并顯示Hello from Facelets,該頁面的地址為localhost:8080/hellojsf
  • 添加功能
    • 將index.xhtml中的Hello from Facelets修改為Hello #{user.name}
    • 創建User類,代碼如下:
    • package teaching.jsf;import javax.annotation.PreDestroy;
      import javax.enterprise.context.RequestScoped;
      import javax.inject.Named;@Named //等價于@Named("user")
      @RequestScoped
      public class User {private String name = "JSF";public String getName() {return name;}
      }

      ?

    • ?保存代碼后,Glassfish會對項目進行增量部署,或者你也可以再次運行項目。

    • 打開瀏覽器,輸入localhost:8080/hellojsf,你將可以看到:Hello JSF
  • 代碼解釋
    • #{user.name}是一個EL表達式,用于或取user bean的name屬性。
    • User類是一個CDI bean,它具備了CDI bean的一些特征:
      • Name為user,用來匹配頁面中出現的EL表達式,如#{user.name}。默認情況下,Name為bean類的首字母小寫后對應的名字,也可以通過@Named("myUser")來指定,這樣頁面中的EL表達式就要寫成#{myUser.name}。
      • Scope為RequestScoped,表示服務器端的Web容器會在接收到http請求后,根據#{user.name}創建一個User實例,獲取其name屬性的值,生成html頁面并發出http響應,然后銷毀該user實例。
  • 項目配置文件
    • web.xml: 此項目的部署文件。為了使用JSF,必須聲明一個類型為javax.faces.webapp.FacesServlet的Servlet,具體代碼請參見web.xml。
      • 注意Faces Servlet的url-pattern為/faces/*,這樣FacesServlet只接收來自匹配/faces/*的頁面請求,也可以替換為*.xhtml、*.jsf或其他模式,但不能為/*或*。另外,faces只是個前綴,并不是物理文件夾。例如,在訪問根據目錄下的index.xhtml頁面時,其對應的url為http://.../hellojsf/faces/index.xhtml,而不是http://.../hellojsf/index.xhtml。
      • 在web.xml中,還可以指定一個PROJECT_STAGE參數,表示你當前項目的狀態。如果為Development,當出現錯誤時,JSF為顯示更加詳細的調試信息。當項目真正部署時,可以將此參數改為Production。
    • glassfish-web.xml: 定義與應用服務器相關的一些參數。在本例中,我們通過<context-root>指定項目根目錄的名稱。此文件由Netbeans自動生成,一般情況下不用修改。

3. 總結

  • 通過例1,我們可以知道JSF的工作原理:
    • 在服務器啟動時,會啟動一個Faces Servlet用來攔截用戶請求。
    • 當我們請求index.xhtml頁面時,相應的Http請求就會被FacesServlet所攔截,它會對此請求進行若干處理,其中一步就是創建一個User實例,并獲取其name屬性的值。處理結束后,生成對應的html頁面,返回給客戶端。然后銷毀此User實例,因為其Scope為RequestScoped。當收到Http請求時被創建,當發送Http響應后被銷毀,這就是User對象的生命周期。
    • 客戶端(瀏覽器)接受由服務器端返回的Http響應并顯示。
  • JSF是一個采用MVC架構的框架。在例1中,index.xhtml充當V的角色,FacesServlet充當C的角色,而User則充當M的角色。這三種角色劃分得非常清楚,沒有一點耦合。

?

轉載于:https://www.cnblogs.com/tcurjgc/p/JSF-intro-1.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nyist 488 素數環

有一個整數n&#xff0c;把從1到n的數字無重復的排列成環&#xff0c;且使每相鄰兩個數&#xff08;包括首尾&#xff09;的和都為素數&#xff0c;稱為素數環。 為了簡便起見&#xff0c;我們規定每個素數環都從1開始。例如&#xff0c;下圖就是6的一個素數環。 這題在進行判斷…

Android System分區大小異常

平臺&#xff1a;Freescale &#xff0f; Android 4.2.2 問題描述&#xff1a; 用 df 命令&#xff0c;看到/system分區大小275M。 用 busybox fdisk -l /dev/block/mmcblk0p5&#xff0c;看到 536M。 Freescale的刷機工具是Mfgtool&#xff0c;分區的動作在mksdcard-android.s…

python數據庫連接池使用

在轉載|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0這一篇中&#xff0c;我使用了方法一。接下來試試方法三&#xff0c;方法三和方法二其實意義差不多&#xff0c;但是對于數據庫的連接并不是交由程序員管理而是交由連接池管理了&#xff0…

.Net入門-部署問題

學習一門新的語言難免會遇到各種各樣的問題&#xff0c;總結一下。 測試環境&#xff1a;windows2008serverIIS7 開發環境: vs2010 問題1&#xff1a;"Unrecognized attribute targetFramework. Note that attribute names are case-sensitive. " 分析&#xff1a; 開…

pymysql.err.OperationalError: (1203, “User root already has more than ‘max_user_connections‘ active

max_connections 是指MySQL服務器的最大連接數。即所有用戶最大連接數的和。 max_user_connections 是指MySQL中單個用戶的最大連接數。 這里說明當前用戶的連接數大于了單個用戶的最大連接數&#xff0c;需要擴大連接數&#xff1a; mysql> show variables like %connect%…

北京行——JSP入門與Servlet精通

Servlet技術 用來動態生成 網頁數據資源Servlet生成HTML 頁面數據時&#xff0c;所有內容都是通過 response.getWriter response.getOutputStream 向瀏覽器輸出的 <html> <head> </head> <body> Hello </body></html> 用Servlet 輸出流打印…

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

可以參考一波&#xff1a;https://stackoverflow.com/questions/16573332/jsondecodeerror-expecting-value-line-1-column-1-char-0 1、json格式不對引起的錯誤 加上if json_rep.content:判空操作 json_rep requests.post(url monitor_url, headers monitor_header,json …

WINDOWS系統Eclipse+NDK+Android + OpenCv

WINDOWS系統EclipseNDKAndroid OpenCv 參考文檔博客 1 NDK環境搭建 http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html 2 官方文檔 Android.mk與Application.mk如何編寫&#xff0c;OpenCV庫如何調用 http://docs.opencv.org/trunk/doc/tutorials/introduction…

ural 1910. Titan Ruins: Hidden Entrance(Titan Ruins系列題目)

這是Titan Ruins系列第一道題&#xff0c;以后慢慢更新。 赤裸裸滴閱讀理解題&#xff0c;大意就是找到三個連在一起的數&#xff0c;使其之和最大&#xff0c;輸出的第一個數是這三個數的和&#xff0c;第二個數是中間那個數所在的位置。水題一道&#xff0c;很簡單。 1 #incl…

python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e

對于問題&#xff1a;python OSError: [Errno 24] Too many open files 原因:超出了進程同一時間最多可開啟的文件數. 解決方案P: 使用ulimit -n查看進程同一時間最多可開啟的文件數 mac默認是256&#xff0c;linux是1024 修改 sudo vim /etc/security/limits.conf 這個文件的最…

Android 之視頻監控

Android 視頻監控已經有示例了&#xff0c;如http://www.open-open.com/lib/view/open1346400423609.html完全可以實現簡單的監控功能。但是&#xff0c;如果想要在手機上監控另外一個手機就需要做一些改動了。 其中&#xff0c;手機A實現的功能和上文中的一樣&#xff0c;主要…

Max retries exceeded with url 解決方案

目錄問題解決方案keep alive 與close使用場景問題解決方案 在上一篇問題解決中&#xff1a;python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host‘‘, port80): Max retries e 有提到修改本地進程最大文件數來避免Max retries exceeded with url 報錯&…

正確理解JavaScript

過去幾年我注意到技術圈一個很奇怪的現象&#xff0c;有太多程序員將那些他們只是有過非常淺顯的了解&#xff0c; 但其實根本就不懂的技術寫到他們的簡歷中&#xff0c;這個現象幾乎每種語言都有&#xff0c;但這其中最嚴重的就要數javascript了。 你不知道你不懂 出現這種狀況…

醫療機構遠程視頻監控集中管理,貝銳蒲公英提供一站式解決方案

上海某企業專業致力于醫療軟件、家居智能化研發、設計、銷售、集成及實施&#xff0c;企業主營業務之一為醫療軟件&#xff0c;涉及PACS/RIS/WEB/HIS、示教系統等方面的醫院信息化建設。 在實際應用、部署過程中&#xff0c;需要實現各地區分院與總院間的數據庫互相訪問、視頻數…

py腳本:linux系統下定時清理文件

linux清空文件內容的三種方法&#xff1a; 1.使用vi/vim命令打開文件后&#xff0c;輸入"%d"清空&#xff0c;后保存即可。但當文件內容較大時&#xff0c;處理較慢&#xff0c;命令如下&#xff1a; vim file_name :%d :wq2.使用cat命令情況&#xff0c;命令如下&a…

Process類:啟動和停止本地系統進程

Process.Start 方法 (String, String) 通過指定應用程序的名稱和一組命令行參數來啟動一個進程資源。&#xff08;并將該資源與新的 Process 組件相關聯&#xff09; 如果沒有啟動資源&#xff0c;則返回null Process.Start("d:\\0.jpg"); Process.StartInfo 屬性 獲…

NYOJ2括號配對問題

括號配對是最基本的棧的問題&#xff0c;它是棧入門的經典題目&#xff0c;思路是&#xff0c;如果是左括號直接進棧&#xff0c;如果是右括號&#xff0c;這時就要比較棧頂的元素與他是否匹配&#xff0c;如果匹配則出棧&#xff0c;否則進棧&#xff0c;下面是代碼的實現&…

SVC編碼簡單了解

基本概念 可伸縮視頻編碼 SVC&#xff08;Scalable Video Coding&#xff09; 作為 H.264 標準的一個擴展,可用于生成不同幀率、分辨率和質量等可分層的視頻流。 基本層編碼最低層的時域、空域和質量流&#xff1b; 增強層以基本層作為起始點&#xff0c;對附加信息進行補充&a…

程序集系統重構機房收費系統——起步

這段間時一直在查找程序集系統之類的問題,在現正好有機會和大家同享一下. 開始機房收費系統重構也半個月過去了。但看自己的系統連一個簡略的登錄還沒有實現。自己不免有些羞愧了。近來自己的習學態狀總的說來還是不錯的。但是由于自己對來原的識知把握的欠好所以致導了自己不知…

ie下的透明度,用濾鏡filter:alpha

.box{ width:100px; height:100px; background-color:#000; filter:alpha(Opacity50); opacity: 0.5; } 轉載于:https://www.cnblogs.com/liujinyu/p/3931087.html