連載 /JavaServer Pages— ード ( 続き ) samplel. .jsp から生成された Java のソースコ 図 9 59 60 a = 1 + 61 / / end 62 / / HTML / / begin Cfi1e="/usr/home/tomcat—3.2. l/webapps/unimaga/samplel ・ j sp 63 fr 。 m = ( 9 , 2 ) ; t 。 = ( 13 , の ] out . write ( " \r\n\r\n く /body>\r\n く /html>\r\n" ) ; / / end catch (Exception (x) { if (out . getBufferSize() ! = 0 ) out . c1earBuffer() ; pageContext . hand1ePageException(ex) ; finally { out . flush(); —j spxFactory. re1easePageContext (pageContext) ; 4 5 6 7 8 9 0 1 2 3 4 5 6 6 6 6 6 6 6 7 7 7 7 7 7 7 図 10 Tomcat 3.2.1 は日吾が文字化けすることがある なお、 $TOMCAT-HOME は Tomcat のバイナリを インストールしたディレクトリです。 」方イル 0 編集仮 ) 表示お知こ入り (A) ツールヘルプせ たとえは、紹介した samplel. jsp や sampIe2. jsp に Error: 500 Location- /unimaga/samplel-jsp lnternal Se rvlet E 0 r: 0 「 g. apache. jasper. Jaspe 「 Except ion: 上 a ト尾そ 0 compi class fo 「 J 田 / 「′乍 0 肥 ト州い〃、滬コ 1 / 朝をき / Ⅲ引 jsg - M ℃い 3 朝 ! Ⅲ E い 言回ロ は、 ・ http://localhost:8080/unimaga/sample1.jsp ・ http://localhost:8080/unimaga/sample2.jsp という URL でアクセスしていましたが、これらの Java ファイルやクラスファイルは、どちらも、 ・ $TOMCAT-HOME/work/localhost-8080%2F tllllmaga というディレクトリの下に作成されます。 samplel. jsp と sample2. jsp を表示させたあと、このディレクトリを ls コマンドで見ると、 $ ls 0002fsamp1e-00031_0002ejspsamp1e1-jsp—O . java 0002fsamp1e ー 00032 ー 0002ejspsamp1e2. class 0002fsampIe—00032_0002ejspsamp1e2—jsp—O ・ java のように、 3 つのファイルカイ乍成されています。 samplel. jsp は Java のコンノ、イルに失敗したので、 Java のソースファイルしかありません ( クラスファイル は生成されていません ) 。一方、 sample2. jsp の場合はコ ンパイルには成功し、実彳芋工ラーが発生した状態だった ので、 Java のソースファイルとクラスファイルの両方が あります。 at java.lang.Thrc•yabIe. f i Ⅱ IrStackTrace(Nat ive t ト ) at java.lang. ThronbIe. fi Ⅱ IrStackTrace(Carpiled し ) ) at java 」 a 鷓 . Thr . ( C02 Ⅱ CG 地 ) at java 」 a . こ印土 i (Except 池 1. java : 42 ) at javax. servlet.ServletExcept icn. (ServletExcept i 罰 ava : 107 ) at 0「g. apache. jasper. JasperExcept icn. (JasperException.java:73) つ十 0r0 つ 0 つ一 - ト、 Tomcat と日本語の表示 こまでの例はすべて、 Tomcat 3.2.1 を UNIX 上で、 言語工竟を C に設定して実行・してきました。 ところが、 ・ UNIX 上で言言亠竟を EUC または SJIS のエンコー ディングに設疋して Tomcat を起動する 日本語版の Windows 上で Tomcat を起動する という↓竟でお使いの方は、 samplel. jsp にアクセスする と、図 10 の、、 ? ? ? " の部分のようにメッセージの一部が 、、文字化け " するかもしれません。 「そういえは自分を疑えって書いてあったな。ということ は、この文字化けも私の JSP コードのせい ? 」 114 UNIX MAGAZINE 2001.9
連載 /JavaServer Pages— コンノヾイノレ っているため、図 6 の、 となります ( 図 7 ) 。 このコードは Java のソースコードとしては文法的に誤 ノ、 アクセスしたときに表示された図 2 のエラーメッセージ る情報をプラウサに送ります。これが、 samplel ・ jsp に ーはコンパイルエラーが発生すると、その場所や関連す のフェーズでコンパイルエラーが発生します。 JSP サー された Java コードの例 です。 tib1e type for 十 . Can't convert VOid tO int . 1e—00031_0002ejspsamp1e1-jsp-0. java: 61 : lncompa ー 3 . 2.1/work/10ca1host—8080%2Funimaga/—0002fsamp UnabIe t0 compile class f0 て JSP/usr/home/tomcat 図 2 のエラーメッセージ、 番号です ) 。 ソースコードです ( 行頭の数字は、説明のために付けた行 図 8 ~ 9 は、 samplel. jsp を変換したあとの Java の 1 error a = 1 + ても、もとの JSP コードと結び付けにくいので困ってし 合、生成後の Java コードのコンパイルエラーを知らされ が、もっと複雑な JSP コードを含む JSP ファイルの場 samplel ・ jsp はかなり単純な例なのでまだよいのです ラウサに表示されます Java のソースコードをもとにしたエラーメッセージがフ た Java ファイルをコンパイルできない場合、生成された すなわち、 JSP コードが文ラ却勺に誤っていて、生成し ている文法工ラーの行そのものです。 というコードであり、図 2 のエラーメッセージカ甘商し a = 1 + の内容です。このファイルの 61 行目が、 jsp—0 ・ java Funimaga/—0002fsamp1e—00031_0002ej spsamplel— /usr/home/tomcat—3.2.1 / work / localhost ー 8080 % 2 工ラーメッセージに書かれている、 に話を戻しましよう。図 8 ~ 9 の Java のソースコードは、 112 まいます。 残念ながら、これを解決する簡単な手段はいまのところ 用意されてはいないようです。ェラーメッセージのファイ ル名の表示から、生成された Java のソースコードをみつ けだし、エラーメッセージの行番号からコンパイルエラー の箇所を探してください。 Tomcat の場合、生成された Java コードのなかに / / begin [fi1e="/usr/home/tomcat—3.2.1 / - webapps/unimaga/samplel ・ jsp" ;from=(6,2) ・ int a ; a = 1 + / / end 、、 / / " で始まるコメントが埋め込まれます ( 誌 のように 面の都合、て折り返しています ) 。コメントを参考に すれば、 Java のソースコードと JSP ページ内の JSP コ ードの対応が分かります。、、 begin ' というコメント 行の、、 from" や、、 t 。 " は、変換前の JSP コードの位置を 示しています。たとえば、 UNIX MAGAZINE 2001.9 ・ $TOMCAT-HOME/work ことがあるなら、次のディレクトリをみてください。 Tomcat をインストールして JSP サーバーを動かした は、まとめて特定のディレクトリに置かれています。 ・ Java のクラスファイノレ ・ Java のソースファイノレ クラスファイルが作成されます。この中間生成物である、 ルが生成され、 Java のソースファイルをコンパイルして Tomcat では、 JSP ファイルから Java のソースファイ 一時ファイルの置き場所 をもっと詳しく説明するときに譲ることにします。 す。これらの処理についての解説は、 JSP ページの実装 を送るための前処理や後処理、例外の処理などのコードで の部分はクラスやメソッドの定義、およひプラウザに出力 内容の出力に対応する部分は 55 ~ 65 行目です。それ以外 図 8 ~ 9 の Java のソースコードでは、 samplel. jsp の 文字目までに対応していることを示しています。 は、 samplel. jsp の 6 行目の 2 文字目から、 9 行目の 0 from=(6,2);to=(9,O)
連載 /JavaServer Pages— 図 1 文法工ラーを含んだ JSP ファイル (samplel ・ jsp) く html> く head> く titIe>Samp1e 1 く /title> く /head> く body> く % int a; a = 1 + く /body> く /html> 図 2 samplel ・ jsp をさせた画面 L 尹イ ( り編果表示お知こ入り (A) ツー非ヘルプせ ー戻る・ , 0 幻囹 0 お気に入り朝ー当朝を , アドレス Q) h : 〃 bca 旧。 3 麕 0 / 聞 im 記 mp 国」印 Error: 500 Location: /unimaga/sampleljsp lnternal Servlet Error: 津ゅん′ト•03 リメし 1 Ⅲ 1 / : 3 1 い口 - M 「 m10 第れ引臼 p リンり物 0 「 g. apache. jasper. Jaspe 「 Except ion: 旧 b 弋 0 0 pi 尾 class f0 「 J / い「介に 1 「「 0 「 ー可大こジが製ま 1 ま廴た つ十「、「 0 つ 0 つ「トー 0 at 0 「 g. apache. ja5代「 . JasperExcept i 1. (JasperExcept ion. java:73) at javax. 驪Ⅳ尾t. ServIetException. ( Ⅳ尾士 c 印土 ion. java:107) at java.lang. Except ion. (Except ion. java:42) at java.lang. Th 「 owable. (Compi led Co ) at java.lang. Th 「 owable. f i Ⅱ lnStackTrace(C0ffPiled Ccde) at java.lang. Th 「 owable. f i Ⅱ InStackT 「 ace(Nat ive 什 ) ・ JSP のページはどのように処理されるか ・ JSP はどのようなエラーを発生するか 今回は、 されるわけではないので、テンヾッグはいっそう困難です。 の場合には、作った JSP ファイルの内容がそのまま解釈 ログラムよりデバッグしづらいものです。そのうえ JSP そもそも、 Web のプログラムはスタンドアローンのフ 違っているんだ " と頭を抱えることもしはしはです。 いったいどこが間 ります。 JSP を相手にしていると、 不明の Java のスタックトレースが表示されることもあ まっせ " と表示されるくらいは日常茶飯で、実行中に意味 わけにもいきません。プラウザ画面上に、、文法、間違うて うが、実際に開発を始めるとまったくエラーを起こさない 試しているあいだは、、めでたしめでたし " で終るのでしょ ・エラーの原因を突き止める方法 などを紹介していきます。この記事が、 108 、、原因不明のエラ 図 3 計算できない式を含んだ JSP ファイル (sample2 ・ jsp) くれ tml > く he ad> く titIe>SampIe 2 く /title> く /he ad> く body> く % int a; a = 1 / 0 ; く /body> く /html> " に悩んでいる方の助けになれは幸いです。 なお、この連載では JSP サーバーとして、 Jakarta プ ロジェクトの Tomcat を使うことを前提としています。 工ラーメッセージやー卍判勺なファイル名などは JSP ェン ・ジンの実装に依存するため、使っている JSP 工ンジンの 不頁やバージョンによっては、以下の説明とは異なるかも しれないので注意してください。 文法工ラー ますは簡単なエラーの例をみてみましよう。図 1 に示 した、、 samplel. jsp" を Tomcat で実行すると、図 2 の 画面か表示されます。 samplel. jsp の JSP コードの部分 の 2 行目では、 a = 1 + のように Java の式か完結しておらず、最後のセミコロン ( ; ) も抜けています。この JSP ファイルを表示しようと すると、当然どこかで文法ェラーを起こすはすです。 ところで、 JSP はサーバー側で重加勺に Web ページを生 成するので、 JSP ファイルの文法工ラーはサーパーの内 部工ラーとしてプラウサに送られます。結果として、図 2 lnternal ServIet Error" か表小されます。な のように お、その下にはどこでエラーが発生したかを示す情幸俵 示されますが、これについてはのちはど説明することにし て、エラーの例を続けます。 ゼロて餘算 次は図 3 の、、 sampIe2. jsp - を見てください。このファ イルでも JSP コードの 2 行目で誤った処理をおこなって います。 UNIX MAGAZINE 2001.9
連載 /JavaServer Pages— 図 6 JSP ページが処里されるイ廿且み ブラウザ J ava の クラスファイ丿レ Java プログラムの実行 結果をブラウザに送る Java の ソースコード JSPAZ—ジを Java の ソースコードに変換 結果を表示 JSP'N—ジ コンノヾイ丿レ ードに奐 図 7 JSP ページを Java のソースコ く html> 4 Ⅲ e > ・・・イ t Ⅲ e > <bodY> く % int a; a = 1 + </bodY> </htm ト JSP ページの内容 れたページと同しように扱うことができます。 このような説明をすると、 JSP サーバーが、 ・ HTML の部分はそのまま送る ・ JSP コードの部分は JSP サーバーが解釈して結果を 送る という処理をおこなっていると考えるかもしれません。 JSP サーバーがどのような処理をおこなうかは厳密には 実装に依存しますが、 Tomcat では図 6 のように 1. JSP ページ全体を Java のソースコードに変換する 2. Java のソースコードをコンパイルして、 Java の実行 形式のフログラム ( クラスファイル (). class)) にする 3. Java プログラムを実行し、出力結果をプラウサに送る という処理をおこなっています。 HTML の変換と JSP コードの変換 図 6 の、 JSP ページから Java のソースコードに変換 する部分をもうすこし詳しくみてみましよう。 JSP ページのなかの HTML で書かれている部分は、 同し内容を出力する Java のコードに変換されます。図 1 の samplel. jsp を例にすると、 く html> く head> く tit1e>Samp1e 1 く /title> く /head> く body> の部分は、次の Java コードに置き換わります。 out . write ( " く html>\r\n く head>\r\n く tit1e>Samp1e 1 く /title>\r\n く /head>\r\n く body>\r\n\r\n" ) ; JSP ページのなかの JSP コードで書かれている部分 は、そのまま Java のプログラムとして角物にれます。し たがって、 samplel. jsp の、 前処理 ・・く bOdy > の部分の く h 1 m ト・ HTML の文字列を出力するコード int a; a = 1 十 く / bOdy > ・・・く / htm トの部分の HTML の文字列を出力するコード 後処理 変換後の Java のソースコード 十 く・ 1 ん の部分は、 次の Java コードに置き換わります。 int a; a = 1 + JSP コードの後ろの HTML の部分、 く /body> く /html > は、最初の部分と同次のような HTML を文字列とし て出力する Java コードに書き換えられます。 out . write ( " \r\n\r\n く /body>\r\n く /html>\r\n" ) ; 去絲冬的な Java のソースコードは、上記の 3 つのパート をつなげた、 out . write(" く html>\r\n く head>\r\n く tit1e>Samp1e 1 く /title>\r\n く /head>\r\n く body>\r\n\r\n" ) ; illt a; a = 1 + out . write ( "\r\n\r\n く /body>\r\n く /html>\r\n" ) ; 111 UNIX MAGAZINE 2001.9
連載 /JavaServer Pages— 図 5 samplel. jsp を表示したときのエラーメッセージ Error : 500 Location : /unimaga/samplel ・ j sp lnternal Serv1et Error : org ・ apache. jasper. JasperException: Unable t0 compile class for JSP/usr/home/tomcat¯3.2. l/work/loc a1host_8080%2Funimaga/-0002fsamp1e—00031_0002ejspsamp1e1-jsp-O. java:61 : lncompatible type for +. Can't convert void tO int . org ・ apache. tomcat. service. http.HttpConnectionHand1er.processConnection(HttpConnectionH org. apache. tomcat. core. ContextManager. service (ContextManager. 」 ava : 743 ) org ・ apache. tomcat. core. ContextManager. interna1Service (ContextManager. 」 ava : 797 ) org ・ apache. tomcat . core. ServletWrapper. service (Serv1etWrapper. 」 ava : 372 ) org ・ apache. tomcat . core. Handler. service(Hand1er. Java: 286 ) org ・ apache. tomcat . core. ServletWrapper. d0Service(ServletWrapper. java:404) javax. servlet . http.HttpServ1et.service(HttpServ1et.java: 853 ) org ・ apache ・ jasper. servlet. JspServlet. service(Compi1ed C0de) org ・ apache ・ jasper. servlet . JspServlet. serviceJspFile(JspServ1et. java: 318 ) org ・ apache ・ jasper. servlet . JSPServlet$JspServ1etWrapper. service (JspServ1et. j ava : 164 ) org ・ apache ・ jasper. servlet. JspServlet$JspServ1etWrapper. loadlfNecessary(JspServ1et. java org ・ apache ・ jasper. servlet. JspServlet. loadJSP(JspServlet. java:433) org ・ apache ・ jasper. servlet. JasperLoader12.10adJSP (JasperLoader12. j ava : 146 ) 0 て g ・ apache ・ jasper. servlet. JspServ1et. d0LoadJSP (JspServ1et. j ava: 462 ) org ・ apache ・ jasper. compiler. compiler. compi1e(Compiled C0de) org ・ apache ・ jasper. JasperException. (JasperException. 」 ava : 73 ) javax. servlet. Serv1etException. (Serv1etException. Java: 107 ) java. lang. Exception. (Exception. java:42) 」 ava ・ lang. Throwab1e. (Compi1ed C0de) at java ・ lang. Throwab1e. fi111nStackTrace(Compi1ed C0de) 」 ava. lang. Throwab1e. fiis11nStackTrace (Native MethOd) = 1 十 : 152 ) at at at at at at at at at at at at at at at at 1 error at org ・ apache. tomcat . util. ThreadP001$Contr01RunnabIe. run(Compi1ed C0de) at org ・ apache. tomcat . service. TcpWorkerThread. runlt (Compi1ed C0de) andler. java: 210 ) at java. lang. Thread. run(Compi1ed C0de) samplel. jsp の JSP コードの部分でコンノ、イルエラーが Root : 面からはみ出した部分に、 sample2. jsp で発生した実彳丁時工ラーも、プラウザの画 JSP の実行時工ラー 発生しているのです。 号からは自分が作った JSP ファイルとは関係がなさそう というメッセージか表示されています。ファイル名や行番 service(HttpJspBase . java: 119 ) at org ・ apache ・ j asper. runtime . HttpJspBase. 2-jsp—0. java:61) ー0. —jspService(-0002fsamp1e-00032_0002ejspsamp1e at —0002fsamp1e-00032—0002ejspsamp1e2-jsp 」 ava ・ lang ・ ArithmeticException : / by zero にみえますが、 110 これも sample2. jsp の JSP コードの部分 で発生した、、例外 " です。 UNIX MAGAZINE 2001.9 せん。 JSP ページを表示するときでも、 HTML で言当さ JSP ページに対して特別な処理をおこなう必要はありま 形式に変換して送り出します。おかげで、プラウサ側では JSP サーバーは、 JSP ページをプラウサが解釈できる というお話をしましよう。 いるか 一見、無関係にみえるファイル名や行番号カ舸を示して ているか ・ JSP ファイルがプラウサに表示されるまでに何か起き JSP ページを表示する仕組み
連載 /JavaServer pages ・ - 図 4 sample2 ・ jsp を表示させた 方イルの編集 ( 印表〒も気に入りツール (I) へフ http / み明第国 h ロ 3 を 1 / リ n Ⅲ ga / ー mp 2 に p - Mi 麟 030 Lnternet 朝 javax. servlet . ServletExcept i に / by zero lnte rnal Se rvlet Error: Location: /unimaga/sample2-Jsp Error: 500 」アドレス但 ) h 鱸 0 : / 川をれ m 訂叩 2 師 戻る , 朝囹 0 検常山お気に入り朝履歴 ! , 朝影 at java.lang. Except ion. (Except ion. java:42) java.lang. Th 「 owable. ( Con led Cde) at java.lang. Th 「 owable. f i Ⅱ InStackT 「 ace(CompiIed C0de) at java.lang. Th 「 owable. fi Ⅱ InStackTrace(Nat ive Methcd) at javax. SeⅣ尾L能「ⅵe土敏C印い8. ( 「ⅵ e 士 E 朮印 t 池1. java: 161 ) 言回ロ plel. jsp のエラーは実行時工ラーではありません。 ラーをもうすこし詳しくみてみましよう。 JSP のコン / イルエラー この工 at 0「g. apache. jaspe 「 . rmt ime. PageContextImpl.handlePageExcept icn(Pa at 』 002f mp ー 0 圓 32 ー 0002ejspsa 「司 e2 」印」 . 」 sp 「 vice ( - 囲 02f 新宿司 0 「 g. apac トに . ja 斗七 r. n 弋 ime. HttpJspBase.se 「 vice(HttpJspBase. java:l at javax. servlet . http.HttpServIet . service(HttcServlet.java:853) at 0「g. apache. jaspe 「 . servIet.JspServIet$JspServIetWrapper. service(J 十 røっ n 知 - トー「—r 、。 rv ー十」・を「、月。十 ー朝スこ当表示されまい a = 1 / 0 ; 2 不鶤頁のエラーを見ていただきましたが、エラーメッセ ージカ彳妙に違うことに気ついたでしようか ? 1 番目 (samplel. jsp) のエラーメッセージには、 ln- ternal ServIet Error" とスタックトレースとのあいだに、 別の不頁のエラーメッセージがあります。これに対して 2 番目 (sample2. jsp) のエラーメッセージには、、 lnternal Servlet Error" のすぐ下に、 Java のユーサーにはお染 みの例外発生時のスタックトレースがあります。 sample2. jsp のエラーは、 JSP コードの実行中に Java の例外が発生した " という実イ寺工ラーです。一方、 sam- この処理は却勺には誤っていませんが、、、算勺に計 算できない式 " なので、処理系にの場合は JSP 工ンジ ンを動かしている Java) カ導術工ラー ( 例外 ) を発生し ます。結果として、 sampIe2. jsp の場合もサーバーのェ ラーとして扱われ、プラウサには図 4 に示したような工 ラーメッセージか表示されます。 プラウサ画面の真ん中あたりに、 」 avax ・ servlet . Serv1etException : / by zero というエラーメッセージがありますが、これは、 、、ゼロで除算しようとしたのて例外 (Exception) が発生 という意味です。 コン / イノレエラーと実行日寺工ラー UNIX MAGAZINE 2001.9 図 2 のプラウサの表示では右側の部分が欠けているの で、図 5 に完全なエラーメッセージを掲載します。 う頁のほうにある、 UnabIe to compile class for JSP/usr/home/tomcat ー 3.2 .1/work/10caIhost—8080%2Funimaga/—0002fsamp le ー 00031 ー 0002ejspsamp1e1 ー jsp ー 0. java: 61 : lncompa tib1e type for 十 . Can't convert void to int . a = 1 + 1 error の部分は、 Java のソースファイル、 _0002fsamp1e-00031-0002ejspsamp1e1-jsp—0 ・ java の 61 行目の、 a = 1 + で、演算子、、十 " のオペランドの型が合っていない (void から int に変換できない ) 工ラーが発生していることを表 しています。 「なんや、すいぶん長ったらしい名前のファイルでエラー が出とるなあ」 「 Tomcat のノヾグやろ・・・・・・」 身に覚えのないエラーメッセージを見ると、自分には 関係がないと思いたくなるのは開発者のサガかもしれませ ん。とくに卿パ絲帝切が迫っているときに、新しいシステ ムを使っていたり、、、〇△口にはバグがあるらしいで " な どという噂を聞くと、ついつい他人のせいにしたくなって しまいます。 実際間題として、自分のバグなら直しようがあってもシ ステムのバグだと ( 通常は ) 手を出せないので、自分のバ グであれは響びこそすれ残念がる必要などないはすです。 ところが、締切に間に合うかどうかて精一杯の艮状態の 脳ミソには現実なんて認識できません。とにかくシステム のせいにして、なんとか急場をしのごうと画策します。 残念ながら ( 喜ばしいことに ! ? ) 図 5 のようなエラー メッセージが表示されたら、ます自分を疑ってください。 JSP ファイルとは関係なさそうにみえますが、しつは 109
連載 /JavaServer Pages 0.1 0.1 畑 図 12 日吾化キットを吏ってディレクトリ・リストを表示 方イル ( り編郷 0 表示お知こ入り ) ツしヘルプ アドレス 0 切 h 〃 0 引分地 ]/, ディレクトリのリスト : / unimaga / ティレうトリ ( 1 当ュトんⅢ m 3 / ー町コ 0 日いに可こ印を「 ページが表示されましを om 朝を b こ」 . 望 アイル . リンり物を mail 硼” 言回ロ 2001 年 7 月 15 日 22 : 23 JST 2001 年 7 月 15 日 22 : 23 JST 図 13 Ja-Jakarta プロジェクトの日吾化キットのペー ) 日小力第 ) ) 0 - ド - ドに : 0 曾第 ! し準朝 : L カイルの継表〒お知こ入りツールへフ アドレス 0 を h 日ノ / 物解 , / なハ曜 1 引引研 iht ドされます ) 、ルートページの日本語版が含まれていま ( 硼イ C ス / 'HO を cl 日 sses にインストールし、先にロー 本語訳されます ) と、修正されたクラスファイル 日本語訳されたメッセーシ ( p のエラーメッセージも日 きていないので、実際の運用には使用しないでくださ ますが、 To 「 ncat 3 2 の国際化の問題を完全に解決で ラーメッセージを日本語化するためには便利たと思い ージの日本語表示を可能にするものです。開発時の工 これは、 T 。 E8t32 のメッセージ、および工ラーメッセ T 。 mcat 日本語化キット 朝インター衫 インストール手順 ・ to 「 n 朝む -3 2 1 ー Tomcat32 1 ( 2001 年 01 月 18 日版 ) ・い rn こ日 t ー 32 2 ー は 6 r Tomcat 3 2.2 ( 2001 年 05 月 31 日版 ) す。 同ロ http://www.ingrid ・ org/jajakarta/site/translation.html Tomcat 3.2.3 が公開されてからまだ日か戈いせいか、 このバージョンのための日本言ヒキットはいまのところリ リースされていません。また、 Ja-Jakarta フロジェクト のページの注意書きには、 Tomcat 3.2. x の国ヒの間題 に完全には対応していないので、実際の運用には使用しな いようにと書かれています。残念ながら現状では製品レベ ルの品質で利用することはできないようですが、動作を試 してみたい方は図 13 の Web ページから日本言ヒキット を入手してください。 日本言ヒキットば宿した形式で公開されているので、 Tomcat のインストール先に展開して使います。詳しいイ ンストール手順や注意点は、上記の日本言ヒキットを公開 しているべージに書かれているのでかならず目をとおして ください。 日本言群ヒキットをインストールした T 。 mcat のトップ ページ (http://localhost:8080/) にアクセスすると、図 116 図 14 日化キットをインストールした Tomcat のトップ けフル矚印表〒お知ン、り (A) ツールへフ ( 印 郎・→・ 0 幻奇 0 検常』お知こ入り朝履歴ら・朝■、 ) 物乃の無” アドレス 0 切 h 叩 / / 。引々又” Tomcat ′ -- ジョン 322 ) ーコ n にぶマ 3 2 2 - ド℃ " に 0 にい背 , EÄが第 言回ロ の AP トキュメント、 README 、このリリースの技術白アよ FAQ dSP と Servlet を含 このリリースに含まれているのは、ソースコード付の機能の例と、 SeAflet と SP ・ <Tomcat へのパス >/webpages/R00T/index. htm1. ja ( 日本語版 ) ・ <Tomcat へのパス >/webpages/ROOT/index. htm1 し英言台片反 ) 関連リン一スのクイックリファレンスカイドとして役立ち、次の場所にあります。 これはデフォルトの Tomcat ホームペーシです。このページは、 ・ servlet の例 ( 日亠語版 ) P の例 ( 日亠語版 ) む web 技術の開発に必要な ja 「ファイルの一覧です。 ・ http://www.ingrid.org/jajakarta/ ています。ドキュメントを日本語て読みたい方は、 トが出しているドキュメントの日本語訳が豊富に用意され なお、 Ja-Jakarta のページには Jakarta フロジェク ージか表示されます。 は、、、日本語版 " をクリックすると日本言ヒされた例題ペ ・ ServIet の例 ・ JSP の例 はうに表示されている、 バージョン番号などを確認してください。なお、図の下の 14 のような日本語のページか表示されます。 Tomcat の ・エラー箇所のみつけ方 今回はエラーが起きたときにどうすればよいかを中心 ☆ からたどってください。 UNIX MAGAZINE 2001.9 ( あらい・みちこ ASTEC) 題などをとりあげる予定です。 次回も、 JSP コードと JSP サーバーの実装に関する話 回されている方の助けになったでしようか ? 分からないまま、 Java の英間早なエラーメッセージに振り についてお話ししました。どこで何カ起きているのかよく ・日本語メッセージの文字化けに関する間題と対四去 ・ JSP ページが処理される仕組み
連載 /JavaServer Pages—① samplel ・ jsp から生成された Java のソースコード 図 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 7 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 import import import import import lmport import import import import import import public . servlet . *; javax. servlet . http. * ; Javax. servlet ・ jsp ・ *; java. . * ; org. apache . j asper. runtime. * ; java. util. Vector; java. i0. ObjectInputStream; java. i0. Fi1eInputStream; Java. i0. IOException; java. iO . PrintWriter; Javax. servlet . jsp ・ tagext . * ; class ー 0002fsamp1e ー 00031 ー 0002ej spsamplel_j sp-O extends HttpJspBase { org ・ apache . jasper. JasperException ; static { public -0002fsamp1e-00031-0002ejspsamp1e1—jsp-0( ) { private static boolea 取—jspx—inited = false; public final void -j spx—init ( ) throws JasperException { public void —jspService(HttpServIetRequest request , HttpServIetResponse String —value = Ⅱ u11 ; this ; Obj ect page = JspWriter out = nuII ; Serv1etConfig config = nu11 ; Serv1etContext application = Ⅱ u11 ; HttpSession session = Ⅱ u11 ; PageContext pageContext = nuII ; JspFactory ー」 spxFactory = null ; throws IOException, Serv1etException { response) try { if ()j spx-inited —jspx-init() ; ー」 spx-inited false) { t rue ; —j spxFactory = JspFactory. getDefau1tFactory() ; response. setContentType("text/htmI;charset=8859—I") ; —jspxFactory. getPageContext(this, request , pageContext true, 8192 , true) ; application = pageContext . getServ1etContext ( ) ; config = pageContext . getServ1etConfig() ; session = pageContext . getSession() ; out = pageContext . getOut ( ) ; response , / / HTML / / begin [fi1e="/usr/home/tomcat—3.2. l/webapps/unimaga/samplel ・ j sp' from=(), の ;t。=(6,0)] out. write ( " く html>\r\n く head>\r\n く tit1e>Samp1e 1 く /title>\r\n く /head>\r\n く body> / / end / / begin [fi1e="/usr/home/tomcat—3.2. l/webapps/unimaga/samplel ・ j sp from=(6,2) ; t 。 = ( 9 , 0 ) ] UNIX MAGAZINE 2001.9 113
JavaServer Pages 荒井美千子 JSP べージの作成 ( 3 ) p さん : フィールド (field) なんだから意床的にも電、、場 " か亜しいんだよ。 私 : at 。 m を原子と訳すように、直訳じゃないからこそ電 、、界 " には味があるんやん。 p さん : そもそも言算カ吶単だからって、妙な式を導入し て置き換えて引・算する工学系のやり方は変しゃないか。 私 : 言算なんて簡単なはうがええやん。結果カ哈ってさえ いれば、音は鳴るしロポットは動くんやから。 およそコンピュータとは関係のなさそうな話題の発端 は、理学系と工学系の人間を集めたプロジェクトがうま く進むかどうか・ 、一 0 というきわめて現実的な話からで 山も匠は清剌係出身の人か増えてきましたが、私か社会人 になったころはまだそれはど↑青報系の物斗は多くなく、コ ンピュータ業界に京翹哉した同世代の人たちの出身学部は多 彩でした。なかでもやはり多かったのが、物理や学を専 攻した理学系の人たちと、機械や電気あるいは建築を専 攻した工学系の人たちです。 これらの人たちにとって、、専門外 " であるコンピュータ の知識は、較の授業とは関係なく仕事のなかで身につけ てきたので、学部による違いはありません。ところか : 学 生時代に繰り返し習った授業の内容は、すっかり忘れてい るようでも脳ミソの片隅に残っているものです。電気出身 の私には、、電界 " か馴染み深く、物理出脅の P さんは、、電 場 " でないとイメージが湧かないそうです。まして、目の 前の電気回 ) 電圧を測定してから公式を憶えた私と、目 に見えない事象の公式を憶えてから実験て確認した P さ んとでは、アプローチの仕方が正反対です。 「これしゃあ、プロジェクトがうまく進まなくても不思議 UNIX MAGAZINE 2001.9 ゃないよね。なんせ言葉もやり方も違うんやもん」 どうやらどの言葉を使うかというのは、それぞれの専門 分野の流儀というよりも、拠り戸励ゞ違う宗派のようなもの なのだと納得し合った私たちでした。 ところで、物理系でも電気系でも、、、現実の物理現象を 角斤することが目的 " というスタンスは共通です。実際の 言算を簡単にするために、現実には意味のないほど小さな 値を、、ど以下 " と称して無視する手法はどちらでも使われ ていました。、、テーラー展開 " と呼ばれる手法で値の小さ な項を捨ててしまうのは、まさにこれにあたるでしよう。 P さん : 則できない項は無視していいよな。 私 : うんうん。で電子を 1 個、 2 個なんて数えよう としたって馮太だよれ P さん : そうそう、ば一つと切り捨てて簡単にすると計 算速度も上がるし ~ やっと意気投合した私たちでしたが、それまててい ていた数学系出身の M さんがポツリ。 「値が小さいから捨ててしまおうだなんて、物理系や工学 系は乱暴すぎる。それしゃあ最後に解が一 -- ・致しなくなるし ゃないですか」 どうやら、また新しい宗派が 1 つみつかったようです。 JSP ページで発生するエラー これまで 2 回にわたって簡単な JSP ページのサンプル を紹介しました。サンプルのコードどおりに打ち込んで同 リ竟で動作させれは、あっけないはどあっさりと JSP ページを表示できたと思います。このように、サンプルを 107
連載 /JavaServer pages—① このケースに関しては、自分を疑っても仕方がありま せん。 Tomcat の日本語対応はまだ不十分で、たとえは ノヾージョン 3.2.1 では図 10 の例のように、コンノヾイルエ ラー・メッセージが日本語て表示されたときに文字化けし てしまいます。このままではエラーメッセージか読めませ ん。 Tomcat の日本語の表示で困ったら、次の方法を試し 3. Tomcat のバージョンを上げる。 セージを言冗む。 2. Tomcat を起動した端末などに表示されるエラーメッ 1. Web プラウザの言語の成正を変更する。 てみましよう。 UNIX MAGAZINE 2001.9 以前のバージョンを使っている方は Tomcat 3.2.3 以降 られて ( 修正されて ) います。特別な事清がないかぎり、 バージョンでみつかっているセキュリティ・ホールか理め 正しく表示されます。また Tomcat 3.2.3 では、以前の ます。このバージョンでは日本語のエラーメッセージが がム斤の、、製品版の品質のリリース " として提供されてい 本稿の執印ヨ琲 . : ( 2001 年 7 月 ) では、 Tomcat 3.2.3 を確認してください。 コーディングと端末のエンコーディングが -- 一致しているか セージを読む場合は、 Tomcat の起重加芋に設定したエン セージを参照してください。なお、端末に表示されたメッ 使う場合は、 Web プラウザ以外に表示されるエラーメッ セージは日本語も正しく表示されます。 Tomcat 3.2.1 を セージか文字化けしていても、端末などに表示されるメッ Tomcat 3.2.1 では、 Web プラウサに表示されるメッ ます。 化けはしない状態でエラーメッセージが読めるようになり みてください。英言韶 ) 表示にはなってしまいますが、文字 ラウサ側で、、日本語より英語を優先する " ように設定して ウサの設疋を自由に変えてもかまわない場合は、 Web プ 作成した JSP ページを確認したいときなど、 Web プラ を起こしてしまいます。 ッセージを日本語で表示しようとして例のような文字化け る " ように設定している場合は、 JSP サーバーはエラーメ 本語だけ " になっていたり、、、日本語を英語よりも優先す 仕組みがあります。 Web プラウサ側の言語の設定が、、日 る言語 ( ェンコーディンクつをネゴシェーションて決める Web プラウサと Web サーバーのあいだには、使用す 図 11 Tomcat 3.2. x は日吾萋爨竟でティレクトリ・リスト [ ) にい 0 : 目℃れ工Ⅲめき / ー M ℃ r03 うト 1 ! e ににをし 6 鷲 r 」万イ印表〒 - お知こ入り住 ) ツー井ヘルプ を表示できない アドレスい″日引象象“ 了「・きま - イジ虧わト at ja縮コ証に . Except 池 1. ( Ⅱ Co ) at java.lang. ThrowabIe. (C80ⅱ翻 0 e ) at java.lang. Th 「 owable. f i Ⅱ lrStackTrace(ComiIed CÆde) 計 java.lang. Throwable. f i Ⅱ IrStackT 「 ace(Native 仕 ) java. io 」能 xc 印 t 1 : Not a 「ロ 8859 」 characte 「 : lnternal Servlet E 「「 0 「 : Locat ion: /un imaga/ Error: 500 115 トリ以下のファイル加 ・ Tomcat 3.2.2 の伊 } 題 (webapps/example ディレク ・ Tomcat 3.2.2 本体 ・ Tomcat 3.2.1 本体 リリースされています。 イ高執夘畤点 : で、次のものに対応する日本言群ヒキットが ディレクトリ・リストの表示です。 図 12 は日本言群ヒキットを適用した Tomcat 3.2.2 の にするためのキットです。 解決したり、 Tomcat 3.2. x のメッセージ類を日本語対応 日本語化キットは、上記のディレクトリ・リストの問題を Ja-Jakarta プロジェクトが公開している Tomcat の 3.2.3 に指定したときの表示です。 す。図 11 は、ディレクトリに対応した URL を Tomcat トリ・リストを日本語で表示する処理に失敗してしまいま 優先する設定になっていると、 JSP サーバーはディレク この機能をもっていますが、 Web プラウサ側が日本語を イルをそのまま表示する機能があります。 JSP サーノヾーも たいていの Web サーバーにはディレクトリの下のファ 環境に関する間題をもう 1 つ抱えています。 はさきはど書いたとおりですが、 Tomcat 3.2. x は日本語 Tomcat 3.2.1 のエラーメッセージの文字イヒけについて 日本言部ヒキット を紹介していくことにします。 この連載でも、今後は Tomcat 3.2.3 を使って動列 を使うようにしてください。