使用Netbeans部署和測(cè)試Portlets
Portal是一個(gè)包含很多自定義的、可定制網(wǎng)頁(yè)的Web應(yīng)用。一個(gè)Portal應(yīng)用里面包含有多個(gè)Portlets,而Porlets是一些web組件,可以嵌入到Portal應(yīng)用里面。在上一篇文章《SOA概念的一些個(gè)人見(jiàn)解》中,我提到過(guò)SOA的服務(wù)包含表示層服務(wù),這些Portlets可以看作是表示層的服務(wù)。下圖是一個(gè)Portal的應(yīng)用的例子:
在這個(gè)網(wǎng)站中,我們可以看到,整個(gè)網(wǎng)站又多個(gè)小窗口組成,這些窗口可以最小化,最大化和關(guān)閉,這些小窗口就是一個(gè)個(gè)的Portlets。Portlets和Servelet一樣,需要一個(gè)容器來(lái)管理,Servelet需要一個(gè)WEB容器來(lái)管理,而Portlets則需要用一個(gè)Portal容器來(lái)進(jìn)行管理。在這篇文章里,我將介紹如何在Netbeans里創(chuàng)建和管理Portlets。
Netbeans部署和測(cè)試軟件需求:
1、JDK1.6以上版本
2、OpenPortal Portlet Container 2.0 beta
3、Netbeans 6.0以上版本(我使用的是Netbeans 6.1),并安裝這些插件:jMaki Ajax Support,OpenPortal Portlet Container, Generic Portlet。
Netbeans部署和測(cè)試實(shí)驗(yàn)步驟:
1、把Portal容器配置到glassfish中:下載OpenPortal Portlet Container 2.0 beta,下載的文件是一個(gè)jar包,把該jar包的路徑拷貝到命令行中,用java -jar portlet-container-configurator.jar命令執(zhí)行安裝,并選擇glassfish的安裝路徑,如下圖所示:
點(diǎn)擊OK即可進(jìn)入下一步。
2、配置Portal服務(wù)器:打開(kāi)"Service"窗口,右鍵單擊"server"-"Add Server",在彈出的窗口中選擇"OpenPortal Portlet Container 2",點(diǎn)擊下一步,這一步要選擇WEB容器,默認(rèn)是GlassFish Server,在GlassFish Home中把路徑指向glassfish的安裝目錄即可,如:C:\Program Files\glassfish-v2ur2。另外還需要輸入admin的口令,默認(rèn)是adminadmin。點(diǎn)擊下一步并完成即可配置好。
3、新建一個(gè)web工程:File - New - Web - Web Application,命名為MyPortlet,點(diǎn)擊下一步,其中Server選擇"OpenPortal Portlet Container 2.0",點(diǎn)擊下一步,選擇框架時(shí),必須把Portlet Support及jMaki Ajax Framework選中,在選中Portlet Support時(shí),注意要把"Create Portlet"選中,并把Portlet Class Name和Portlet Name都改為MyPortlet,注意,這兩個(gè)名稱(chēng)必須一致,如下圖所示:
選中jMaki時(shí),把CSS Style選為No CSS Style,如下圖所示:
4、工程建立完畢以后,我們展開(kāi)WEB-INF文件夾,可以看到以下結(jié)構(gòu):
在一個(gè)Portlet里面,我們不再需要index.jsp,因此可以先把index.jsp刪除。Portlet的視圖是在WEB-INF下的jsp目錄下的MyPortlet_view.jsp。Netbeans IDE為我們生成了一個(gè)非常重要的源文件,那就是源包中的com.test.MyPortlet.java。這個(gè)java文件相當(dāng)于Portlet的一個(gè)控制器,它繼承了GenericPortlet這個(gè)基類(lèi),doView,doEdit,doHelp方法分別會(huì)被GenericPortlet里的render()方法調(diào)用,為Portlet指定視圖、編輯頁(yè)面及幫助頁(yè)面。
5、右鍵單擊項(xiàng)目的"Build",生成項(xiàng)目并運(yùn)行,你可以看到如下的頁(yè)面:
由于MyPortlet_view.jsp中只有一句:MyPortlet - VIEW MODE,因此,我們看到窗口中只有一句話:MyPortlet - VIEW MODE。注意MyPortlet窗口右上角的那些按鈕,都是可以使用的,大家可以嘗試點(diǎn)按一下它們,體驗(yàn)一下Portlet的含義。
6、下面我們來(lái)為該P(yáng)ortlet添加一些動(dòng)態(tài)和靜態(tài)的內(nèi)容,包括RSS訂閱的功能。
首先,打開(kāi)WEB-INF/jsp/MyPortlet_view.jsp,我們來(lái)在主視圖中添加一個(gè)多頁(yè)選項(xiàng)卡:
把MyPortlet - VIEW MODE這行去掉,在組件面板中拖一個(gè)Yahoo的ViewTab到j(luò)sp代碼中,在jsp代碼中生成了以下代碼:
- value="{items:[
- {label : 'My Tab', content : 'Some Content'},
- {id : 'bar', label : 'My Tab 2', include : 'test.jsp ', lazyLoad : true },
- {label : 'My Tab 3', content : 'More Content', selected : true}
- ]
- }" />
點(diǎn)擊項(xiàng)目的右鍵,選擇Undeploy and deploy,再運(yùn)行一下項(xiàng)目,你可以看到以下的頁(yè)面:
點(diǎn)擊MyTab2時(shí),得到一個(gè)消息"Unable to load URL test.jsp .",那是因?yàn)镸yTab2指向一個(gè)jsp文件,而我們并沒(méi)有創(chuàng)建這個(gè)文件。將MyPortlets_view.jsp的那段Widget的代碼用以下的替換:
現(xiàn)在,我們來(lái)創(chuàng)建3個(gè)jsp文件。點(diǎn)擊Web Pages的右鍵,注意,是Web Pages的右鍵,而不是WEB-INF/jsp的右鍵,因?yàn)槲覀儸F(xiàn)在不是要?jiǎng)?chuàng)建Portlet的視圖,而是在Portlet中引用其他的頁(yè)面,注意到上面這段代碼中,Tab里面的URL的上下文都是MyPortlet。分別創(chuàng)建download.jsp,fundamentals.jsp和whatsnew.jsp三個(gè)jsp文件。
打開(kāi)download.jsp,用以下這段代碼來(lái)替換body里面的代碼:
- Downloads for New Developers
Sun SITE下載中心
NetBeans IDE
MySQL Database
打開(kāi)fundamentals.jsp,把正文部分的
JSP Page
去掉,從組件面板中拖一個(gè)jMaki Widgets的Blog List到正文body部分,生成如下代碼:
生成的代碼只是一些示例的文本,我們把代碼替換為以下:
- Java Technology Fundamentals
如果你需要完成RSS訂閱的功能,必須把service設(shè)置為service="/xhp?id=rss",而每一個(gè)使用jMaki框架的應(yīng)用,在應(yīng)用上下文中(也就是web.xml)都配置了一個(gè)jmaki.xhp.XmlHttpProxyServlet的Servlet,其URL映射為/xhp。因此,我們?cè)谡?qǐng)AJAX代理時(shí),一定要引入這個(gè)上下文。你可以修改xhp.json文件來(lái)自定義需要訂閱的內(nèi)容。打開(kāi)xhp.json,我們可以看到最后一項(xiàng)數(shù)據(jù)是:
- {"id": "rss",
- "url":"http://weblogs.java.net/blog/ludo/index.rdf",
- "xslStyleSheet": "rss.xsl"
- }
在這段代碼中,url指定了RSS訂閱的地址是http://weblogs.java.net/blog/ludo/index.rdf,這里,我們改為:
http://blogs.sun.com/JavaFundamentals/feed/entries/rss
另外,我們還需要在whatsnew頁(yè)面中訂閱另外一個(gè)RSS,因此,把原有的那段代碼用以下的替換:
- {"id": "rss", "url":"http://blogs.sun.com/JavaFundamentals/feed/entries/rss", "xslStyleSheet": "rss.xsl" }, {"id": "rss2", "url":"http://developers.sun.com.cn/blog/scut/feed/entries/rss", "xslStyleSheet": "rss.xsl" }
注意,兩個(gè)id之間必須要有個(gè)逗號(hào)分隔開(kāi)來(lái)。接下來(lái),打開(kāi)whatsnew.jsp,用以下靜態(tài)內(nèi)容替換body部分的代碼:What's PopularThe Java Tutorial
Java Technology Fundamentals
Core Tech Tips
Easy Web Site Creation in the NetBeans IDE
The Java EE 5 Tutorial
What's New然后,在組件面板中拖一個(gè)Blog list出來(lái),并替換為以下:7、配置Widget的樣式。打開(kāi)resources/jmaki/bloglist/component.css,把height : 75px; 替換為height : 25px; 另外,在component.htm中,把
@{description}
刪掉,因?yàn)槲覀冎恍枰A魳?biāo)題,而不需要顯示詳細(xì)的內(nèi)容。 8、重新部署項(xiàng)目,點(diǎn)擊項(xiàng)目右鍵,選擇Undeploy and deploy,再運(yùn)行,就可以看到自己定制的Portlet了:
9、再新建一個(gè)Portlet,創(chuàng)建的順序與上一個(gè)Portlet相同,在編輯Portlet的View時(shí),簡(jiǎn)單地拖兩個(gè)widget進(jìn)去進(jìn)行調(diào)試,這里,我拖的是Yahoo的Search和Dojo的Clock,部署并運(yùn)行,我們?cè)赑ortlet管理頁(yè)面上就可以同時(shí)看到這兩個(gè)Portlet了:
【編輯推薦】