精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳細(xì)介紹JSF與Struts的異同

開發(fā) 后端
本文介紹的是JSF與Struts的異同,JSF與Struts屬于JAVA EE的誑街結(jié)構(gòu)。希望通過本文的介紹,能夠給你帶來幫助。

StrutsJSF/Tapestry都屬于表現(xiàn)層框架,這兩種分屬不同性質(zhì)的框架,后者是一種事件驅(qū)動(dòng)型的組件模型,而Struts只是單純的MVC模式框架,老外總是急吼吼說事件驅(qū)動(dòng)型就比MVC模式框架好,何以見得,我們下面進(jìn)行詳細(xì)分析比較一下到底是怎么回事?

首先事件是指從客戶端頁(yè)面(瀏覽器)由用戶操作觸發(fā)的事件,Struts使用Action來接受瀏覽器表單提交的事件,這里使用了Command模式,每個(gè)繼承Action的子類都必須實(shí)現(xiàn)一個(gè)方法execute。

在struts中,實(shí)際是一個(gè)表單Form對(duì)應(yīng)一個(gè)Action類(或DispatchAction),換一句話說:在Struts中實(shí)際是一個(gè)表單只能對(duì)應(yīng)一個(gè)事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。

struts重要的表單對(duì)象ActionForm是一種對(duì)象,它代表了一種應(yīng)用,這個(gè)對(duì)象中至少包含幾個(gè)字段,這些字段是Jsp頁(yè)面表單中的input字段,因?yàn)橐粋€(gè)表單對(duì)應(yīng)一個(gè)事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時(shí),也就是說,一個(gè)字段對(duì)應(yīng)一個(gè)事件時(shí),單純使用Struts就不太可能,當(dāng)然通過結(jié)合JavaScript也是可以轉(zhuǎn)彎實(shí)現(xiàn)的。

而這種情況使用JSF就可以方便實(shí)現(xiàn),

 

  1. <h:inputText id="userId" value="#{login.userId}">  
  2. <f:valueChangeListener type="logindemo.UserLoginChanged" />  
  3. </h:inputText> 

 

#{login.userId}表示從名為login的JavaBean的getUserId獲得的結(jié)果,這個(gè)功能使用struts也可以實(shí)現(xiàn),name="login" property="userId"

關(guān)鍵是第二行,這里表示如果userId的值改變并且確定提交后,將觸發(fā)調(diào)用類UserLoginChanged的processValueChanged(...)方法。

JSF可以為組件提供兩種事件:Value Changed和 Action. 前者我們已經(jīng)在上節(jié)見識(shí)過用處,后者就相當(dāng)于struts中表單提交Action機(jī)制,它的JSF寫法如下:

 

  1. <h:commandButton id="login" commandName="login">  
  2. <f:actionListener type=”logindemo.LoginActionListener” />  
  3. </h:commandButton> 

 

從代碼可以看出,這兩種事件是通過Listerner這樣觀察者模式貼在具體組件字段上的,而Struts此類事件是原始的一種表單提交Submit觸發(fā)機(jī)制。如果說前者比較語(yǔ)言化(編程語(yǔ)言習(xí)慣做法類似Swing編程);后者是屬于WEB化,因?yàn)樗莵碜訦tml表單,如果你起步是從Perl/PHP開始,反而容易接受Struts這種風(fēng)格。

基本配置

Struts和JSF都是一種框架,JSF必須需要兩種包JSF核心包、JSTL包(標(biāo)簽庫(kù)),此外,JSF還將使用到Apache項(xiàng)目的一些commons包,這些Apache包只要部署在你的服務(wù)器中既可。

JSF包下載地址:http://java.sun.com/j2ee/javaserverfaces/download.html選擇其中Reference Implementation。

JSTL包下載在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

所以,從JSF的驅(qū)動(dòng)包組成看,其開源基因也占據(jù)很大的比重,JSF是一個(gè)SUN伙伴們工業(yè)標(biāo)準(zhǔn)和開源之間的一個(gè)混血兒。

上述兩個(gè)地址下載的jar合并在一起就是JSF所需要的全部驅(qū)動(dòng)包了。與Struts的驅(qū)動(dòng)包一樣,這些驅(qū)動(dòng)包必須位于Web項(xiàng)目的WEB-INF/lib,和Struts一樣的是也必須在web.xml中有如下配置:

  1. <web-app>  
  2. <servlet>  
  3. <servlet-name>Faces Servlet</servlet-name>  
  4. <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>  
  5. <load-on-startup>1</load-on-startup>  
  6. </servlet>   
  7. <servlet-mapping>  
  8. <servlet-name>Faces Servlet</servlet-name>  
  9. <url-pattern>*.faces</url-pattern>  
  10. </servlet-mapping>   
  11. </web-app> 

這里和Struts的web.xml配置何其相似,簡(jiǎn)直一模一樣。

正如Struts的struts-config.xml一樣,JSF也有類似的faces-config.xml配置文件:

  1. <faces-config>  
  2. <navigation-rule>  
  3. <from-view-id>/index.jsp</from-view-id>  
  4. <navigation-case>  
  5. <from-outcome>login</from-outcome>  
  6. <to-view-id>/welcome.jsp</to-view-id>  
  7. </navigation-case>  
  8. </navigation-rule>   
  9. <managed-bean>   
  10. <managed-bean-name>user</managed-bean-name>  
  11. <managed-bean-class>com.corejsf.UserBean</managed-bean-class>   
  12. <managed-bean-scope>session</managed-bean-scope>   
  13. </managed-bean>  
  14. </faces-config> 

在Struts-config.xml中有ActionForm Action以及Jsp之間的流程關(guān)系,在faces-config.xml中,也有這樣的流程,我們具體解釋一下Navigation:

在index.jsp中有一個(gè)事件:

 

  1. <h:commandButton label="Login" action="login" /> 

 

action的值必須匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一個(gè)login事件,那么事件觸發(fā)后下一個(gè)頁(yè)面將是welcome.jsp

JSF有一個(gè)獨(dú)立的事件發(fā)生和頁(yè)面導(dǎo)航的流程安排,這個(gè)思路比struts要非常清晰。

managed-bean類似Struts的ActionForm,正如可以在struts-config.xml中定義ActionForm的scope一樣,這里也定義了managed-bean的scope為session。

但是如果你只以為JSF的managed-bean就這點(diǎn)功能就錯(cuò)了,JSF融入了新的Ioc模式/依賴性注射等技術(shù)。

Ioc模式

對(duì)于Userbean這樣一個(gè)managed-bean,其代碼如下:

 

  1. public class UserBean {  
  2. private String name;  
  3. private String password;  
  4. // PROPERTY: name  
  5. public String getName() { return name; }  
  6. public void setName(String newValue) { name = newValue; }  
  7. // PROPERTY: password  
  8. public String getPassword() { return password; }  
  9. public void setPassword(String newValue) { password = newValue; }  
  10. }  
  11. <managed-bean>  
  12. <managed-bean-name>user</managed-bean-name>  
  13. <managed-bean-class>com.corejsf.UserBean</managed-bean-class>  
  14. <managed-bean-scope>session</managed-bean-scope>  
  15. <managed-property>  
  16. <property-name>name</property-name>  
  17. <value>me</value>  
  18. </managed-property>  
  19. <managed-property>  
  20. <property-name>password</property-name>  
  21. <value>secret</value>  
  22. </managed-property>  
  23. </managed-bean> 

faces-config.xml這段配置其實(shí)是將"me"賦值給name,將secret賦值給password,這是采取Ioc模式中的Setter注射方式。

Backing Beans

對(duì)于一個(gè)web form,我們可以使用一個(gè)bean包含其涉及的所有組件,這個(gè)bean就稱為Backing Bean, Backing Bean的優(yōu)點(diǎn)是:一個(gè)單個(gè)類可以封裝相關(guān)一系列功能的數(shù)據(jù)和邏輯。

說白了,就是一個(gè)Javabean里包含其他Javabean,互相調(diào)用,屬于Facade模式或Adapter模式。

對(duì)于一個(gè)Backing Beans來說,其中包含了幾個(gè)managed-bean,managed-bean一定是有scope的,那么這其中的幾個(gè)managed-beans如何配置它們的scope呢?

  1. <managed-bean>  
  2. ...  
  3. <managed-property>  
  4. <property-name>visit</property-name>  
  5. <value>#{sessionScope.visit}</value>  
  6. </managed-property> 

這里配置了一個(gè)Backing Beans中有一個(gè)setVisit方法,將這個(gè)visit賦值為session中的visit,這樣以后在程序中我們只管訪問visit對(duì)象,從中獲取我們希望的數(shù)據(jù)(如用戶登陸注冊(cè)信息),而visit是保存在session還是application或request只需要配置既可。

UI界面

JSF和Struts一樣,除了JavaBeans類之外,還有頁(yè)面表現(xiàn)元素,都是是使用標(biāo)簽完成的,Struts也提供了struts-faces.tld標(biāo)簽庫(kù)向JSF過渡。

使用Struts標(biāo)簽庫(kù)編程復(fù)雜頁(yè)面時(shí),一個(gè)***問題是會(huì)大量使用logic標(biāo)簽,這個(gè)logic如同if語(yǔ)句,一旦寫起來,搞的JSP頁(yè)面象俄羅斯方塊一樣,但是使用JSF標(biāo)簽就簡(jiǎn)潔優(yōu)美:

 

  1. <jia:navigatorItem name="inbox" label="InBox" 
  2. icon="/images/inbox.gif" 
  3. action="inbox" 
  4. disabled="#{!authenticationBean.inboxAuthorized}"/> 

如果authenticationBean中inboxAuthorized返回是假,那么這一行標(biāo)簽就不用顯示,多干凈利索!

先寫到這里,我會(huì)繼續(xù)對(duì)JSF深入比較下去,如果研究過Jdon框架的人,可能會(huì)發(fā)現(xiàn),Jdon框架的jdonframework.xml中service配置和managed-bean一樣都使用了依賴注射,看來對(duì)Javabean的依賴注射已經(jīng)迅速地成為一種新技術(shù)象征,如果你還不了解Ioc模式,趕緊補(bǔ)課。

希望通過本文的介紹,能給你帶來幫助。

【編輯推薦】

  1. 詳細(xì)介紹Java EE開發(fā)四大常用框架
  2. 簡(jiǎn)單介紹Java EE容器
  3. 揭開Java EE開發(fā)框架之謎
  4. 多圖詳解 Java EE 6的EJB模型案例
  5. Java開發(fā)必讀 解決Java EE的亂碼問題
責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-06-24 17:43:24

Struts和JSF

2009-06-29 14:30:27

JSF技術(shù)

2009-06-24 13:50:29

JSF和MVC

2011-06-30 10:20:38

JSFMVC

2009-06-22 15:35:31

JSF和Struts

2009-06-26 11:24:15

Seam Remoti

2009-06-22 14:13:08

JSF入門

2009-06-23 13:01:04

JSF應(yīng)用

2009-06-23 13:55:17

JSF標(biāo)簽

2011-07-21 17:11:09

AjaxJSF

2009-06-23 14:01:27

StrutsTapestryJSF

2009-06-17 15:18:38

JSF與Spring

2009-06-29 13:22:19

JSF技術(shù)JSF組件

2009-06-24 10:47:55

JSF生命周期

2009-06-22 16:24:33

JSF框架中使用的設(shè)計(jì)

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2010-07-06 14:32:02

2011-07-12 10:24:17

類加載反射

2009-12-29 15:56:57

2009-06-22 15:02:47

StrutsJSF
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

免费观看国产精品| 亚洲在线欧美| 日本久久综合网| 成人激情在线| 欧美一级在线视频| 欧美午夜小视频| jizz亚洲| 粉嫩av一区二区三区| 45www国产精品网站| 成年人视频软件| 99ri日韩精品视频| 欧美天堂亚洲电影院在线播放| 精品日韩在线播放| 在线观看xxx| 精品在线你懂的| 欧美一级淫片videoshd| 波多野结衣在线网址| 亚洲瘦老头同性70tv| 日韩一区国产二区欧美三区| 精品视频无码一区二区三区| 中文字幕在线播放网址| 久久久久成人黄色影片| 97超碰在线播放| 中文字幕777| 一区二区精品| 欧美激情喷水视频| 欧美风情第一页| 国产不卡一区| 日韩av在线看| 美国黄色一级视频| 9.1麻豆精品| 欧美午夜不卡视频| 免费毛片小视频| 欧美人与性动交α欧美精品济南到| 国产日产欧美一区二区三区 | 亚洲第一在线播放| 影音先锋日韩精品| 色琪琪综合男人的天堂aⅴ视频| 天天插天天射天天干| 日韩在线成人| 欧美一区二区三区影视| 91看片破解版| 青青伊人久久| 欧美日韩国产在线观看| 尤蜜粉嫩av国产一区二区三区| 在线视频超级| 欧美色视频日本版| 夫妻免费无码v看片| 爱情岛论坛亚洲品质自拍视频网站| 亚洲欧洲一区二区在线播放| 天堂精品视频| www.国产精品.com| 日本一区二区三区在线不卡 | 2018国产精品| 这里视频有精品| 日韩一区二区三区观看| 久久成年人网站| 成人亚洲精品| 欧美一个色资源| 无码国产精品一区二区高潮| 免费精品一区| 欧美精品一区二区三区蜜桃视频| 免费在线观看日韩av| 91亚洲精品视频在线观看| 欧美videossexotv100| 少妇搡bbbb搡bbb搡打电话| av成人资源网| 精品亚洲国产视频| 日本乱子伦xxxx| 日韩伦理视频| 免费av一区二区| 久久在线视频精品| 一区二区激情| 国产精品igao视频| 国产精品久久久久久久一区二区 | 激情欧美日韩| 欧美一区深夜视频| 欧美激情一区二区三区免费观看| 精品一区中文字幕| 999日本视频| 天天干视频在线观看| 国产调教视频一区| 免费观看黄色的网站| av资源新版天堂在线| 欧美日韩亚洲网| the porn av| 亚洲精品v亚洲精品v日韩精品| 亚洲成av人乱码色午夜| 在线 丝袜 欧美 日韩 制服| 欧美伦理在线视频| 欧美美女18p| 999视频在线| 国产美女一区二区三区| 久久精品国产美女| 欧美成人二区| 疯狂欧美牲乱大交777| 亚洲无吗一区二区三区| 亚洲福利合集| 最近2019中文字幕mv免费看| 欧美日韩大片在线观看| 日韩中文字幕一区二区三区| 成人女人免费毛片| 福利视频在线播放| 亚洲国产一二三| 日本特黄a级片| 国产伦精品一区二区三区在线播放| 亚洲人午夜精品免费| 欧美黄色一级网站| 欧美tickling网站挠脚心| 亚洲综合图色| 国产亚洲精品91在线| 极品久久久久久| 久久av在线| 亚洲一区二区免费在线| 免费a级毛片在线观看| 亚洲精品国产a久久久久久| 国产男女激情视频| 国产精品传媒| 免费91在线视频| 中文字幕精品一区二区精| 成人avav影音| 91视频成人免费| 成人交换视频| 亚洲男人天堂古典| 国产精品a成v人在线播放| 久久精品国产成人一区二区三区 | 国产精品乱人伦| 少妇高潮喷水在线观看| 精品亚洲二区| 日韩一区二区三区xxxx| 精品人妻一区二区三区潮喷在线 | 中文字幕国产综合| 精品成人国产| 97se视频在线观看| 黄色av电影在线观看| 欧美性xxxxxx少妇| 国产精品成人一区二区三区电影毛片 | 欧美一区二区三区免费观看视频 | 国产精品美女久久| 可以在线观看的黄色| 夜夜揉揉日日人人青青一国产精品| 亚洲国产精品三区| 成人国产精品一级毛片视频| 国产成人高潮免费观看精品| 午夜av免费在线观看| 亚洲最大色网站| 国产精品成人免费一区久久羞羞| 伊人久久大香线蕉精品组织观看| 成人日韩在线电影| a免费在线观看| 欧美一级高清大全免费观看| 国产十六处破外女视频| 国产麻豆成人精品| 精品一区二区成人免费视频| 国产精品一区二区三区av | 国产高清视频免费在线观看| 美女视频一区在线观看| 亚洲一区精品视频| 亚洲一区有码| 欧美日韩国产成人| 人妻一区二区三区四区| 精品国产999| 日本少妇色视频| 日韩精品1区2区3区| 日韩欧美在线一区二区| 欧美一区二区三区婷婷| 久久亚洲影音av资源网 | 国产日产欧美一区二区| 综合伊人久久| 欧美资源在线观看| 午夜视频成人| 欧美成人一级视频| 91九色丨porny丨肉丝| 久久网站最新地址| 天天操天天干天天做| 欧美高清日韩| 看高清中日韩色视频| 欧美成人精品三级网站| 精品国产一区二区在线 | 欧美91在线|欧美| 九九精品在线视频| 日韩欧美在线观看一区二区| 欧美日韩黄视频| 国产一级在线免费观看| 久久九九99视频| 国产九九在线观看| 激情视频一区二区三区| 日韩精品另类天天更新| 韩国一区二区三区视频| 2020久久国产精品| 日本www在线| 精品亚洲一区二区三区在线观看| 亚洲综合视频在线播放| 五月天一区二区三区| 国产探花视频在线播放| 国产成人av电影在线| 爱福利视频一区二区| 国产精品99一区二区三| 欧美国产综合视频| 深夜激情久久| 国产精品欧美激情在线播放| av免费不卡国产观看| 精品久久久av| 你懂的视频在线观看| 日韩欧美中文一区二区| 波多野结衣在线电影| 亚洲一区二区三区视频在线播放| 怡红院一区二区三区| 国产91精品精华液一区二区三区| 牛夜精品久久久久久久| 99在线精品免费视频九九视| 在线观看成人av电影| 伊人久久大香线蕉综合网站| 999视频在线观看| 看片一区二区| 日韩av电影在线免费播放| 在线中文字幕电影| 久久精品国产欧美激情| 国产特黄在线| 亚洲人精品午夜在线观看| 秋霞视频一区二区| 日韩视频免费观看高清完整版在线观看 | 99久久精品一区二区| 国产一区二区视频在线| 久久免费视频1| 国产一区二区三区精品在线观看 | 国产不卡高清在线观看视频| 亚洲欧美自偷自拍另类| 国产日产高清欧美一区二区三区| 天天想你在线观看完整版电影免费 | 69堂国产成人免费视频| www五月天com| 欧美日韩免费在线观看| 日韩手机在线观看| 亚洲国产日产av| 久久久精品国产sm调教| 一区二区不卡在线播放| 久久久久久久福利| 亚洲精品乱码久久久久| av激情在线观看| 亚洲人妖av一区二区| 老熟妇高潮一区二区三区| 日韩一区中文字幕| 免费在线观看a级片| 99国产欧美另类久久久精品 | 国产精品福利一区| 五月婷婷六月香| 国产精品久久久久久户外露出| 精品人体无码一区二区三区| 国产精品久久久久一区二区三区共 | 国产偷人爽久久久久久老妇app | 午夜免费一区| 女女同性女同一区二区三区按摩| 国产韩国精品一区二区三区| 久久久成人精品一区二区三区| 午夜日韩在线| 人体内射精一区二区三区| 99国产精品99久久久久久粉嫩| 成 年 人 黄 色 大 片大 全| 国产亚洲激情| 国内自拍视频一区| 久久99国产精品久久| 天堂在线精品视频| 丁香天五香天堂综合| 黑丝av在线播放| 国产日韩欧美a| 欧美成人777| 午夜久久久影院| 久久久免费高清视频| 欧美性大战久久久久久久蜜臀 | 久久久久久久久久99| 精品久久久久久亚洲精品| 日韩精品久久久久久免费| 欧美日韩中文国产| 国产丰满美女做爰| 日韩av在线资源| 中文字幕在线免费| 欧美激情在线播放| 惠美惠精品网| 91免费看国产| 色婷婷久久久| 一本久久a久久精品vr综合| 国产伊人精品| 激情五月婷婷久久| 国产成人精品一区二| 黄色国产在线观看| 日韩一区欧美一区| 日本中文字幕第一页| 欧美高清hd18日本| 日日夜夜精品免费| 日韩中文字在线| 老牛影视精品| 96sao精品视频在线观看| 亚洲激情77| 欧美在线观看视频免费| 日韩av网站免费在线| xxxxwww一片| 亚洲国产岛国毛片在线| 日韩特黄一级片| 在线不卡中文字幕| 麻豆影视在线| 欧美黑人性生活视频| 久久久精品一区二区毛片免费看| 国产亚洲精品自在久久| 国产精品久久占久久| 黄色a级片免费| 国产91对白在线观看九色| 最近中文字幕免费视频| 亚洲一卡二卡三卡四卡无卡久久 | 精品黑人一区二区三区久久| av二区在线| 欧美在线视频观看免费网站| 日韩中文字幕无砖| 一本一道久久a久久综合精品| 亚洲国产mv| 久章草在线视频| 不卡av在线网| 成人在线观看小视频| 欧美色电影在线| 国产中文字幕在线看| 国内久久久精品| 精品中文在线| 中文字幕欧美日韩一区二区| 日韩有码一区二区三区| 亚洲av无码一区二区三区观看| 一区二区三区日本| 国产区精品在线| 色妞一区二区三区| yiren22亚洲综合| 色狠狠久久av五月综合|| 久久高清国产| 色天使在线视频| 欧美日韩国产限制| 污污网站免费在线观看| 国内精品一区二区三区四区| 91亚洲无吗| 成人精品视频在线播放| 丁香五精品蜜臀久久久久99网站| 欧美成人精品一区二区免费看片| 宅男噜噜噜66一区二区66| av免费观看一区二区| 国产精品久久久久免费a∨大胸| 你懂的一区二区三区| 亚洲人成色77777| 国产色一区二区| 日本精品入口免费视频| 国产午夜精品全部视频播放| 国产亚洲一区二区手机在线观看| 日本一区免费在线观看| 日韩精品一二三| 国产精品av久久久久久无| 欧美日韩一区三区| 欧美日韩欧美| 91亚洲精品丁香在线观看| 好看的日韩av电影| 最近中文字幕无免费| 色综合中文综合网| 福利片在线看| 亚洲www永久成人夜色| 国产中文一区| 中国黄色a级片| 欧美三级在线播放| 国产视频一区二区| 成人午夜电影在线播放| 一本久久综合| 一区二区三区在线观看免费视频| 欧美日韩亚洲综合一区二区三区 | 哺乳挤奶一区二区三区免费看 | 久久嫩草捆绑紧缚| 精品久久一区二区三区| 在线观看特色大片免费视频| 少妇免费毛片久久久久久久久| 久久91精品国产91久久小草| 亚洲国产精品免费在线观看| 亚洲激情自拍图| 成人1区2区| 日本国产中文字幕| 久久一区二区视频| 一级黄色大片免费| 欧美日韩国产第一页| 亚洲三级精品| 91aaa精品| 欧美日韩中国免费专区在线看| 午夜不卡视频| 久久久久无码国产精品一区| 久久99久久久久久久久久久| 日本在线免费观看| 深夜福利亚洲导航| 开心激情综合| 羞羞的视频在线| 亚洲v中文字幕| lutube成人福利在线观看| 懂色一区二区三区av片| 日本亚洲一区二区| 日韩高清精品免费观看| 色妞在线综合亚洲欧美| 亚洲理论电影| 国产在线a视频| 欧美性视频一区二区三区| 国产精品探花在线|