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

          查看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>
          根據以上Service,可以tomcat的安裝目錄找到conf/Catalina/localhost目錄,里面的XML文件為配置該service所有的Context,一個xml文件對應一個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 服務器進行集成的目標就是:讓http服務器在80端口進行監聽,如果碰到訪問靜態的html/圖片文件訪問,直接由http服務器進行處理。如果碰到jsp/servlet等訪問,則通過jk插件,轉發到tomcat監聽的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,改為你想放置網站根目錄的地方
          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轉發到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服務器的地址
          worker.worker1.host
          =localhost
            
          #類型
          worker.worker1.type
          =ajp13
          5、配置tomcat
          安裝tomcat后,會發現webapps已經有許多目錄,其中已有一個Root為tomcat默認的"/"context.
          將tomcat webapps下的一些不需要的目錄刪去,把Root下的文件刪除,并把你需要配置的網站內容拷貝到此目錄下。
          找到conf/Catalina/localhost目錄,刪除一些沒用的xml文件,有些xml文件是tomcat啟動時按照webapps的目錄自動產生的context。
          四、開發時配置
          在進行開發時,如果我們使用的是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,最好把當前開發的web的context的reloadable設置為true,我們所做的修改tomcat會自動重新加載,不用重啟tomcat就能立即看到新的變化。
          3、在eclipse中將網站的源代碼發布到tomcat中有兩種方法,
          一種是采用eclipse自帶的depoly功能,將web發布到webapps/ROOT目錄,或任一目錄,對應的只是修改conf/Catalina/localhost的xml文件。
          另一種方法是采用ant,一個xml文件用于全發布(clean,compile,java,copy),另一個xml文件則只發布修改的(compile,copy)。
          小項目用第一種方便,每次修改了源代碼,只需刷新一下,eclipse就自動幫你depoly到目的地;
          當采用第二種時,每次小修改時,需要運行一次ant,把修改的內容重新拷貝并發布過去;如果發布的內容很臟時,有時需全發布(clean,compile,java,copy)。

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

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

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


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

          解決方案:
          alert(document.body.onload.toString())
          彈出窗口的內容為:
          function anonymous()
          {
            MM_timelinePlay('Timeline1')
          }
          可見,當對onload綁定一個函數時,javascript自定義了一個函數,在該自定義函數體內調用了該綁定函數。
          解決方法一:
          重新寫一函數,
          function?bodyOnload(){
          MM_timelinePlay('Timeline1');
          enetgetMsg();
          }
          <body?onLoad="bodyOnload()">
          解決方法二:
          利用javascript重定義函數的功能,
          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);
          顯然,第二種方法更好,因為這種方法實現時不必關心以前這個事件綁定了多少個函數,不需修改原先的代碼,透明地增加一個函數。(decorate模式:透明地增加功能
          posted @ 2006-04-06 15:59 Steven Liu 閱讀(795) | 評論 (2)編輯 收藏
          前段時間參加一個linux/C++項目,碰到一些問題,現逐步整理出來。
          我使用的RHEL的內核版本是2.6.9
          -11EL。
          問題描述:

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

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

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

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

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

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

          查看已安裝的:

          >rpm –qa| grep mysql

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

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

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

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

          查看已安裝的:

          >rpm –qa|grep MySQL

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

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


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

          下載 MySQL 的源代碼,這里假設下載的是 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 、安裝數據庫

          shell> cd /usr/local/mysql

          shell> bin/mysql_install_db
          8 、更改文件夾讀寫權限

          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 閱讀(898) | 評論 (0)編輯 收藏

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

          CREATE ? DATABASE ?`forum`? DEFAULT ? CHARACTER ? SET ?gbk?COLLATE?gbk_chinese_ci;
          再測試,yeah,亂碼問題解決。
          心里暗想,把我數據庫導到他的機子里,竟然不行!
          Mysql服務器設置(latin-1),建了一個數據庫設置為gbk------>遷移到另一臺mysql上面怎么辦?
          最后在他機子上重建數據庫解決。
          那兄弟家較遠,先回了;經理也先回了。最后我一個人忙到快11點,才好不容易把頁面排版,集成的問題搞定。BTW,那兄弟人品好,做人到位,好學。所以為他做點不,心里很樂意。
          經理今天叫我們到會議室,聊了快二個小時。感覺還有點道理,小記一下。
          1、分工后,只有兩人以上參與,自己要交流。事實:我倆感情是好,可是交流的都是生活上的事,技術上的交流也是泛泛而談,偏偏對這種小項目的事,我倆都不怎的愛交流。
          2、要有計劃。預則立啊,這道理很淺顯。事實:我倆都漫不經心,沒有把這項目太當回事,更不要說計劃。
          3、要有主次之分。網站最重要的是美觀。首頁都對不齊,其它的再好也沒用。
          4、微軟的“多小多原則”。小版本,多發布,多階段。帶bug的軟件是可以發布,關鍵是主要的地方要拿得出手。這一句意義最大,做軟件不要鉆牛角尖,太鉆技術細節,結果弄得結點到了時首頁還沒對齊。
          結論:
          1、做軟件不要懶,該整理的時候一定要整理。
          2、做軟件不要省,該配置的時候一定要配置,兩個人開發也一定要配版本管理。
          3、做軟件要注意宏觀。
          posted @ 2006-03-31 17:07 Steven Liu 閱讀(285) | 評論 (0)編輯 收藏
          僅列出標題  
          主站蜘蛛池模板: 房山区| 原阳县| 临沧市| 潞城市| 长沙市| 凭祥市| 和平县| 绥滨县| 赤水市| 长治市| 贵溪市| 新密市| 老河口市| 曲水县| 北海市| 定安县| 罗定市| 安宁市| 连州市| 高阳县| 林甸县| 西青区| 临夏市| 绿春县| 南川市| 诸城市| 长子县| 荆州市| 芜湖市| 隆尧县| 岳阳市| 游戏| 陆丰市| 武功县| 新民市| 蓬莱市| 平果县| 琼海市| 南投县| 无锡市| 鸡东县|