- PR -

Tomcat4.1で、漢字URLが通らない

1
投稿者投稿内容
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-06-29 14:43
先日、Windows Insiderにて投稿した内容なのですが、
やはり、Tomcatの振る舞いに関係するのではないかと思いましたので、
改めてこちらに再投稿致します。
なお、The Jakarta Projectの掲示板の方にもおじゃまさせて頂きました。m(_ _)m

Windows2000 Server + Tomcat 4.1 にて、サイトを運用しようとしています。
ところが、デバッグ機と本番機で、漢字が含まれるURLに対する
振る舞いが違っていまして、解決策を探しています。

現象なのですが・・・。

まず、Tomcatをセットアップして、http://localhost:8080/examplesにアクセスします。
サンプル群のindex.jspは、examples/index.jspなので、
この場合は、images, jsp, servletsの3つのフォルダが表示されます。

ここで、examplesの直下に、漢字名のフォルダを作成します。(例:「テスト」)
ブラウザをリロードすると、今度はフォルダが4つ、漢字名フォルダも表示されています。

で、いざ、この漢字名フォルダを選択すると、

HTTP Status 404 - /sekikaku/contents/%83e%83X%83g

となってしまうんです。
これが片方だけの現象でして、もう片方については、正常に表示されてまして、
URLの該当部分をそのままコピーしても受け付けてくれるくらいです。

エンコードされたURLは渡っているのに、デコードされていないのでしょうか。
どこか、いじってはいけない部分をいじってしまったのかと思うのですが。
上記の現象について、何かご存じの方がいらっしゃいましたら、ご教示をお願い致します。
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-06-29 16:32
引用:

Edossonさんの書き込み (2004-06-29 14:43) より:

Windows2000 Server + Tomcat 4.1 にて、サイトを運用しようとしています。
ところが、デバッグ機と本番機で、漢字が含まれるURLに対する
振る舞いが違っていまして、解決策を探しています。
  :
まず、Tomcatをセットアップして、http://localhost:8080/examplesにアクセスします。
サンプル群のindex.jspは、examples/index.jspなので、
この場合は、images, jsp, servletsの3つのフォルダが表示されます。
  :
で、いざ、この漢字名フォルダを選択すると、
HTTP Status 404 - /sekikaku/contents/%83e%83X%83g


index.jspやTomcatの実装はまったく見てませんので、間違っている可能性は有りますが。

うまく動かないほうのURL(%83e%83X%83g)は「テスト」をSJISでURLエンコードしています。
(厳密に言えば、SJISの2バイト文字を ISO-8859-1 と見なしているため1バイトずつの文字と解釈され、2バイト目が%xxになっていない)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11271&forum=12
にも書きましたが、
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/appendix/notes.html#h-B.2
で、とりあえずURLはUTF-8で送ることが推奨されています。

UTF-8で漢字URLが送られればおそらくうまく行くのですが、うまく行かない原因としては2つ有ると思います。

  • 開発系・本番系でOS・ブラウザは同じだが、ブラウザの設定が微妙に異なる。
  • jspのエンコードがおそらくデフォルト(ISO-8859-1)

1点目のほうは、例えばブラウザがIEだとすると、「ツール」→「インターネットオプション」以下に、「常にUTF-8としてURLを送信する」と言うチェックがあります。それの有無を調べてください。(ブラウザによりますが…)

2点目は、ブラウザで上記のような設定をしていない・又は設定そのものが無い場合、ページのエンコードでURLはエンコードするような仕様になっているものが多い、と言う事に起因します。
ページのエンコードがISO-8859-1だと(1点目の設定がされていないブラウザでは)「漢字URL」もISO-8859-1で解釈され1バイトずつURLエンコードされます。
この状態を回避するには、ページをUTF-8で出力するようにすると言う方法があります。


(漢字URLについては全てのサーバ・全てのブラウザ(ユーザエージェント)で動作が統一されているわけではないので、根本的には使わないことをお勧めします。)
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-06-29 16:48
引用:

JWさんの書き込み (2004-06-29 16:32) より:

UTF-8で漢字URLが送られればおそらくうまく行くのですが、うまく行かない原因としては2つ有ると思います。

  • 開発系・本番系でOS・ブラウザは同じだが、ブラウザの設定が微妙に異なる。
  • jspのエンコードがおそらくデフォルト(ISO-8859-1)




おそらくは2点目かと思われます。
第3のマシンから、本番機、デバッグ機にそれぞれアクセスした場合、
同じ現象が起こります。

引用:

ページのエンコードがISO-8859-1だと(1点目の設定がされていないブラウザでは)「漢字URL」もISO-8859-1で解釈され1バイトずつURLエンコードされます。
この状態を回避するには、ページをUTF-8で出力するようにすると言う方法があります。



ご指摘の件は了解しました。
ところで、問題のjspですが、これはurlの指定したフォルダに
welcome-file-listにあるファイルが存在しないために、Tomcatが生成したものです。
このような場合の、エンコードを指定する方法・箇所があるのでしょうか。

引用:

(漢字URLについては全てのサーバ・全てのブラウザ(ユーザエージェント)で動作が統一されているわけではないので、根本的には使わないことをお勧めします。)



ポリシーの管理者が自分だったら、こんなことしないです
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-06-29 17:42
引用:

Edossonさんの書き込み (2004-06-29 16:48) より:

おそらくは2点目かと思われます。
第3のマシンから、本番機、デバッグ機にそれぞれアクセスした場合、
同じ現象が起こります。


うーん、2点とも違うと言う可能性も残っているので。

ご自身で作成したjspだと思っていて、Tomcatデフォルトのものだと言うことも把握していませんでした。
(Tomcat4が手元に無いので5.0.24で試したら、ディレクトリリストを出力するページ自身はUTF-8で出力されたものの、漢字のファイルにはアクセス不可でした。)

多分これ以上お役には立てないかと思います。

引用:

ポリシーの管理者が自分だったら、こんなことしないです


ご愁傷様です…
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-29 17:48
引用:
Edossonさんの書き込み (2004-06-29 16:48) より:

ところで、問題のjspですが、これはurlの指定したフォルダに
welcome-file-listにあるファイルが存在しないために、Tomcatが生成したものです。
このような場合の、エンコードを指定する方法・箇所があるのでしょうか。



ディレクトリ・リストを作成してるのはデフォルト・サーブレットです。

が、HTTP ヘッダ的には既に charset=UTF-8 で返してます。
ただし、HTML のヘッダには指定されてません。

このページは 5.0 のですが、4.1 でも参考になると思います、多分。
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/default-servlet.html

本番機とデバッグ機で、ディレクトリ・リストの HTML に違いは無いのですか ?
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-06-29 17:56
すみません。最初の投稿に間違いがありました・・・。

投稿において、「テスト」を入力して、そのURLエンコードが%83e%83X%83g と
ありますが、これは、アドレスバーに直接漢字を入力した結果です。
申し訳ありませんでした。

しかし、本題の、ブラウザに表示されている漢字フォルダへのリンクを
クリックした場合も、うまくいかないのです。
リンクそのものは、漢字でも表示されているのですが、
クリックすると、

HTTP Status 404 - /examples/%E3%83%86%E3%82%B9%E3%83%88/

となります。
この場合の漢字は、utf-8でエンコードされているはずなのですが。
こちらの方は、他方のマシンにコピーすると、期待通りの表示をしてくれます。

引用:

(Tomcat4が手元に無いので5.0.24で試したら、ディレクトリリストを出力するページ自身はUTF-8で出力されたものの、漢字のファイルにはアクセス不可でした。)



ということは、デフォルトでは日本語は扱えないと。ご指摘ありがとうございます。
Tomcatの設定を洗ってみます。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-06-29 18:11
引用:

はしもとさんの書き込み (2004-06-29 17:48) より:

本番機とデバッグ機で、ディレクトリ・リストの HTML に違いは無いのですか ?



本番機:うまくいかない
コード:

<HR size="1" noshade><h3>Apache Tomcat/4.1.30</h3></body>



デバッグ機:期待通り
コード:

<HR size="1" noshade><h3>Apache Tomcat/4.1.27</h3></body>



・・・んなことやってちゃダメですね。(大泣
紹介して頂いたサイトを見て勉強します。
ご教示頂きました皆様、ありがとうございました。

[ メッセージ編集済み 編集者: Edosson 編集日時 2004-06-29 18:18 ]
1

スキルアップ/キャリアアップ(JOB@IT)