2002年10月21日

Apache與Tomcat整合方法

  • Install mod_JK
    將mod_jk.so(http://jakarta.apache.org/tomcat/)複製到/www/modules/mod_jk.so
    如果找不到已經編譯好的檔案,請下載原始碼來編譯,方法如下:
    將下載的檔案jakarta-tomcat-connectors-jk-1.2-src-current.tar.gz放到一各暫存資料夾(/usr/local/src/)解壓縮
    cd /usr/local/src/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native
    ./buildconf.sh
    ./configure --with-apxs=/www/bin/apxs
    make ; make install
    再把產生的mod_jk.so拷貝到/www/modules/
    請注意mod_jk.so的屬性是否為可執行以及擁有人屬性應該跟執行apache的人一樣
  • 在/www/conf/下建立一個workers.properties的檔案,內容如下,基本上不需要修改內容:
    # In Unix, we use forward slashes:
    ps=/
    # list the workers by name
    worker.list=tomcat
    worker.tomcat.port=8009
    worker.tomcat.host=localhost
    worker.tomcat.type=ajp13
  • 變更檔案擁有者屬性,改成可執行apache的人chown apache.users workers.properties
  • 修改/www/conf/httpd.conf
  • 在LoadModule那一大串宣告裡加上一段
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile /www/conf/workers.properties
    JkLogFile /www/logs/mod_jk.log
    JkLogLevel info
  • 在"DocumentRoot"附近加上
    JkMount /servlets/* tomcat
    JkMount /*/servlets/* tomcat
    JkMount /*.jsq tomcat
    JkMount /*.jsp tomcat
    主要是在宣告要mount進去的目錄,例如JkMount /*.jsp表示會將Tomcat的ROOT目錄底下的所有.jsp檔案都看成跟apache的文件目錄下一樣,類似IIS的虛擬路徑。
  • 修改/www/tomcat/conf/server.xml
    尋找

    把註解取消掉
  • 啟動tomcat和apache
    /www/tomcat/bin/startup.sh
    Using CATALINA_BASE: /www/tomcat
    Using CATALINA_HOME: /www/tomcat
    Using CATALINA_TMPDIR: /www/tomcat/temp
    Using JAVA_HOME: /usr/local/jdk
    /www/bin/apachectl startssl
    httpd (pid 729) already running

在Apache上安裝SSL支援

前言:

要讓 Apache可以支援SSL有兩個做法,分別是是安裝Apache-SSL及安裝mod_ssl模組,其中Apache-SSL專案使用的是舊版的 apache,目前只有進行到1.3.27這個版本,2.0以上的Apache目前(2004/7/1)還無法使用,檔案可以到www.apache-ssl.org及www.apache.org 下載。而mod_ssl則必須到http://www.modssl.org下載mod_ssl模組,並重新編譯apache讓他可以支援mod_ssl 模組。目前我在使用apache-ssl並讓他和tomcat整合時,發現無法載入模組,也許是我編譯apache時沒有加上參數,這個會再有空時在測 試。

安裝:

不管是哪一種解決方案,SSL加解密的部分都需要openssl軟體來協助,www.openssl.org,在RedHat的套件裡,預設應該都是有安裝的。在安裝前建議先執行以下指令

ln -s /usr/kerberos/include/com_err.h /usr/include/

ln -s /usr/kerberos/include/profile.h /usr/include/

ln -s /usr/kerberos/include/krb5.h /usr/include/

不然當我們編譯ssl的時候有可能會出現問題

一、 Apache-SSL解決方案:
  • 先 到http://www.apache-ssl.org下載最新的apache-ssl軟體,下載後由最新版本的序號為準,再到 www.apache.org找相對應的版本,例如在www.apache-ssl.org找到apache_1.3.27+ ssl_1.48.tar.gz,表示這個版本支援的是apache 1.3.27,所以必須要到http://www.apache.org再下載apache_1.3.27-x86_64-whatever- linux22.tar.gz像這樣的檔案
  • 到/usr/local/src(暫存原始檔用)資料夾,將apache_1.3.27- x86.tar.gz解壓縮(tar zxvf apache_1.3.27-x86_64-whatever-linux22.tar.gz ),解完之後進入apache的目錄裡,再將apache_1.3.27+ssl_1.48.tar.gz的檔案解到到相同的目錄裡。
  • 執行”./FixPatch openssl的所在目錄”,這個程式會將apache更新成可以支援SSL的版本,如果一切正常的話,會顯示Patch完成。
    一 般常遇到的應該是找不到openssl安裝目錄的錯誤訊息為多,根據我測試的結果當我指定我的openssl位址(我安裝在 /usr/bin/openssl)不管我指定的是./FixPatch /usr/bin/openssl或./FixPatch /usr/bin/都會說找不到該檔案,但是如果用./FixPatch /usr/就可以正常完成,這點相當詭異。
  • 接下來執行./configure 來產生安裝所需要的檔案,我使用的是最陽春的./configure --prefix="/wwwssl/",這邊的—prefix為指定安裝目錄,所以事實上我沒有將其他的模組一起編譯進去。
  • 產生正確的Makefile之後,就可以開始編譯Apache-SSL,指令為
    make ; make install
  • 安 裝完成之後,apache就會被安裝在/wwwssl的目錄底下,接下來產生SSL的鑰匙對及證書請參考第三節,產生後的xxx.key及xxx.crt 請放在同一個目錄裡方便控管,並將屬性改成chmod 400,在這個例子中,我放在/wwwssl/conf/目錄底下。
  • 修改 /wwwssl/conf/httpsd.conf檔案,有一段設定為#Listen 3000,如果這台機器還要提供一般的http服務的話,請將#拿掉,並將3000改成80,然後再最後一行加上Include ssl.conf,再加上這一段文字:(請依照需求填寫)

    Listen w.x.y.z:443

    DocumentRoot /wwwssl/htdocs

    SSLCertificateFile /wwwssl/conf/xxx.crt

    SSLCertificateKeyFile /wwwssl/conf/xxx.key

    SSLVerifyClient 0

    SSLVerifyDepth 10

    SSLBanCipher NULL-MD5:NULL-SHA

    SSLEnable
  • 存檔離開後,請在/wwwssl/conf/底下建立一個ssl.conf檔案,這個檔案主要在指定cache的位址:

    SSLDisable

    SSLNoCAList

    SSLRandomFile file /var/tmp 1024

    SSLCacheServerPath /wwwssl/bin/gcache

    SSLCacheServerPort logs/gcache_port

    SSLCacheServerRunDir /tmp

    SSLSessionCacheTimeout 15
  • 最後再幫httpsd.conf建立一個軟鏈結到httpd.conf:
    ln -s httpsd.conf httpd.conf
  • 啟動apache,/wwwssl/bin/httpsdctl start。
  • 打開瀏覽器觀看成果吧
    http://w.x.y.z/index.html.zh
    https://w.x.y.z/index.html.zh
二、 Mod_SSL解決方案:
  • 安裝Mod_SSL,方法省略(可直接下載RPM檔來安裝)
  • 將最新版Apache解壓縮,並進入該目錄,測試的版本是httpd-2.0.49.tar.gz
  • 產生Apache設定檔,必須將mod_ssl支援編譯進去
    ./configure --prefix="/www" --enable-mods-shared=most --enable-so --enable-ssl=static --with-ssl=/usr/include/openssl/
    make; make install進行安裝
  • 安裝完成之後在/www/conf/會產生一個ssl.conf檔,尋找
    SSLCertificateFile /www/conf/adbanner.crt 和
    SSLCertificateKeyFile /www/conf/adbanner.key 將正確的key和證書位址帶入
  • 啟動apache /www/bin/apache startssl
  • 打開瀏覽器觀看成果吧
    http://w.x.y.z/index.html.zh
    https://w.x.y.z/index.html.zh
三、 產生憑證及鑰匙對:
  • openssl req -new > xxx.csr,接下來會問一些問題,請按照自己的環境回答,其中Common Name:這項請回答你的網址,以後才不會出現困擾。也請您牢記您的密碼。
  • openssl rsa -in privkey.pem -out xxx.key 利用第一個步驟產生的檔案來建立一把私鑰。(這裡使用RSA編碼),這個步驟必須輸入第一個步驟設定的密碼。
  • openssl x509 -in xxx.csr -out xxx.crt -req -signkey xxx.key -days 365 建立一個自行簽署期限365天的CA證書(不經過第三方認證)
  • 如果要申請第三方認證的憑證,只需要將xxx.csr傳給該公司,他們就會回覆相關的xxx.crt檔
  • 關於第一個和第二個指令,也有人是這樣做的
    openssl genrsa 1024 > /etc/httpd/conf/ssl.key/server.key(先建立私鑰)
    openssl req -new -key /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.csr/server.csr(再利用私鑰建立要求文件)
結語:

以Apache -SSL和mod_ssl兩種解決方案來說,apache-ssl的檔案較小,編譯起來比較快,且在啟動apache的時候不需要另外輸入憑證的密碼,而 mod_ssl的設定就比較簡單明瞭,但檔案大,編譯起來會花費不少時間,且mod_ssl這個方案可以正常的支援tomcat整合,所以推薦使用 mod_ssl方案。

2002年8月2日

自製密碼產生器

常常要幫使用者開帳號及設定密碼,如果老是用預設的密碼又容易被心人士破解,所以就寫出這個東西,可以產生一到十個字元的密碼,有興趣的人也可以自己參考 一下作修改,改成適合自己的版本,為了怕使用者將英文的O、o、I、l和數字0、1搞混,所以這個JavaScript裡面將這個字元都屏除在外了,歡迎 鏈結或下載使用:網址底佳

利用PDF製作網頁表單

PDF 是製作網頁表單上一個很好用的工具,你不用照 著別人在word上面的表單設計圖辛辛苦苦在網頁上一個字一個字的key,利用Acrobat的列印功 能,直接可以將word轉換成PDF,最棒的是,他完全可以和一般網頁的form標籤相容,也就是說你送出的資料和網頁上用Html編輯 的Form是一樣的。倒是這個功能在網路上大家不常用,所以資料很難找,這是測試之後找到的答案。


第一步

先在Word或任何軟體上編好一個畫面,你可以用表格或Illustrator隨便作一個,再將他轉成PDF檔,開啟Acrobat然後將檔案隨意編輯一下,利用表格工具將可輸入的表格拉好,當然不要忘記送出和清除的按鈕,就像下面這樣子:下面的驚嘆號圖案是清除,筆的圖案是送出

第二步

版面設計好了嗎,接下來要再送出的按鈕裡面加上超鏈結的位置,也就是要送到哪個網頁去處理你的資料,重點在這裡喔:注意一點,超鏈結的斜線,一定要是http://才可以,要是相反寫成http:\\就沒搞頭啦



第三步

撰寫pdf.asp的程式

<%

FileName="acrobat.mdb"

Set conn=Server.CreateObject("ADODB.Connection")

ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;"

ConnString = ConnString & " Data Source=" & Server.MapPath(FileName)

Conn.Open ConnString

TheName=request("txt_name")

TheTitle=request("txt_title")

TheCont=request("Txt_Content")

SqlString="Insert into message(name,title,cont) values('" & TheName &amp;amp;amp;amp;amp;amp; "','" & TheTitle & "','" & TheCont & "')"

response.Write(sqlstring)

Set Rs=Conn.Execute(SqlString)

%>

第四步

哪來的第四步,這樣就好了啦,其實跟一般的form標籤一模一樣,但是你可以省去寫判斷式的時間,用Acrobat拉一拉就完成了。

備註:你必須先到abdoe去抓
Acrobat Database Connectivity (ADBC),這樣你的PDF檔才能和資料庫連結喔。

氣泡式排序法

氣泡式排序就是利用比大小的方式將一組數字,和第一順位的值相比,若數值比第一各數字小的,就和第一各數交換,經過一回合後,再和第二各值以相同的方式循環,一直到排出來為止。

當第一回合結束後,就會找出數列內最小的值,放在第一各位置上,如下:

  • 第一回合,所有的數都和第一各值"4"相比較

4

6

5

2

3

於是,4和6相比的結果,4比六小,所以放在原位;然後4再和5相比,一樣是4比較小,一直到4和2相比大小時,2比四小,所以4和2的位置對調變成:

2

6

5

4

3

然後再以2和下一各數字3相比,完成第一各回合;

  • 第二回合,拿第二各數字"6"和後面的數值相比較

2

6

5

4

3

第一各是6和5的比較,5比6小,所以5和6調換位置,再來5和4比較,然後再調位置,就這樣一直延續下去,直到所有的值都對完一次

2

5

6

4

3

所以總共比大小的次數會是 (n-1)*(n-2)次,自己算算看吧,下面是用java寫的的範例

  • 範例

class sort {

public static void main(String args[]){

int arr[]={5,3,4,2,6,81,1};

System.out.print ("原來的陣列:");

for(int i=0;i

System.out.print(arr[i]+ " ");

}

for(int j=0;j

for(int k=j+1;k

if(arr[j]>arr[k]){

int temp;

temp=arr[k];

arr[k]=arr[j];

arr[j]=temp;

}

}

}

System.out.print ("排序後的陣列:");

for(int i=0;i

System.out.print(arr[i]+ " ");

}

}

}

精選文章

利用Selenium IDE進行UI測試

安裝與執行 Selenium IDE是Firefox的一個plugin,用來做UI的自動測試:下載網址為http://docs.seleniumhq.org/download/ 安裝後,點一下firefox 的工具 -> Selenium IDE ,就會...