- - PR -
Tomcat3.2.4での.jsp以外の拡張子の取扱
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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 |
|
投稿日時: 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 ] |
|
投稿日時: 2002-04-02 14:47
多バイト文字 URL は規格としてはだめなんじゃないでしょうか。
RFC を見てみないと何ともですが。 もしかすると UTF-8 にすべきかもしれません。 # 確か HTML4.01 に「UTF8 を URLEncode したもの以外は間違いでうんぬん」と # 書いてあった記憶が… いま、上のソースでは MS932 決めうちになっていますが、これは特定のブラウザの特定のバージョンでの URL 扱いがこうなっているに過ぎないので、状況が許さないのであれば「このブラウザのこのバージョンだけね」というただし書きが必要になりますね。 |
|
投稿日時: 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の中でも特殊文字はエンコードしなさい、と書いてあります。 たとえば、スペースや%など) |
