一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在應(yīng)用中使用嵌入式Tomcat

 涅槃沉殤 2018-01-11

omcat5中的Embeded版本,為應(yīng)用中集成完整的Web服務(wù)提供了盡可能大的空間,不僅使開發(fā)者容易獲得對標(biāo)準(zhǔn)HTTP的處理,還有SSL的通訊處理,使開發(fā)者很容易就可以對原有非Web系統(tǒng)進行擴展以支持瘦客戶端應(yīng)用,通向Web大門的鑰匙已經(jīng)放在這里,剩下的就是看你怎樣來發(fā)揮了。

Tomcat嚴(yán)格意義上不是一個真正的AppServer,只是支持運行Servlet和Jsp的Web容器,此外擴展了一些AppServer的功能,如數(shù)據(jù)庫連接池,JNDI等,如何提煉,或者說把Tomcat整理成一個最小的集合成為Tomcat嵌入版本的關(guān)鍵,從Tomcat5.0開始提供和支持Embeded版本,即最簡化Tomcat Server,下面就針對Tomcat Server的Embeded版本進行介紹,怎樣把Tomcat集成到Java應(yīng)用中。

首先可以在http://apache.mirrors./jakarta/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28-embed.tar.gz下載Tomcat的Embeded版本,下載解壓后把最里層的jakarta-tomcat-5.0.28-embed目錄copy到容易查找的目錄,為簡易需要更名為EmbeddedTomcat,作為嵌入Tomcat的工作目錄。

首先我們需要了解Tomcat在工作時的層次情況,它按照: 上面是Tomcat實現(xiàn)的內(nèi)部工作結(jié)構(gòu):

一個Server含有幾個Connector,比如non-SSL HTTP/1.1 Connector on port 8080,SSL HTTP/1.1 Connector on port 8443和AJP 1.3 Connector on port 8009。連接器就是接受客戶端情況然后封裝成request和response對象交給容器處理。

通常是一個Engine,其中Engine里含有1個Host,1個Host 內(nèi)可以含有多個Context,Context代表Web應(yīng)用,即1個Host里可以包含多個Web應(yīng)用,tomcat的webapps目錄里面防止的就是一個個web應(yīng)用。Engine接收Service發(fā)過來的請求(通過Connector),交給相應(yīng)的Host進行處理,然后Host交給具體的Context。

下面是非常簡單的創(chuàng)建Embeded tomcat的例子,示意其使用

把tomcat-embed目錄下的lib內(nèi)的所有jar包引入到項目的環(huán)境中,即完成了項目的環(huán)境搭建。在應(yīng)用里開發(fā)嵌入式Tomcat,需要根據(jù)以下步驟: 1)創(chuàng)建org.apache.catalina.startup.Embedded實例,其代表嵌入式Tomcat Server的實例; 2)創(chuàng)建org.apache.catalina.Engine 實例,代表上面XML結(jié)構(gòu)示例中的Engine,作為容器用來包含Host節(jié)點; 3)創(chuàng)建org.apache.catalina.Host實例,代表虛擬主機服務(wù),把它加入到2)中產(chǎn)生的Engine; 4)創(chuàng)建一個或多個org.apache.catalina.Context實例,代表Web應(yīng)用,每個Web應(yīng)用都需要加入到3)產(chǎn)生的Host中; 5)最后創(chuàng)建org.apache.catalina.Connector實例,把它加入1)創(chuàng)建的tomcat實例中,它用來接收客戶發(fā)出的請求。

具體和完整的代碼如下:

[java] view plain copy

  1. import .File;  
  2. import .InetAddress;  
  3. import .UnknownHostException;  
  4.   
  5. import org.apache.catalina.Context;  
  6. import org.apache.catalina.Engine;  
  7. import org.apache.catalina.Host;  
  8. import org.apache.catalina.Logger;  
  9. import org.apache.catalina.startup.Embedded;  
  10.   
  11. public class TomcatService {  
  12.     public static void main(String[] args) {  
  13.         // 設(shè)置Tomcat的工作目錄,并啟動Tomcat Server  
  14.         String path = "F:/360云盤/eclipse/eclipse/workspace/EmbeddedTomcat";  
  15.         Embedded tc = createTomcat(path);  
  16.         try {  
  17.             tc.start();  
  18.             System.out  
  19.                     .println("---------- Tomcat Server start over. ------------");  
  20.         } catch (Exception e) {  
  21.             e.printStackTrace();  
  22.         }  
  23.     }  
  24.   
  25.     private static Embedded createTomcat(String path) {  
  26.         // 創(chuàng)建嵌入式Tomcat Server的實例  
  27.         Embedded tomcat = new Embedded();  
  28.         // 設(shè)置Tomcat的工作目錄  
  29.         // catalina.home就是tomcat的存放路徑,例如:D:\360云盤\Tools\apache-tomcat-7.0.39  
  30.         // 這里存放路徑就是項目路徑F:/360云盤/eclipse/eclipse/workspace/EmbeddedTomcat,因為是內(nèi)嵌tomcat  
  31.         tomcat.setCatalinaHome(path);  
  32.         // 產(chǎn)生Tomcat引擎  
  33.         Engine engine = tomcat.createEngine();  
  34.         engine.setName("EmbededServer");  
  35.         // 創(chuàng)建Host,設(shè)置Host的工作目錄  
  36.         Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome()  
  37.                 + "/webapps");  
  38.         // 把Host加入Engine  
  39.         engine.addChild(host);  
  40.         engine.setDefaultHost(host.getName());  
  41.         System.out.println("host.getAppBase():" + host.getAppBase());  
  42.         String path1 = host.getAppBase() + "/ROOT";  
  43.         String path2 = host.getAppBase() + "/manager";  
  44.         if (!new File(path1).exists()) {  
  45.             System.err.println("請檢查instance1應(yīng)用的目錄以及相關(guān)資源是否存在.");  
  46.             return null;  
  47.         }  
  48.         // 創(chuàng)建instance1的Context,并加入Host中  
  49.         Context ctxt = tomcat.createContext("/ROOT", path1);  
  50.         Context ctxt1 = tomcat.createContext("/manager", path2);  
  51.           
  52.         host.addChild(ctxt);  
  53.         host.addChild(ctxt1);  
  54.   
  55.         tomcat.addEngine(engine);  
  56.         tomcat.setDebug(Logger.WARNING);  
  57.         try {  
  58.             // Tomcat加入Connector,監(jiān)聽本地(127.0.0.1)的訪問  
  59.             System.out.println(InetAddress  
  60.                     .getByName("127.0.0.1"));  
  61.             tomcat.addConnector(tomcat.createConnector(InetAddress  
  62.                     .getByName("127.0.0.1"), 9999false));  
  63.         } catch (UnknownHostException e) {  
  64.             System.err.println("綁定Tomcat Server到127.0.0.1:8080失敗,請檢查端口是否被占用.");  
  65.             e.printStackTrace();  
  66.             tomcat = null;  
  67.         }  
  68.         return tomcat;  
  69.     }  
  70. }  


以上代碼親測可用,這里我同時啟動了兩個項目,manager和ROOT,下面是我的工程目錄

在瀏覽器輸入http://localhost:9999/ROOT,顯示如下:


在瀏覽器輸入http://localhost:9999/manager,顯示如下:


在這里需要注意,由于嵌入式版本Tomcat沒有common/lib目錄,一些需要的Jar包可以復(fù)制到JDK的/jre/lib/endorsed目錄下進行使用。


在OFBiz中默認(rèn)使用的embeded tomcat,具體的可以參考里面對于嵌入式啟動相關(guān)的內(nèi)容

這里我們討論了如何使用Embedded Tomcat,并沒有提現(xiàn)出使用內(nèi)嵌Tomcat的好處,我們可以把上面的ROOT和manager項目分開成為兩個單獨的項目,這樣,啟動的時候就可以獨立啟動,配置不同的監(jiān)聽端口的話可以同時啟動,主要是避免需要調(diào)試多個項目的時候同時在一個Tomcat里面啟動,改了一個項目,就要重啟Tomcat,浪費時間,分開之后,就可以獨立進行發(fā)布,各自互不影響,調(diào)試、啟動方便。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲天堂有码中文字幕视频| 免费在线观看欧美喷水黄片 | 正在播放国产又粗又长| 中文字幕中文字幕一区二区| 91日韩欧美国产视频| 翘臀少妇成人一区二区| 亚洲精品有码中文字幕在线观看| 中文字幕人妻综合一区二区| 日本亚洲精品在线观看| 99久久精品视频一区二区| 精品一区二区三区不卡少妇av| 亚洲国产av一二三区| 麻豆视频传媒入口在线看| 国产不卡免费高清视频| 日韩精品中文在线观看| 中文字幕欧美视频二区| 日韩夫妻午夜性生活视频| 激情内射亚洲一区二区三区| 国产一区日韩二区欧美| 国产成人精品视频一区二区三区| 天海翼精品久久中文字幕| 日韩中文字幕狠狠人妻| 好吊日视频这里都是精品| 久久女同精品一区二区| 欧美加勒比一区二区三区| 欧美日韩国产亚洲三级理论片| 丰满人妻熟妇乱又乱精品古代| 妻子的新妈妈中文字幕| 五月婷婷缴情七月丁香| 亚洲国产成人久久一区二区三区| 色婷婷视频免费在线观看| 国产精品国产亚洲区久久| 麻豆一区二区三区在线免费| 免费在线观看欧美喷水黄片| 国产精品尹人香蕉综合网| 亚洲天堂精品一区二区| 久久青青草原中文字幕| 日韩欧美一区二区久久婷婷| 九九热精彩视频在线播放| 中文字幕精品少妇人妻| 色好吊视频这里只有精|