<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    https://www.iflym.com/index.php/code/use-embeded-tomcat-to-javaee-start-tomcat.html

    昨天在網上研究了下關于將tomcat嵌入到主程序中進行運行,而不是像以前將一個web項目copy到tomcat中進行運行。之所以這樣做的原 因,即是因為項目部署到客戶方,在進行更新的時候,需要手動地進行更新,再把相應代碼copy到tomcat,然后再運行。運用embeded tomcat就可以將項目與tomcat分開,在進行更新時,先使用自定義的程序進行自動化更新,待更新完畢之后,再啟動tomcat(或其它 javaee容器)進行項目運行。

         這樣做的最終效果就是修改了項目的運行方式。原先的運行方式是以tomcat為中心,由tomcat來啟動和終止項目,現在是由我們的啟動程序 為中心,由啟動程序來負責啟動和終止項目。就相當于現在流行的cs程序一樣,有單獨的啟動腳本,在啟動時進行環境預初始化,更新程序以及其它操作,待完成 之后再進行最終的項目啟動。

         這篇主要講解如何使用embeded tomcat在代碼中進行啟動和終止。網上的一般文章均為tomca5.x來做,這里使用了最新的tomcat7,因為tomcat7為embeded開 發,單獨發布了org.apache.tomcat.embed包,以進行獨立的embed開發。以下是相應的maven包

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>7.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-util</artifactId>
                <version>7.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <version>7.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-logging-juli</artifactId>
                <version>7.0.2</version>
            </dependency>

        使用了embed包中的core包,以及用于編譯jsp的jasper包,然后是工具類以及進行上場記錄的logging-juli包。開始寫代碼:

    1
    2
    3
    4
    5
    6
    7
    //設置工作目錄
            String catalina_home = "d:/";
            Tomcat tomcat = new Tomcat();
            tomcat.setHostname("localhost");
            tomcat.setPort(startPort);
            //設置工作目錄,其實沒什么用,tomcat需要使用這個目錄進行寫一些東西
            tomcat.setBaseDir(catalina_home);

        上面使用了Tomcat類來進行啟動類,在tomcat7以前均是使用一個叫Embed類來進行啟動,在tomcat7之后,embed類被不建 議使用,而建議使用新的Tomcat類來進行啟動了。然后設置主機名,端口,再設置一個工作目錄。這個工作目錄可以是任意目錄,主要是tomcat需要這 個目錄來記錄一些東西,比如記錄word信息,日志信息(如果配置了日志的話),以及臨時文件存儲等。

    1
    2
    3
    4
    5
    6
    7
    8
    //設置程序的目錄信息
            tomcat.getHost().setAppBase("e:/");
            // Add AprLifecycleListener
            StandardServer server = (StandardServer) tomcat.getServer();
            AprLifecycleListener listener = new AprLifecycleListener();
            server.addLifecycleListener(listener);
            //注冊關閉端口以進行關閉
            tomcat.getServer().setPort(shutdownPort);

        上面的代碼,首先設置我們的項目程序所在的appbase,即放項目代碼的地方。在通常的tomcat配置中,這個目錄一般是webapps。接 著設置一個listener,這個listener主要是負責啟動一些比如html native支持程序以及ipv6等信息配置(可以忽略)。接著是配置一個關閉的注冊端口,當向這個端口發送信息時,就可以達到關閉tomcat的目的 (后面會講)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //加載上下文
            StandardContext standardContext = new StandardContext();
            standardContext.setPath("/aa");//contextPath
            standardContext.setDocBase("aa");//文件目錄位置
            standardContext.addLifecycleListener(new Tomcat.DefaultWebXmlListener());
            //保證已經配置好了。
            standardContext.addLifecycleListener(new Tomcat.FixContextListener());
            standardContext.setSessionCookieName("t-session");
            tomcat.getHost().addChild(standardContext);

        我們單獨使用了一個Context來為這個host添加上下文,tomcat本身提供一個方法tomcat.addWeb方法來添加項目包,不過 由于這里需要單獨設置一個tomcat的sessionName,所以使用與與tomcat.addWeb實現類似的方法來添加一個項目包。
        以上代碼中有兩個需要注意的listener,一個是DefaultWebXmlListener,這個是由tomcat加載一些默認的配置信 息,比如jspServlet,以及一些繁復的mime/type信息;加上這個,就不需要我們自己去寫這么多的配置,因為每個項目都需要這些。這個配置 與tomcat目錄下的conf/web.xml中的配置一樣,只不過這里是代碼化了。第二個是FixContextListener,這個主要是在項目 部署完后,將這個上下文設置為configured,表示已經配置好了(不然,tomcat啟動時會報錯,即相應上下文還未配置好)。
        配置OK了之后,就是啟動tomcat了:

    1
    2
    tomcat.start();
            tomcat.getServer().await();

        啟動tomcat,并讓tomcat在關閉端口上監聽。如果沒有最后一句,程序將直接結束,保證監聽之后,tomcat將一直監聽關閉事件,待有關閉事件之后才結束當前程序。所以如果想要關閉當前的tomcat,只需要向關閉端口發送一些信息即可:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static void shutdown() throws Exception {
            Socket socket = new Socket("localhost", shutdownPort);
            OutputStream stream = socket.getOutputStream();
            for(int i = 0;i < shutdown.length();i++)
                stream.write(shutdown.charAt(i));
            stream.flush();
            stream.close();
            socket.close();
        }

        這樣即可達到關閉tomcat的目的。

         實際上看整個項目代碼,項目代碼的運行,就是一個配置一個基礎的server.xml(即tomcat目錄下的 conf/server.xml),先配置運行端口,關閉監聽端口;然后配置運行的host以及添加一個上下文context,最后就開始運行并開始監 聽。對照這個程序,再看一下server.xml中的配置信息,就很容易明白以上這段代碼了。

    posted on 2016-07-18 14:42 SIMONE 閱讀(4536) 評論(0)  編輯  收藏 所屬分類: JAVAtomcat
    主站蜘蛛池模板: 国产成人无码免费网站| 亚洲精华国产精华精华液| WWW免费视频在线观看播放| 全亚洲最新黄色特级网站| 国产亚洲高清在线精品不卡| 色www永久免费视频| 国产av无码专区亚洲av毛片搜| 免费看国产一级片| 曰韩无码AV片免费播放不卡| 久久久青草青青国产亚洲免观 | 色偷偷女男人的天堂亚洲网 | 亚洲国产精品免费视频| 亚洲国产综合专区在线电影| 免费视频成人片在线观看| 91亚洲视频在线观看| 四虎永久在线精品免费网址| 亚洲国产精品无码久久98| 免费v片视频在线观看视频| 一级做α爱过程免费视频| 国产亚洲综合网曝门系列| 免费A级毛片无码A∨| 亚洲w码欧洲s码免费| 国产国产人免费人成免费视频| 一本久久免费视频| 亚洲av中文无码乱人伦在线播放| 在线日本高清免费不卡| 亚洲欧美国产国产一区二区三区| 免费A级毛片无码A∨男男| 精品视频在线免费观看| 亚洲国产91在线| 国产精品亚洲美女久久久| 在线观看www日本免费网站| 鲁死你资源站亚洲av| 亚洲精品乱码久久久久久中文字幕 | 337p日本欧洲亚洲大胆精品555588| 成人女人A级毛片免费软件| 无码一区二区三区亚洲人妻| 久久精品国产精品亚洲艾| 女人18毛片a级毛片免费视频| 一级做a爰片性色毛片免费网站| 久久亚洲日韩精品一区二区三区 |