Linuxでサイトをつくる JSPによるTomcatの動作確認

トップ ›  Linux

Linuxでサイトをつくる

JSPによるTomcatの動作確認

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でのJSPエラーの原因の一つ

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の選定方法