pasha

           

          tomcat部署

          準(zhǔn)備java運行環(huán)境
          Tomcat6運行需要Java環(huán)境,需要先下載并安裝J2SE5.0以上的版本。
          下載地址:http://java.sun.com/javase/downloads/index.jsp

          注意:tomcat6.0已經(jīng)不再需要jdk,而只要jre就可以了,因為它采用了自帶的Eclipse JDT來編譯jsp,而不是jdk。

          如果JDK是zip解壓,而不是install安裝的,請設(shè)置系統(tǒng)環(huán)境JAVA_HOME:
          在桌面上右鍵點擊【我的電腦】,選擇【屬性】命令,在出現(xiàn)的對話框中選擇【高級】選項卡,然后單擊【環(huán)境變量】按鈕,添加一個環(huán)境變量:JAVA_HOME,它的值為JDK所在根目錄(比如:c:\jdk,而不是c:\jdk\bin)

          tomcat下載安裝
          tomcat下載地址:http://tomcat.apache.org/
          右側(cè)有從3.3到6.x各個版本的下載鏈接。

          windows下tomcat的安裝很簡單,可以采用exe安裝包的方式進行安裝。基本上一路確定就可以了,安裝用到了java環(huán)境,從jdk的安裝注冊表或者JAVA_HOME這個系統(tǒng)變量里面獲得jdk所在位置(這就是為什么非安裝的jdk需要配置JAVA_HOME的原因,當(dāng)然在后面tomcat運行時也是需要的)。

          安裝后的目錄如下:
          c:\tomcat6.0
             |---bin
             |---conf
             |---lib
             |---logs
             |---temp
             |---webapps
             |---work

          相比之前的版本,在bin和lib這兩個目錄改動比較大,bin目錄不再有一堆的bat文件,精簡為4個文件。而jar文件統(tǒng)一放到新增的lib目錄下,先前版本中下面的3個目錄被刪除合并(參考tomcat5.0.28的結(jié)構(gòu)):
          common(含lib,classes,endorsed三個目錄)
          share(含lib和classes兩個目錄)
          server(含lib,classes,webapps三個目錄)
          此外,examples增加了

          啟動運行tomcat
          安裝的最后一個步驟,可以選擇立即啟動;
          默認情況下,是通過系統(tǒng)的服務(wù)進行啟動的,可以把啟動方式設(shè)置為“自動”

          命令行啟動:
          tomcat/bin/tomcat6    或者tomcat/bin/tomcat6 //TS//tomcat6(注意大寫!下同) 二者是等價的。
          其他的參數(shù)還有:
          tomcat/bin/tomcat6 //RS//tomcat6 ---啟動tomcat6服務(wù)
          tomcat/bin/tomcat6 //US//tomcat6 ---更新tomcat6服務(wù)參數(shù)
          tomcat/bin/tomcat6 //IS//tomcat6 ---安裝tomcat6服務(wù)
          tomcat/bin/tomcat6 //DS//tomcat6 ---刪除tomcat6服務(wù)

          安裝后的bin目錄共有一下幾個文件:
          bootstrap.jar
          tomcat-juli.jar
          tomcat6.exe
          tomcat6w.exe
          其中tomcat6w.exe是監(jiān)控tomcat運行的,可以直接運行,或者縮小到屏幕右下角成為一個小圖標(biāo)。
          直接運行tomcat6w.exe或者“tomcat6w //ES//” 都可以進入監(jiān)控配置窗口;
          或者運行“tomcat6w //MS//”把它縮小到右下角。

          web訪問測試
          啟動后,可以通過瀏覽器進行訪問,測試運行是否正常。
          用IE或者Firefox等瀏覽器,輸入地址:
          http://localhost:8080/       --如果安裝時修改了端口,請把8080用修改后的值替換。
          如果能夠正常瀏覽到tomcat歡迎信息,就是正確了,否則就要檢查安裝是否正確、防火墻的設(shè)置等。
          經(jīng)常遇到的一個問題是端口沖突,最常見的就是80端口被占用,導(dǎo)致服務(wù)無法正常啟動。如果通過tomcat6 //TS//tomcat6來啟動,馬上就能夠發(fā)現(xiàn)提示信息。修改一下tomcat6\conf\server.xml中的端口就能夠解決。

          通常使用80端口的有:
          1. IIS服務(wù)器,因為在windows服務(wù)器上,很多都安裝了IIS,而IIS默認的端口就是80.
          2. skype即時聊天工具,skype的可以穿透防火墻的本領(lǐng),也是通過占用80端口實現(xiàn)的。

          查看端口占用的命令:
          進入windows命令行,輸入:
          netstat -an
          這個命令返回有4列:protocol協(xié)議、local address本機地址、foreign address來訪者地址、status狀態(tài)
          瀏覽本機地址一列,可以看到當(dāng)前主機對外服務(wù)的IP地址、端口都有哪些。
          如果一臺機器有192.168.1.100和192.168.1.101兩個地址,那么:
          0.0.0.0:80表示這臺機器上所有80端口都被使用
          127.0.0.1:80表示127.0.0.1的80被使用,但.100和.101IP地址的80還未使用。
          192.168.1.100:80表示.100IP地址的80端口被使用
          192.168.1.101:80表示.101IP地址的80端口被使用

          想知道哪個程序使用了某個端口,可以通過天網(wǎng)防火墻或者是卡巴斯基獲得。

          Tomcat.5.5.16 安裝 web 項目時執(zhí)行的代碼主要是 HostConfig 類,其中 deployApps() 執(zhí)行部署 web 應(yīng)用的功能;
          protected void deployApps() {

                  File appBase = appBase();
                  File configBase = configBase();
                  // Deploy XML descriptors from configBase
                  deployDescriptors(configBase, configBase.list());
                  // Deploy WARs, and loop if additional descriptors are found
                  deployWARs(appBase, appBase.list());
                  // Deploy expanded folders
                  deployDirectories(appBase, appBase.list());

              }
          從上面這段代碼,我們可以知道 tomcat 在部署 web 項目是按如下順序依次部署的;
          1.首先部署 $CATALINA_HOME/conf/Catalina/localhost 目錄下面的 .xml 文件;
          deployDescriptors(configBase, configBase.list());
          (1)configBase 的值是通過調(diào)用 configBase() 獲取的,
            File file = new File(System.getProperty("catalina.base"), "conf");
                  Container parent = host.getParent();
                  if ((parent != null) && (parent instanceof Engine)) {
                      file = new File(file, parent.getName());
                  }
          file = new File(file, host.getName());
          可以看出 configBase 是由四部分內(nèi)容組成 ;
          System.getProperty("catalina.base") + “conf” + parent.getName()+host.getName()
          parent.getName()host.getName() 是分別取 server.xml
          <Engine name="Catalina" defaultHost="localhost">
          <Host name="localhost" appBase="webapps" … 對應(yīng)的 name 屬性值;
          由此可以得出 configBase 的值為 $CATALINA_HOME/conf/Catalina/localhost

                  (2) 按文件名順序依次讀取 configBase 目錄下面的 xml 文件部署 web 應(yīng)用;
          第一步,首先獲取文件名(不包含 .xml )作為上下文路徑
            String nameTmp = files[i].substring(0, files[i].length() - 4);
                          String contextPath = "/" + nameTmp.replace('#', '/');
          第二步,解析 xml 文件,分析 docBase 的值;
          注意這里的 docBase 的判斷很重要,采用和以前版本完全不同的做法;
          if (!docBase.isAbsolute()) {
                                  docBase = new File(appBase(), context.getDocBase());
                               }
          首先判斷 docBase 是否為絕對路徑,如果不是絕對路徑,在改為
          $CATALINA_HOME/webapps+docBase

                               // If external docBase, register .xml as redeploy first
          if(!docBase.getCanonicalPath().startsWith(appBase().getAbsolutePath()))
          {
          // 這個判斷很重要,這里是判斷如果 docBase 路徑是以
          $ CATALINA_HOME/webapps+docBase 開頭的字符串,則忽略掉了
          isExternal = true;
                                     ...
                                 if (docBase.getAbsolutePath().toLowerCase().endsWith(".war")) {
                                       isWar = true;
                                 }
                             } else{
                 // Ignore specified docBase
               context.setDocBase(null);
          }

          從上面可以看出, <Context path="/xxxx" docBase="xxxx" .docBase 只有為絕對路徑并且該路徑不是以 $CATALINA_HOME/webapps 開頭,才會生效;否則就忽略掉了;


          2.接下來部署 $CATALINA_HOME/webapps/ 目錄下以。 War 結(jié)尾的文件
          deployWARs(appBase, appBase.list());
          (1) 首先仍是把文件名 ( 不用 .war) 作為其應(yīng)用的上下文路徑 ;
          if (files[i].toLowerCase().endsWith(".war")) {
                          // Calculate the context path and make sure it is unique
                          String contextPath = "/" + files[i];
                          int period = contextPath.lastIndexOf(".");
                  (2) 接下來判斷以該上下文路徑 contextPath 是否已經(jīng)裝載過了,如果是則直接退出; if (deploymentExists(contextPath))
                               return;
          3 繼續(xù)判斷以該上下文命名的部署文件是否存在,如 war 文件為 AAA.war, 則判斷在 $CATALINA_HOME/conf/Catalina/localhost/AAA.xml 文件是否存在,如果不存在繼續(xù)執(zhí)行以下操作;
          File xml = new File
                      (configBase, file.substring(0, file.lastIndexOf(".")) + ".xml");
                  if (deployXML && !xml.exists()) {
                    entry = jar.getJarEntry(Constants.ApplicationContextXml);
                    configBase.mkdirs();
          。。。
          先從 wart 文件中讀取 META-INF/context.xml 文件,然后把它 copy
                $CATALINA_HOME/conf/Catalina/localhost/AAA.xml, 注意 war 文件部署文件必須為
          context.xml ,且在 META-INF 目錄下;
          4 )接下來操作和上面類似,部署該 web 應(yīng)用;
          3. 最后是以 $CATALINA_HOME/webapps 目錄下的文件夾為目標(biāo)按文件夾名順序進行部署;
          deployDirectories(appBase, appBase.list());
          (1)同樣先把該文件夾名作為上下文路徑進行部署;
                     File dir = new File(appBase, files[i]);
                      if (dir.isDirectory()) {

                          // Calculate the context path and make sure it is unique
                          String contextPath = "/" + files[i];

          (2)接下來的步驟就基本上是一樣了,首先判斷該上下文路徑是否已經(jīng)部署過,如果是則直接退出,否則和上面一樣,讀取 META-INF/context.xml 文件進行部署;
          注意這里和上面的 war 文件部署稍微有點不同,就是它不會 copy 部署文件 context.xml 文件到 $CATALINA_HOME/conf/Catalina/localhost 中去;
          TOMCAT部署項目有3種方法:1、直接把項目web文件夾放在webapps里2、修改conf里server.xml文件,添加一個Context,
          <Context path="/projectName" reloadable="true" docBase="工程所在路徑\web" workdir="工程所在路徑\work"></Context>3、在Catalina/localhost目錄里,新增一個xml文件,添加一個Context內(nèi)容,指向項目的目錄。<Context path="/目錄名" docBase="e:\example" debug="0" reloadable="true" />
          優(yōu)先級別為:3>2>1
          第3個方法有個優(yōu)點,可以定義別名。服務(wù)器端運行的項目名稱為path,外部訪問的URL則使用XML的文件名。這個方法很方便的隱藏了項目的名稱,對一些項目名稱被固定不能更換,但外部訪問時又想換個路徑,非常有效。
          第2、3還有優(yōu)點,可以定義一些個性配置,如數(shù)據(jù)源的配置等

          posted on 2008-06-23 11:13 pasha 閱讀(1906) 評論(0)  編輯  收藏


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


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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          最常用和實用的CSS技巧

          最新隨筆

          搜索

          最新評論

          • 1.?re: SESSION
          • ?。?!原來是這樣啊 終于明白了 謝了!!
          • --ndj

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 正镶白旗| 江城| 阿城市| 曲水县| 嘉峪关市| 麻城市| 延庆县| 金溪县| 金塔县| 咸丰县| 岑巩县| 无极县| 崇礼县| 新郑市| 普安县| 山丹县| 永靖县| 昌吉市| 玛沁县| 青川县| 弥勒县| 垫江县| 巩留县| 麻城市| 明水县| 云林县| 巴南区| 绥滨县| 民乐县| 商河县| 南京市| 龙胜| 新郑市| 临洮县| 安福县| 色达县| 元朗区| 汉沽区| 建阳市| 临颍县| 得荣县|