posts - 4, comments - 2, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
           

          也許每本編程書籍都已Hello World為開頭不是沒有原因的,因?yàn)?/span>Hello World以淺顯的編程技巧可以迅速地讓開發(fā)者上手,所以,我決定還是落入俗套吧,這次我們來(lái)講如何實(shí)現(xiàn)一個(gè)Hello World

          由于我是利用Javaweb方面的東西,所以我們先學(xué)習(xí)一下如何開發(fā)一個(gè)web application

          先從理論上武裝一下自己,理解普通的web applicationLotus Expeditor web application有什么區(qū)別。定位于Lotus Expeditor平臺(tái)的Web Application稱為Client Services web application因?yàn)?/span>Lotus Expeditor平臺(tái)的組件被稱為bundles,所以一個(gè)定位于此平臺(tái)的Web Application也被稱為一個(gè)Web Application Bundle或者WABClient Services web application 和運(yùn)行在 WAS(Websphere Application Server) 或者 tomcat 下的 web application一個(gè)主要的不同就是Client Services web application必須也是一個(gè)有效的OSGI Bundle。那么什么是OSGI呢?這個(gè)就說來(lái)話長(zhǎng)了,等我們羽翼豐滿了以后,在具體討論這個(gè)問題吧,我們還是先實(shí)現(xiàn)一個(gè)定位于Lotus Expeditor平臺(tái)的Web Application

          首先需要?jiǎng)?chuàng)建一個(gè)Web application,打開eclipse,File-New-Project, 選擇Client Services Web 項(xiàng)目,如下圖:

           
           

          我們把這個(gè)工程叫做 HelloWorld 吧,如下圖:


           

          然后一路Next,直到如下頁(yè)面:



           

          我們看看一個(gè)普通的Lotus Expeditorweb application都用到了哪些包,有Apache MyFaces(org.apache.myfaces) Eclipse核心組件(com.ibm.jxesupport.initializer,org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.event,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util)IBM JavaServer Faces(JSF)擴(kuò)展(com.ibm.rcp.servlet.jsf.ext,com.ibm.rcp.servlet.jsf.ext.impl)JavaServer Pages(JSP) API(com.ibm.pvc.servlet.jsp)JavaServer 面窗口小部件庫(kù)(JWL)(com.ibm.rcp.servlet.jwl)JSP標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSTL)(com.ibm.pvc.servlet.jsp.jstl)Servlet API(com.ibm.pvc.servlet)Web Application服務(wù)(org.osgi.service.webapplication)Web Application兼容性(com.ibm.osg.servlet,com.ibm.osg.webapp)Web Container(com.ibm.pvc.webcontainer) Web容器-JSP編譯器網(wǎng)橋,可靠性,可用性和可維護(hù)性(RAS)(com.ibm.pvc.ras),這些組件都是干什么用的呢?說實(shí)話,我也一頭霧水,先暫時(shí)不管,我們點(diǎn)擊Finish完成工程的創(chuàng)建。

          讓我們看看新建的工程和普通的Web Application的目錄結(jié)構(gòu)有什么不同,如下圖:


           

          Lotus ExpeditorWeb Application相比普通的Web Application在整體結(jié)構(gòu)上基本是沒有什么區(qū)別的,主要是多出了plugin.xmlMETA-INF/MANIFEST.MF兩個(gè)文件。我按照我目前的理解先說說這兩個(gè)文件,說之前就不得不提到OSGI了,其實(shí)我很早就聽說了OSGI,也對(duì)它的架構(gòu)和設(shè)計(jì)思想有一些了解,只不過從來(lái)沒有自己動(dòng)手實(shí)踐過,所以也是一知半解,只知道個(gè)概念而已。好,我們下面就說說OSGI

          OSGI Bundle概述

          Bundles是含有包含特定頭信息的manifestjar文件,這些頭信息描述了bundle并且列出了bundle的依賴性,比如說bundle需要的包和服務(wù)。Manifest文件中的描述信息將bundle和其他的jar文件區(qū)分開。非bundlejar文件的manifest文件常常包含了好少的信息。但是,bundlemanifest文件通常包含了描述信息,比如說bundle的名字,版本以及此bundle需要的包和服務(wù)的列表。

          框架管理bundle的生命周期,bundle的生命周期分為:

          INSTALLED-bundle已經(jīng)安裝,但是該bundle的依賴性還沒有被完全解決。

          RESOLVED-bundle的狀態(tài)是installed,并且已經(jīng)解決了依賴性問題,但是該bundle并沒有被運(yùn)行。如果一個(gè)bundle已經(jīng)啟動(dòng),并且所有的依賴性問題已經(jīng)解決,那么該bundle就會(huì)跳過RESOLVED狀態(tài)。

          STARTING-bundle正式運(yùn)行的一個(gè)臨時(shí)狀態(tài)

          ACTIVE-bundle正在運(yùn)行

          STOPPING-bundle的另一個(gè)臨時(shí)狀態(tài)

          UNINSTALLED-bundle不再存在于框架中

          每個(gè)bundle都必須包含一個(gè)manifest文件。Bundlemanifest文件包含框架需要正確安裝的數(shù)據(jù)和激活的bundleLegacy Eclipse bundles 能夠在plugin.xml文件中提供一些manifest的信息,但是我們建議使用META-INF/MANIFEST.MF文件來(lái)記錄manifeset信息。

          注意:plugin.xml可以包含類似的信息,但是,plugin.xml也包含了擴(kuò)展和擴(kuò)展點(diǎn)。

          如果一個(gè)bundle僅僅包含了一個(gè)plugin.xml,Eclipse平臺(tái)在啟動(dòng)時(shí)將生成一個(gè)等價(jià)的manifest.mf。當(dāng)你在manifest文件中指定數(shù)據(jù)的時(shí)候,你必須使用OSGI標(biāo)準(zhǔn)中定義的文件頭。你可以使用用戶定義的文件頭,但是,框架將會(huì)忽略任何它不能夠理解的文件頭。

          MANIFEST.MF文件位于bundle工程的META-INF目錄下。Plugin.xml文件位于根目錄下。

          上面說了這么多,總體意思就是說MANIFEST.MF是區(qū)分普通Web ApplicationOSGI Bundle的標(biāo)志,而一個(gè)Client Services web application就需要含有一個(gè)plugin.xml。下面列出了Client Services web application和標(biāo)準(zhǔn)的web application的不同之處:

          1The Lotus Expeditor platform 不支持通過EAR部署Enterprise Application。Web Application是被直接部署到運(yùn)行時(shí)的(后面這句話不太理解。。。)

          2Client Services web application有一個(gè)manifest文件, 位于META-INF/MANIFEST.MF, 它包含了引用包的信息以及bundel依賴性的信息。

          3,Client Services web application 有一個(gè)包含了擴(kuò)展點(diǎn)的 plugin.xml文件,利用這個(gè)文件可以簡(jiǎn)單地啟動(dòng)Web application。

          4,Client Services web application 含有記錄了額外部署信息的wab.properties文件。 這個(gè)文件位于 Webcontent /WEB-INF文件夾。

          5,JSP文件在作為WAB部署到運(yùn)行時(shí)前被編譯成相對(duì)應(yīng)的Servlet

          我們只是從理論的高度看了一下Client Services Web Application,是不是有點(diǎn)恐高?沒關(guān)系,讓我們具體實(shí)踐一下。在WebContent文件夾下創(chuàng)建index.jsp,如下圖:



           

          JSP源代碼如下:

          <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
              pageEncoding
          ="ISO-8859-1"
          %>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>HelloWorld</title>
          </head>
          <body>
          HelloWorld
          </body>
          </html>
           

          JSP文件已經(jīng)創(chuàng)建好,先在服務(wù)器上運(yùn)行看看效果如何?右鍵點(diǎn)擊HelloWorld工程,Run As-Run on Server,選擇剛才Client Services v6.1,直接finish就可以了。

          在彈出的Lotus Expeditor Client的編輯窗口中點(diǎn)擊打開菜單,我們看到菜單項(xiàng)并沒有發(fā)生什么變化,如下圖:


           

          回到Eclipse,我們發(fā)現(xiàn)Eclipse打開了我們剛才創(chuàng)建的index.jsp,如下圖:


           

          說明index.jsp創(chuàng)建成功了,我們還需要將這個(gè)HelloWorld添加到Lotus Expeditor的菜單項(xiàng)中。那么我們到底應(yīng)該怎么做呢?前面說過了,Client Services web application區(qū)別于其他Web Application就是plugin.xml文件。打開這個(gè)文件看看吧,如下圖:



           

          這段代碼的含義就是將我們的HelloWorld注冊(cè)到Client Service中,這樣我們可以就可以在Client Server啟動(dòng)時(shí)訪問到HelloWorld工程了。那么具體怎么在Lotus Expeditor Client的菜單項(xiàng)中添加我們的工程呢?

           

          擴(kuò)充如下代碼,最終plugin.xml文件如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <plugin>
          <extension point="com.ibm.pvc.webcontainer.application">
          <contextRoot>/HelloWorld</contextRoot>
          <contentLocation>WebContent</contentLocation>
          </extension>
          <extension id="helloworld" point="com.ibm.eswe.workbench.WctWebApplication">
               
          <WEBApplication DisplayName="你好">
                  
          <WebApplicationUrl local="true" secured="false" url="/HelloWorld"/>
               
          </WEBApplication>
          </extension>
          </plugin>

           

          我們?cè)僦匦逻\(yùn)行Hello World工程,看一看Lotus Expeditor Client的菜單項(xiàng),是不是多出來(lái)了“你好”菜單?如下圖:



           

          注意:<contextRoot>/HelloWorld</contextRoot>url="/HelloWorld"/一定要對(duì)應(yīng)。

          我們的簡(jiǎn)單東西到這里就全部介紹完了,下次來(lái)點(diǎn)高級(jí)的東西,我也是邊學(xué)邊寫,哈哈。


          主站蜘蛛池模板: 郴州市| 洞头县| 澄城县| 巴马| 甘肃省| 三亚市| 平乡县| 祁连县| 河津市| 淄博市| 利辛县| 泸溪县| 蒙山县| 息烽县| 江永县| 奉节县| 平潭县| 鄂伦春自治旗| 华容县| 田林县| 渑池县| 霸州市| 浪卡子县| 垫江县| 东明县| 体育| 晋江市| 石楼县| 桃源县| 那曲县| 寿阳县| 长顺县| 额尔古纳市| 石狮市| 罗甸县| 云龙县| 格尔木市| 盐城市| 青阳县| 福安市| 岳西县|