posts - 4,comments - 2,trackbacks - 0
          Tomcat是jsp/servlet container,對靜態(tài)資源(如HTML文件或圖像文件)的處理速度,以及提供的Web服務(wù)器管理功能方面都不如其他專業(yè)的HTTP服務(wù)器,如IIS和Apache服務(wù)器。
          我是以Tomcat5.0.16,apache_2.0.55Http Server,mod_jk-apache-2.0.55.so jk插件進行集成。
          一、基本原理
          Tomcat的兩個常用連接器,
          第一個連接器監(jiān)聽8080端口,負責(zé)建立HTTP連接。在通過瀏覽器訪問Tomcat服務(wù)器的Web應(yīng)用時,使用的就是這個連接器。  
          第二個連接器監(jiān)聽8009端口,負責(zé)和其他的HTTP服務(wù)器建立連接。在把Tomcat與其他HTTP服務(wù)器集成時,就需要用到這個連接器。

          查看conf/server.xml文件,
          <Service?name="Catalina">
          ????
          <Connector?acceptCount="100"?connectionTimeout="20000"?port="8080"?redirectPort="8443"?disableUploadTimeout="true">
          ????
          </Connector>
          ????
          <Connector?protocol="AJP/1.3"?port="8009"?redirectPort="8443"?protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler">
          ????
          </Connector>
          ????
          <Engine?defaultHost="localhost"?name="Catalina">
          ??????
          <Host?appBase="webapps"?name="localhost">
          ????????
          <Logger?className="org.apache.catalina.logger.FileLogger"?suffix=".txt"?prefix="localhost_log."?timestamp="true"/>
          ??????
          </Host>
          ??????
          <Logger?className="org.apache.catalina.logger.FileLogger"?suffix=".txt"?prefix="catalina_log."?timestamp="true"/>
          ??????
          <Realm?className="org.apache.catalina.realm.UserDatabaseRealm"/>
          ????
          </Engine>
          ??
          </Service>
          根據(jù)以上Service,可以tomcat的安裝目錄找到conf/Catalina/localhost目錄,里面的XML文件為配置該service所有的Context,一個xml文件對應(yīng)一個context配置。
          打開admin.xml,
          <Context?privileged="true"?path="/admin"?displayName="Tomcat?Administration?Application"?docBase="../server/webapps/admin">
          ??
          <Logger?className="org.apache.catalina.logger.FileLogger"?suffix=".txt"?prefix="localhost_admin_log."?timestamp="true"/>
          </Context>
          可以看到,配置了一個/admin的context,其docBase為/server/webapps/admin。
          二、集成目標
          我們對tomcat和http 服務(wù)器進行集成的目標就是:讓http服務(wù)器在80端口進行監(jiān)聽,如果碰到訪問靜態(tài)的html/圖片文件訪問,直接由http服務(wù)器進行處理。如果碰到j(luò)sp/servlet等訪問,則通過jk插件,轉(zhuǎn)發(fā)到tomcat監(jiān)聽的8009端口,由tomcat處理。
          三、實施步驟
          1、安裝apache http server, tomcat. 從略。
          2、安裝jk插件。
          把mod_jk-apache-2.0.55.so拷貝到http server的/modules目錄即可。
          3、配置apache htpp server,打開conf/httpd.conf文件,
          (1)修改Website根目錄,
          找到DocumentRoot,改為你想放置網(wǎng)站根目錄的地方
          DocumentRoot "D:/java/Tomcat5.0/webapps/ROOT"
          (2)加載jk插件及配置屬性
          #加載模塊
          LoadModule?jk_module?modules/mod_jk-apache-
          2.0.55.so
          #工作屬性文件
          JkWorkersFile?conf/workers.properties
          #日志存放
          JkLogFile?logs/mod_jk2.log
          #日志等級
          JkLogLevel?info
          #日期格式
          JkLogStampFormat?
          "[%a?%b?%d?%H:%M:%S?%Y]"
          #日志格式
          JkRequestLogFormat?
          "%w?%V?%T"
          #Url轉(zhuǎn)發(fā)到tomcat
          JkMount?/*.jsp?worker1
          JkMount?/*.page?worker1
          4、新建conf/workers.properties
          #讓mod_jk模塊知道Tomcat
          workers.tomcat_home
          =D:\java\Tomcat5.0
            
          #讓mod_jk模塊知道j2sdk
          workers.java_home
          =D:\java\j2se

          #所配置的Tomcat列表
          worker.list
          =worker1

          #工作端口,若沒占用則不用修改
          worker.worker1.port
          =8009  
            
          #Tomcat服務(wù)器的地址
          worker.worker1.host
          =localhost
            
          #類型
          worker.worker1.type
          =ajp13
          5、配置tomcat
          安裝tomcat后,會發(fā)現(xiàn)webapps已經(jīng)有許多目錄,其中已有一個Root為tomcat默認的"/"context.
          將tomcat webapps下的一些不需要的目錄刪去,把Root下的文件刪除,并把你需要配置的網(wǎng)站內(nèi)容拷貝到此目錄下。
          找到conf/Catalina/localhost目錄,刪除一些沒用的xml文件,有些xml文件是tomcat啟動時按照webapps的目錄自動產(chǎn)生的context。
          四、開發(fā)時配置
          在進行開發(fā)時,如果我們使用的是tomcat,我們可以采用此種方法進行配置。
          1、通過http://localhost:6060/index.jsphttp://localhost/index.jsp訪問效果是一樣的,
          http://localhost/aBigPicture.gif的訪問可能比直接訪問tomcat要快多了。
          2、進入http://localhost:6060/admin,默認user:admin,password為空,
          查看service下面的context,最好把當前開發(fā)的web的context的reloadable設(shè)置為true,我們所做的修改tomcat會自動重新加載,不用重啟tomcat就能立即看到新的變化。
          3、在eclipse中將網(wǎng)站的源代碼發(fā)布到tomcat中有兩種方法,
          一種是采用eclipse自帶的depoly功能,將web發(fā)布到webapps/ROOT目錄,或任一目錄,對應(yīng)的只是修改conf/Catalina/localhost的xml文件。
          另一種方法是采用ant,一個xml文件用于全發(fā)布(clean,compile,java,copy),另一個xml文件則只發(fā)布修改的(compile,copy)。
          小項目用第一種方便,每次修改了源代碼,只需刷新一下,eclipse就自動幫你depoly到目的地;
          當采用第二種時,每次小修改時,需要運行一次ant,把修改的內(nèi)容重新拷貝并發(fā)布過去;如果發(fā)布的內(nèi)容很臟時,有時需全發(fā)布(clean,compile,java,copy)。

          配置httpd.conf和workers.properties的詳細內(nèi)容,請參考:
          http://tomcat.apache.org/connectors-doc/
          posted @ 2006-04-06 19:44 Steven Liu 閱讀(634) | 評論 (0)編輯 收藏

          問題描述:
          已有如下代碼,

          < body? onLoad ="MM_timelinePlay('Timeline1')" >


          </ body >
          即document.body.onload事件已經(jīng)綁定了一個函數(shù)。
          現(xiàn)需要onload時激活另外一個函數(shù),如enetgetMsg(),如何處理?

          解決方案:
          alert(document.body.onload.toString())
          彈出窗口的內(nèi)容為:
          function anonymous()
          {
            MM_timelinePlay('Timeline1')
          }
          可見,當對onload綁定一個函數(shù)時,javascript自定義了一個函數(shù),在該自定義函數(shù)體內(nèi)調(diào)用了該綁定函數(shù)。
          解決方法一:
          重新寫一函數(shù),
          function?bodyOnload(){
          MM_timelinePlay('Timeline1');
          enetgetMsg();
          }
          <body?onLoad="bodyOnload()">
          解決方法二:
          利用javascript重定義函數(shù)的功能,
          newBodyload="enetgetMsg();";
          if(document.body.onload)
          {
          eval(document.body.onload.toString().replace('anonymous()','oldBodyload()'));
          document.body.onload
          =new?Function("oldBodyload();"+newBodyload);
          }

          else?document.body.onload=new?Function(newBodyload);
          顯然,第二種方法更好,因為這種方法實現(xiàn)時不必關(guān)心以前這個事件綁定了多少個函數(shù),不需修改原先的代碼,透明地增加一個函數(shù)。(decorate模式:透明地增加功能
          posted @ 2006-04-06 15:59 Steven Liu 閱讀(795) | 評論 (2)編輯 收藏
          前段時間參加一個linux/C++項目,碰到一些問題,現(xiàn)逐步整理出來。
          我使用的RHEL的內(nèi)核版本是2.6.9
          -11EL。
          問題描述:

          1 、在 RHEL4.0 盤中自帶了 MySQL4.10 的數(shù)據(jù)庫,客戶端的為 3.25 版本。在安裝時,選擇安裝此數(shù)據(jù)庫,裝完后卻發(fā)現(xiàn)不能用 L ,可能是因為鏈接庫的問題。

          2 、下載 MySQL4.16 的安裝文件,包括 shared server client ,安裝完成后,發(fā)現(xiàn)還是不能用 L

          冒昧猜測:
          RHEL4.0中自帶的mysql根本就不能用,并且誤導(dǎo)眾多人不相信自帶的東西不能用。

          建議安裝
          MySQL
          之前,將原先已安裝的任何有關(guān) MySQL 的包進行清除。

          主要針對以下兩種 MySql 包進行清除:

          1 RHEL4.0 自帶的 MySql 包,即使在安裝 RHEL4.0 的時候,沒有選擇安裝 Mysql ,也會默認安裝 Mysql3.23 的客戶端。因此在安裝之前,應(yīng)予以清除。

          查看已安裝的:

          >rpm –qa| grep mysql

          然后刪除每個已安裝的包,

          >rpm –e mysql-client-3.25***

          如果系統(tǒng)提示此包有被別的包使用,這時需要先刪除這個依賴包,然后再一步步地往上刪除。請具體情況具體分析,多看屏幕提示 J

          2 、刪除一些自已安裝的 rpm 包。

          查看已安裝的:

          >rpm –qa|grep MySQL

          同樣地,然后一個個地刪除已安裝的包,

          >rpm –e MySQL-server*****


          采用編譯
          MySQL
          源碼的形式安裝 MySQL ,這樣比較具有通用性。
          感悟:編譯源代碼安裝軟件是最過硬的安裝方法,有時這是很好的解決方案。當然代價是安裝過程比較煩瑣。

          下載 MySQL 的源代碼,這里假設(shè)下載的是 mysql-VERSION.tar.gz 這樣的一個包,具體的 VERSION 代表具體的版本:

          1 、為 ‘mysqld’ 增添一個登陸用戶和組。如果前面已安裝過mysql,可能已存在組和用戶。

          shell> groupadd mysql
          shell> useradd -g mysql mysql

          2 、將源碼解壓后一個目錄,最好把源碼放到 tmp 目錄,解到此目錄中。具體解包,可以采用 RHEL4 中的圖形操作解壓縮方法,不必打命令。

          shell> gunzip < mysql-VERSION.tar.gz | tar -xvf –

          3 、進入已解壓縮的目錄

          shell> cd mysql-VERSION

          4 、配置安裝, /usr/local/mysql 為安裝路徑

          shell> ./configure --prefix=/usr/local/mysql

          5 、編譯與安裝

          shell> make

          shell> make install

          6 、拷貝選項模板文件

          shell> cp support-files/my-medium.cnf /etc/my.cnf

          7 、安裝數(shù)據(jù)庫

          shell> cd /usr/local/mysql

          shell> bin/mysql_install_db
          8 、更改文件夾讀寫權(quán)限

          shell> chown -R root .

          shell> chown -R mysql var

          shell> chgrp -R mysql .

          9 、啟動 mysql

          shell> bin/mysqld_safe &
          posted @ 2006-03-31 17:57 Steven Liu 閱讀(899) | 評論 (0)編輯 收藏

          公司最近接到一個小項目,幫一個學(xué)院做一個網(wǎng)站。經(jīng)理安排了我們兩個人做,時間只有兩周。BTW,我們公司有自己的CMS產(chǎn)品,所謂的做網(wǎng)站只是基于這個進行功能定制和擴充。
          我剛從其它項目退下來,這個項目不熟悉,經(jīng)理要我做部分模塊,然后由那人負責(zé)集成。
          我們兩個人接到任務(wù)后,你做你的,我做我的,這其間經(jīng)理也沒過問過。我們倆都以為這項目處于癱瘓狀態(tài),因為一直沒有收到客戶的明確需求,不知道要確切要上些啥。
          這星期一我請假了,沒來公司。星期二一到公司,經(jīng)理問我的模塊做得怎樣了?我心里直笑,我那點小東西早搞定了。星期二、星期三自己仍然漫不經(jīng)過地把自己做得那點東西改改。
          星期四了,經(jīng)理要求看成果了,說是星期五要到客戶里去演示。我跟那個兄弟一看這架式,趕快合并。弄了半天,首頁沒排齊。經(jīng)理是個老好人,也沒發(fā)什么火,只是叫我們倆合起來把它弄好。
          我這邊做的時候mysql安裝的時候設(shè)置的編碼是gbk,而他那邊做的時候mysql安裝的時候設(shè)置的編碼是latin-1,我的數(shù)據(jù)庫集成到他那邊的mysql去的話,糟糕,全是亂碼。
          急……還好,找到了資料,知道了mysql支持數(shù)據(jù)庫級別的編碼設(shè)置,把自己機器上的mysql改為latin-1,然后重新建數(shù)據(jù)庫

          CREATE ? DATABASE ?`forum`? DEFAULT ? CHARACTER ? SET ?gbk?COLLATE?gbk_chinese_ci;
          再測試,yeah,亂碼問題解決。
          心里暗想,把我數(shù)據(jù)庫導(dǎo)到他的機子里,竟然不行!
          Mysql服務(wù)器設(shè)置(latin-1),建了一個數(shù)據(jù)庫設(shè)置為gbk------>遷移到另一臺mysql上面怎么辦?
          最后在他機子上重建數(shù)據(jù)庫解決。
          那兄弟家較遠,先回了;經(jīng)理也先回了。最后我一個人忙到快11點,才好不容易把頁面排版,集成的問題搞定。BTW,那兄弟人品好,做人到位,好學(xué)。所以為他做點不,心里很樂意。
          經(jīng)理今天叫我們到會議室,聊了快二個小時。感覺還有點道理,小記一下。
          1、分工后,只有兩人以上參與,自己要交流。事實:我倆感情是好,可是交流的都是生活上的事,技術(shù)上的交流也是泛泛而談,偏偏對這種小項目的事,我倆都不怎的愛交流。
          2、要有計劃。預(yù)則立啊,這道理很淺顯。事實:我倆都漫不經(jīng)心,沒有把這項目太當回事,更不要說計劃。
          3、要有主次之分。網(wǎng)站最重要的是美觀。首頁都對不齊,其它的再好也沒用。
          4、微軟的“多小多原則”。小版本,多發(fā)布,多階段。帶bug的軟件是可以發(fā)布,關(guān)鍵是主要的地方要拿得出手。這一句意義最大,做軟件不要鉆牛角尖,太鉆技術(shù)細節(jié),結(jié)果弄得結(jié)點到了時首頁還沒對齊。
          結(jié)論:
          1、做軟件不要懶,該整理的時候一定要整理。
          2、做軟件不要省,該配置的時候一定要配置,兩個人開發(fā)也一定要配版本管理。
          3、做軟件要注意宏觀。
          posted @ 2006-03-31 17:07 Steven Liu 閱讀(286) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 嘉义市| 高密市| 信宜市| 长子县| 桓仁| 石渠县| 龙井市| 永和县| 古蔺县| 巴塘县| 色达县| 墨玉县| 大石桥市| 偃师市| 宝丰县| 永康市| 启东市| 海林市| 神池县| 成安县| 乐东| 饶平县| 新巴尔虎右旗| 关岭| 大方县| 申扎县| 中方县| 丰镇市| 桐柏县| 长治市| 连平县| 囊谦县| 黄石市| 府谷县| 大宁县| 苏尼特左旗| 石渠县| 岳普湖县| 桦南县| 金山区| 绥化市|