2010年1月30日
前回まで,WindowsでTomcatをインストールしました。次に, Tomcatで実際に簡単なプログラムを作成して,それを動かしてTomcatの動作確認をしてみましょう。ここで扱う問題点は,Linuxでも同様の問題点を抱えています。
Tomcatで良い利点は,Windowsで動作が確認できれば,Linux上でも問題なく動作をするということです。また,先に述べたようにLinuxでも同様の問題を抱えていますので,下記の方法で試みてください。ちなみに直接には関係ない話ですが,今,ご覧のこのページもHTMLファイルによるページに見えますが,実は,TomcatによるJSPで動いています。
<html> <head> <meta http-equiv="Content-Type" content="text/html- charset=utf-8" /> <title>テストページHTML</title> </head> <body> <form action="test.jsp" method="get"> <input type="text" size="20" name="tc" /> <button type="submit"> 送信 </button> </form> </body> </html> |
上記のHTMLをTomcat内のwebappsというフォルダー(ディレクトリ)内に新たに「new」というフォルダーを作成して,そこに「test.html」という名前で保存してください。
次にJSPのプログラムです。
<%@ page contentType="text/html; charset=utf-8" language="java" %> <html> <% request.setCharacterEncoding("utf-8"); String strTc=request.getParameter("tc"); %> <head> <title>テスト</title> </head> <body> <%=strTc%> </body> </html> |
このプログラムを同じフォルダー(ディレクトリ)内に「test.jsp」という名前で保存してください。なお,エンコード(文字コード)は,「UTF-8」になっていますが, Shift_JISやEUC-JPといった他のエンコードでも構いませんが,構築するサイトにあわせて,よく考慮の上,決定してください。なお,Linux(Red Hat Enterprise 5)はUTF-8が標準文字コードです。また,HTMLもJSPファイルも保存をする際は,使用するエンコードをセットして保存してください。
また、なおWindows環境でUTF-8を使う場合は、メモ帳ではなく専用のエディターを使用してください。JSPのコンパイル時や,その他,不測のエラーが発生し無駄に労力と時間を消費してしまいます。
エディターとしてEmEditorがフリーで使用できるので良いのではないかと思います。窓の杜(外部リンク)
なお、JSPはコンパイルを自動で行っているので気にする必要はないですが、UTF-8でサーブレットをコンパイルするときには、”javac XXX.java -encoding utf8 ”というように「-encoding utf8」というオプションを付加しないと、コンパイルエラーが発生します。
このプログラムは単純で,test.htmlで表示されたテキストボックス内に文字を入力すると"tc" というパラメーターでテキストボックスの内容をtest.jspに渡して,それを表示するというものです。
それでは,Tomcatを一度,停止させてからあらためてスタートしてください。そうすると新たに作成したフォルダー「new」とその中のファイルが反映されます。
そして,http://localhost:8080/new/test.htmlにアクセスして,表示されたテキストボックス内に半角英数字を適当に入力して,送信ボタンを押してください。そうすると,test.jspで,テキストボックスに入力したものと同じ文字が表示されます。
もし,エラーが表示された場合は,jspのプログラムに誤りがあるか,ファイルを保存する際にエンコードの設定がなされていない場合などがあります。
表示に成功したら,次に,もう一度,test.htmlに戻り全角日本語を入力して送信をしてください。そうするとJSPで「???」等と文字化けをして表示されると思います(正常に表示されれば問題ないです)。
その場合,Tomcatの設定ファイルを書き直す必要があります。
Tomcat内に「conf」というフォルダー(ディレクトリ)があり,その中にserver.xmlというファイルがあります。Linuxでは,「/etc/tomcat5/conf」内に,ダウンロードで自身で配備した場合は,「conf」内にあります。そして,記述が長いファイルですが,その中に次の記述があります。
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/> |
そこに,「useBodyEncodingForURI="true"」という記述がない場合は追加をして,記述があっても値が「="false"」となっている場合は「="true"」に変更をして保存をしてください。
変更後 <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/> |
そしたら,Tomcatを再起動して,あらためて日本語を入力し送信をすると,きちんと表示されます。もし,文字化けを起こす場合は,JSPのコードで「request.setCharacterEncoding("utf-8");」という記述が抜けているか,設定したエンコードと保存したエンコードがミスマッチしている場合が考えられます。
上記のXMLの設定は,JSPやサーブレットを扱った書籍でも記述がないことが多く忘れがちなので,注意してください。LinuxでTomcatを使う場合も同様です。
追記
AJPを使ってApacheとTomcatを連携さしている場合、Tomcat単体では文字化けが発生しなくても、連携させると文字化けが発生することがあります。その場合、先ほどのserver.xmlファイル内のAJPの設定値の箇所に「URIEncoding="UTF-8"」という設定を追記してください。なおRed hat系のTomcatでは既に設定がされています。記述内容は下記のとおりです。
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8"/> |
Linuxはroot権限など厳密になっています。そこで、例えば、Tomcatがroot権限になっているような場合、JSPをTomcat内でコンパイルすることができず、Windowsで動くJSPが、Linux上で動かしたら見たこともないエラーが発生することがあります。これは、Tomcatとroot権限の違いでTomcatがrootであった時、ファイルをコンパイルするworkというディレクトリにアクセス権限がないためにエラーになります。
そこで、次のコマンドで、Tomcat権限に変更してください。また、通常のグループ名はtomcatですが、ユーザーが所属するグループをtomcatとapacheの両方のグループにしておくと便利かもしれません。
# chown -R <所有者>[:<グループ名>] <ファイル名またはディレクトリ名>
例 $ su - # chown -R ユーザー名[:グループ(tomcat)] /var/lib/tomcat5/work |
もっと詳しいJSPやサーブレットのプログラムは数ある書籍をいろいろとご覧ください。
次回:Linuxの選定方法
This site has nothing to do with FBI (Federal Bureau of Investigation).
I support activity of FBI.
If you want to look at a homepage of FBI, trace the following link.
https://www.fbi.gov/
https://www.fbijobs.gov/