在 tomcat\bin\catalina.bat
加上
代碼: 選擇全部
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% "-Dfile.encoding=UTF-8"
標籤: DSpace, 程式寫作, 網站服務, 網路管理, 電腦軟體 張貼者: 布丁布丁吃布丁
Share on facebookShare on twitterShare on emailShare on printMore Sharing Services
1
image
如果要架設以Java、JSP、Sevlet系列伺服器端程式語言為主的網頁伺服器,Apache Tomcat(簡稱Tomcat)是相當有名的一套解決方案。我研究DSpace時也是使用Tomcat來架設在CentOS作業系統上。
因為Tomcat並不是CentOS內建服務而是我額外安裝的,所以我設定了crontab讓他在開機時自動執行。由於之前的參數沒有配置完善,導致開機自動執行Tomcat時,讓Java讀取檔案的編碼發生錯誤。
研究了老半天終於找到算是可行的解決方案,在這邊記錄一下。
Tomcat啟動腳本規劃考量
/etc/profile中的Java參數
Tomcat啟動腳本
Tomcat解決亂碼的爭議點
在crontab中開機自動執行Tomcat啟動腳本
1. 進入crontab編輯畫面
2. 加入開機執行指令
3. 重新啟動測試
結語
<^>Tomcat啟動腳本規劃考量
安裝好Tomcat之後,一般是以命令列執行[tomcat]/bin/startup.sh ([tomcat]表示Tomcat的安裝目錄),但是如果要以自動啟動的方式來啟動Tomcat,卻會因為沒有先執行/etc/profile中設置Java的參數,而會造成啟動失敗。
<^>/etc/profile中的Java參數
先回顧一下DSpace安裝步驟裡,在/etc/profile設置Java參數的內容:
JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"
ANT_HOME=/opt/apache-ant-1.7.1
JAVA_HOME=/usr/java/jdk1.6.0_12
CATALINA_HOME=/opt/apache-tomcat-6.0.13
CLASSPATH=$CATALINA_HOME/common/lib/servlet-api.jar
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin:$PATH:/opt/apache-maven-2.0.9/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ANT_HOME JAVA_HOME CATALINA_HOME CLASSPATH
其中很重要的是「JAVA_HOME」跟「JAVA_OPTS」這兩項參數。前者是要告訴Tomcat要執行的Java環境必要的套件位置,後者則是執行Java時的參數設定。
<^>Tomcat啟動腳本
如果要自動啟動Tomcat的話,則必須在腳本中加入Java參數設定才行。我建立了一個「/home/dspace/tomcat_startup.sh」的腳本,內容如下:
export JAVA_HOME=/usr/java/jdk1.6.0_12
export JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"
/opt/apache-tomcat-6.0.16/bin/startup.sh
這個腳本執行了三件事情:
設置JAVA_HOME變數為「/usr/java/jdk1.6.0_12 」
設置JAVA_OPTS變數為「-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8」
執行「/opt/apache-tomcat-6.0.16/bin/startup.sh 」以啟動Tomcat
如果你也要依樣話葫蘆的話,記得要調整一下這些參數的設定喔。
<^>Tomcat解決亂碼的爭議點
上面在設定JAVA_OPTS的時候,有一個「Dfile.encoding=UTF-8」的編碼參數,這個設定可以讓Java知道要以UTF-8的編碼來開啟檔案,以免他用預設的en_US編碼來處理而造成UTF-8看起來像是亂碼一樣。
但是網路上大部分論壇都主張要將此參數設置在[tomcat]/bin/catalina.sh中,或是一樣在catalina.sh中設定「CATALINA_OPTS=-Dfile.encoding=UTF-8」。前者因為Tomcat版本相差過遠,我找不到要修改的地方;後者還沒試過。
總之,「Dfile.encoding」的參數應該還是有很多其他的地方可以配置,如果大家有更好的方法,也請提出來多多討論吧。
<^>在crontab中開機自動執行Tomcat啟動腳本
<^>
開機自動執行的方法有很多種,其中crontab也可以在開機時指定要執行的程式。crontab是Linux中執行例行性工作排程的好用工具,詳細的原理可以參考鳥哥的介紹。以下我僅敘述如何將「/home/dspace/tomcat_startup.sh」加入crontab開機時自動啟動的腳本中。
<^>1. 進入crontab編輯畫面
輸入「crontab -e」就可以進入編輯畫面了。
[dspace@dspace-dlll ~]$ crontab -e
<^>2. 加入開機執行指令
crontab編輯畫面會以一般的vi文字編輯器形式出現,如果你對vi編輯器不熟的話,還是得先請你看一下鳥哥的操作說明。請在crontab檔案最後加入以下設定:
# Startup tomcat
@reboot /home/dspace/tomcat_startup.sh
第一行只是註解。
第二行的「@reboot」參數表示在重新開機時都會執行後面的指令:「/home/dspace/tomcat_startup.sh」。
儲存並離開之後就完成crontab的設定。
<^>3. 重新啟動測試
設置好crontab之後,別忘了reboot重新啟動來測試一下Tomcat是否有自動地啟動喔。
<^>結語
這個編碼問題讓我煩惱了好久。一開始我還以為是Sevlet或JSP在傳送request的時候編碼設定錯誤,沒想到最後居然是根本上的Java編碼就出了問題。希望這次設定完之後,以後不要再出現編碼的問題了啊。