Trouble 13: Servletに関する問題
<Q13-1>サーブレットを再起動せずにクラスファイルを変更する(自動ロード機能を使用する)と、JSPファイルにエラーメッセージが出力されてしまいます。
| <発生環境> |
| OS |
Solaris2.5.1 |
| JDK |
Solaris_JDK_1.2.1_04 |
| Vender |
Sun |
- <A13-1>
- クラスファイル変更時にサーブレットを再起動してください。
<Q13-2>同PCで複数枚数のブラウザを開いてセッション管理を行う場合に、IE(5.0)を用いて2枚ブラウザを開き、1枚目操作→2枚目操作→1枚目でボタンによるPOST操作を行い、出力するHTMLファイルでJavaScriptのhistory.back()を使用すると、1枚目ブラウザの内容が2枚目ブラウザの内容と同じになってしまいます。
| <発生環境> |
| OS |
Solaris2.5.1 |
| JDK |
Solaris_JDK_1.2.1_04 |
| Vender |
Sun |
- <A13-2>
- history.back()を使わずに、POSTされた内容を表示用JSPファイルにリダイレクトすることで解決できます。
また、表示画面をフレーム分けしたり、Window.open()で別ウィンドウを開く場合は、各画面にユニークなNameをつけておく(例:セッションIDをつける)必要があります。
<Q13-3>ブラウザ表示時に文字化けが発生してしまいます。
| <発生環境> |
| OS |
Solaris2.5.1 |
| JDK |
JDK1.2.1 |
| Vender |
Sun |
- <A13-3>
- 文字列の再デコードを行います。
(例)String BB = "あいうえお"; ←これが文字化けする場合
String AA = new String(BB.getBytes("Shift_JIS"),"8859_1");
そして、htmlのMETAタグで文字コードを指定します。
(例)<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
<Q13-4>JavaScriptのsetTimeout()を使用して、一定間隔でsubmit()してdoGet()やdoPost()を呼んでも、ブラウザ表示内容が更新されません(InternetExplorer 5.0にて発生) 。
| <発生環境> |
| OS |
Solaris2.5.1 |
| JDK |
JDK1.2.1 |
| Vender |
Sun |
- <A13-4>
- IEの「ツール」→「インターネットオプション」→「設定」→「ページを表示するごとに確認する」に設定すると、表示内容が更新されるようになります。
<Q13-5>Cookieに入れた文字が文字化けしてしまいます。
| <発生環境> |
| OS |
Any |
| JDK |
Any |
| Vender |
Any |
<Q13-6>Servletを実行し、ブラウザで表示させたところ、web.xmlのinit-paramタグで設定した日本語文字列が、文字化けを起こしてしまいます。
| <発生環境> |
| OS |
Any |
| JDK |
Any |
| Vender |
Any |
- <A13-6>
- web.xmlファイル自体のエンコーディングと、XMLのヘッダで指定するエンコーディング指定が異なっていることが考えられます。
例えばEUCエンコーディングで保存されたweb.xmlファイルに
<xml version="1.0" encoding="Shift_JIS"?>
といったヘッダ指定を行っていると、質問にあるような文字化けが発生します。
特に、ヘッダの指定がUTF-8であるのに対してweb.xml自体のエンコーディングがShift-JISやEUCである場合は、XMLファイルのパースに失敗してWebアプリケーション自体の起動に失敗する為注意が必要です。
XMLファイルのエンコーディング指定については16-5を参照してください。
<Q13-7>JSPを表示させると、ブラウザの表示が途中で途切れることがあります。
Tomcatを使用しています。
JSPを表示させると、ブラウザに全てのコンテンツが表示されないまま、途中で表示が停止してしまうことがあります。
どのような原因が考えられますか?
| <発生環境> |
| OS |
Windows XP SP1 |
| JDK |
1.4.2_05 |
| Vender |
Sun、Tomcat4.1.x |
- <A13-7>
- JSPコードの中で、例外が発生していないでしょうか。
アプリケーションサーバがブラウザにコンテンツを送信している最中に例外が発生すると、そこで処理が停止してしまうために、ブラウザの表示も中途半端なものになります。
通常アプリケーションサーバは、JSPコード中で例外が発生するとエラーメッセージを画面に表示しますが、ブラウザにコンテンツを送信し始めてしまった場合など、エラーメッセージを画面に表示できない場合があります。
そのような場合でもアプリケーションサーバのログにエラーが出力されている可能性があります。確認してください。
Tomcatの場合、ログのデフォルト出力ディレクトリは、
${TOMCAT_HOME}/logsです。
<Q13-8>Strutsの正規表現による入力チェックにて、「&」が使えません。
Strutsを利用しています。
validation.xmlのmask設定を使用して正規表現による入力チェックを行なおうとしていますが、この定義において&記号を使う事ができません。
例えば「半角英数と四則演算の記号のみ許す」という表現は
^[a-zA-Z0-9\+\-\*\/]$
で表されますが、
^[a-zA-Z0-9\+\-\*\/\&]$
などとすると、validationそのものが全く効かなくなってしまいます。
そのとき、エラーも表示されません。
| <発生環境> |
| OS |
Windows XP SP1 |
| JDK |
1.4.2_05 |
| Vender |
Sun |
- <A13-8>
- "&"の代わりに"&"あるいは"&"を使用してください。 XMLでは"&"、"<"は特殊な意味を持ちます。
区切り文字として使用するか、コメント、処理命令、CDATAセクション内で使 用する場合のみ、そのままの形で使用できます。
通常は、文字参照(ISO/IEC 10646 文字コード指定)あるいは文字列"&"、文 字列"<"を使用して別扱いしなければなりません。
注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
エスエムジー株式会社は一切関知いたしません。