做法1:以Eclipse為啟動點,將appserver做為一個應(yīng)用啟動。

          1.jpg
          做法:
          在Launcher 當(dāng)中啟動Eclipse Platform。此處的ClassLoader 為系統(tǒng)的loader。
          Eclipse Platform 會查找到Core Application,并且將其啟動。
          在Core Application 當(dāng)中,ClassLoader 為 Eclipse 的 ClassLoader。
          在Core Application 當(dāng)中,我們啟動Jetty,并處于等待狀態(tài)。
          當(dāng)Servlet/JSP被調(diào)用時,Jetty 將Servlet/JSP初始化,并執(zhí)行相應(yīng)動作。
          Servlet 的 ClassLoader 是 Context ClassLoader,符合Servlet 規(guī)范的。

          曾經(jīng)碰到的問題:
          Core Application采用的是Eclipse ClassLoader,缺省情況下,該ClassLoader 的 parent 為 null。這樣,在Servlet ClassLoader 當(dāng)中,能夠接觸到System ClassLoader,但是Core Application 不能訪問,它們相互間不可見。
          解決辦法:EclipseStarter 有個配置項叫做parent.Classloader,將其設(shè)置為app,即可解決該問題。
          Servlet ClassLoader按照Servlet 2.3的規(guī)范,首先由Context ClassLoader去查找,如果找不到,再交由parent 去load。而當(dāng)時我在webapp/WEB-INF/lib目錄下放了一個runtime.jar文件。這樣,runtime.jar當(dāng)中的類都被Context ClassLoader給裝載進(jìn)來了,而對于EclipseStarter當(dāng)中裝載的runtime.jar中的類互相不可見,從而也出現(xiàn)問題。
          解決辦法:把lib目錄下的runtime.jar刪除就好了。

          由于所有的與eclipse有關(guān)的內(nèi)容,只能由Core Application 的ClassLoader才能裝載,因而相互間是可見的。從而達(dá)到了利用eclipse核心的目的。
          做法2:以app server 為啟動點,以eclipse 核心為web app的核心:
          2.jpg


          和做法1一樣,重點是將Core Application的ClassLoader設(shè)置為System的loader,這樣,在其他的地方(例如Servlet當(dāng)中)也同樣可見了。

          很重要:runtime.jar和osgi.jar一定要放在jetty的啟動路徑當(dāng)中。這樣才會用System的loader 首先找到這兩個jar文件,從而保證大家都在這個基礎(chǔ)上來互相看到。

          做法3:以Eclipse為啟動點,將appserver做為一個應(yīng)用啟動,appserver以dispatcher身份出現(xiàn)。

          這個做法和做法1一致。區(qū)別在于,appserver 本身不做任何事情,只是做為一個 dispatcher 出現(xiàn)。它提供一個 extension point,其他插件擴(kuò)展該 extension,相當(dāng)于注冊 servlet,以及mapping。當(dāng)有http request 時,dispatcher根據(jù) servlet 的注冊和mapping,自動的分發(fā)給對應(yīng)的servlet。此時,各個servlet的 class loader 還是 eclipse classloader,而 servlet 的 context classloader 在這種模式當(dāng)中只是曇花一現(xiàn),做了一個 dispatcher 之后,就將工作移交給了定義serlvet 的插件的那個 eclipse classloader。

          這樣,servlet 是可擴(kuò)展的,再也不依賴于 web.xml了。

          主站: http://blogsite.3322.org/jspwiki/
          posted on 2005-11-28 09:56 SimonLei 閱讀(1977) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          統(tǒng)計

          主站蜘蛛池模板: 邵东县| 淮安市| 兴安县| 武清区| 布尔津县| 泰安市| 永丰县| 黄平县| 万荣县| 田东县| 纳雍县| 金湖县| 绍兴县| 安阳市| 信宜市| 荥经县| 永城市| 石渠县| 筠连县| 孟津县| 古蔺县| 文成县| 乐平市| 南阳市| 清丰县| 福建省| 嘉兴市| 肃北| 确山县| 中西区| 乾安县| 昆明市| 额济纳旗| 蓝山县| 静乐县| 钟祥市| 腾冲县| 特克斯县| 商都县| 英德市| 蒙自县|