- PR -

Tomcat3.2.4での.jsp以外の拡張子の取扱

投稿者投稿内容
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-04-01 18:42
愚者さんのご指摘の通りjavax.servlet.ServletOutputStreamと
java.io.FileInputStreamを組み合わせてあげて日本語URLに対応することができました。
何度も教えていただきまして本当にありがとうございます。
具体的には以下のような感じで試してみました。

private void redirect( HttpServletRequest req, HttpServletResponse res, User u )
            throws ServletException, IOException {
  ServletOutputStream out = null;
  FileInputStream is = null;
  try{
    // content-typeを取得するメソッドで得たcontent-typeをセット
    res.setContentType( getContentType( req ) );
    out = res.getOutputStream();
    // ファイルの場所を取得するメソッドで得たパスよりInputStreamを作成
    is = new FileInputStream( getPath( req ) );
    byte[] buf = new byte[1024];
    int len;
    while( ( len = is.read( buf, 0, buf.length ) ) != -1 ){
      out.write( buf, 0, len );
    }
  } catch( Exception e ) {
    ・・・エラー処理・・・
  } finally {
    if( out != null ) out.close();
    if( is != null ) is.close();
  }
}

>現状でURLに生の日本語が入るようなものって正当でしたっけ?
>だめな気がしなくもないですが。

私としてもダメなような気がするのですが、
そうもいってられない事情があるのです・・・(泣)。

_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-04-02 13:52
自己レスになってしまいますが、
以下のようなやり方でも日本語URL対応はとりあえずできるようです。
ただし、うまくいかない場合もあるので
参考までにうまくいく例と失敗する例を以下に挙げます。

○/example/test.txt
○/example/日本語.txt
×/example/日本語test.txt

private void redirect( HttpServletRequest req, HttpServletResponse res, ) t               hrows ServletException, IOException {
  try {
    // content-typeを取得するメソッドで得たcontent-typeをセット
    res.setContentType( getContentType( req ) );
    // リンクを取得するメソッドで得たパスより文字コードを変換してリダイレクト
    res.sendRedirect(
      new String( getPath( req ).getBytes( "MS932" ), "8859_1" ) );
    return;
  } catch( UnsupportedEncodingException e ) {
    ・・・エラー処理・・・
  }
  res.sendError( 404, "Not Found - Encoding Failed" );
}

_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp

[ メッセージ編集済み 編集者: ayum 編集日時 2002-04-02 13:53 ]

[ メッセージ編集済み 編集者: ayum 編集日時 2002-04-02 13:53 ]
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-04-02 14:47
多バイト文字 URL は規格としてはだめなんじゃないでしょうか。
RFC を見てみないと何ともですが。
もしかすると UTF-8 にすべきかもしれません。

# 確か HTML4.01 に「UTF8 を URLEncode したもの以外は間違いでうんぬん」と
# 書いてあった記憶が…

いま、上のソースでは MS932 決めうちになっていますが、これは特定のブラウザの特定のバージョンでの URL 扱いがこうなっているに過ぎないので、状況が許さないのであれば「このブラウザのこのバージョンだけね」というただし書きが必要になりますね。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2002-04-02 20:38
># 確か HTML4.01 に「UTF8 を URLEncode したもの以外は間違いでうんぬん」と
># 書いてあった記憶が…

http://www.ietf.org/rfc/rfc1738.txt
の中に

URLs are written only with the graphic printable characters of the
US-ASCII coded character set. The octets 80-FF hexadecimal are not
used in US-ASCII, and the octets 00-1F and 7F hexadecimal represent
control characters; these must be encoded.

とあります。
すなわち、ASCIIコード20〜7Eの範囲内の文字か、
そうでなければエンコード(%xx%xx)しなければならないということです。
(あと、20〜7Eの中でも特殊文字はエンコードしなさい、と書いてあります。
 たとえば、スペースや%など)

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