- PR -

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

投稿者投稿内容
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-03-28 10:17
始めまして、ayumと申します。

現在Tomcat3.2.4を使用してサーブレットを作成しているのですが、
サーブレットから.jsp以外の拡張子のファイルへフォワードしようとすると
File Not Foundとエラーメッセージが返ってきます。
(.txrや.xls等の拡張子で上記の現象が発生)
試しに同じファイルの拡張子を.jspに変更してみると
とりあえずうまくいくのですが、
できることならファイルの拡張子は変えずにアクセスしたいのです。
Tomcatで.jsp以外の拡張子を扱う方法というのは存在しないのでしょうか?

フォワード部分のコードは以下の通りです。

private void forward( HttpServletRequest  req,
           HttpServletResponse res, String uri )
           throws ServletException, IOException {
  if ( uri != null ) {
    RequestDispatcher disp =
             sc.getRequestDispatcher( res.encodeURL( uri ) );
    if ( disp != null ) {
      disp.forward( req, res ); return;
    }
  }
  res.sendError( 404, "Not Found" );
}
_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp
愚者
会議室デビュー日: 2002/03/20
投稿数: 9
投稿日時: 2002-03-28 11:31
リダイレクトを使えばいいと思います。
動きが全く違うので気をつけてください。

リダイレクト:サーブレットからブラウザに対して指定のページを開くように要求します。
フォワード:サーブレットからJSPやサーブレットをサーバー内で呼び出します(いわゆるチェーン)
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-03-28 14:18
ご指摘の通りHttpServletResponseのsendRedirect(String)を使うことで
上記の問題を解決でしました。
どうもありがとうございました。
_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp
愚者
会議室デビュー日: 2002/03/20
投稿数: 9
投稿日時: 2002-03-29 16:32
もし、ユーザー認証をサーブレットで管理しているならば、
リダイレクト処理は適当ではありません。
認証を得なくても、ブラウザにアドレス直打ちで通ってしまいます。
確かリダイレクトだとブラウザにアドレスが出ると思いますが・・・。
セキュリティの観点から良くないことは明白です。

違う方法があると思いますが、この頃エンプラ開発してないので・・・・(T_T)
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2002-03-29 20:53
RequestDispatcher のフォワード処理は、クライアント側と一切干渉せずに
コンテナ内でServlet/JSP間通信を行う目的で定義された機能です。
Servlet/JSP以外のコンテンツに対して、この機能を用いるべきではありません。
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-04-01 12:06
>もし、ユーザー認証をサーブレットで管理しているならば、
>リダイレクト処理は適当ではありません。
>認証を得なくても、ブラウザにアドレス直打ちで通ってしまいます。

この問題に関しては別処理で管理をしているので大丈夫です。
さすがにアドレス直打ちで見れたらまずいので、そこは配慮済みです。

そして、別の問題になってしまうのですが、
HttpServletResponseのリダイレクト、あるいはRequestDispatcherのフォワード、
どちらにしても日本語URLが入ってくるとファイルを見つけてくれないのです。

ex) http://example/test/日本語.txt

この問題をどうにかして解決する方法はあるのでしょうか?
_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp
愚者
会議室デビュー日: 2002/03/20
投稿数: 9
投稿日時: 2002-04-01 13:27
コード:

public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    try{
        res.setContentType("text/plain"); ・・・ここで属性決める
        res.setContentType("application/pdf");・・とかもある
        
        ServletOutputStream out = res.getOutputStream();
        (略)
        ファイルの読み込み処理(InputStream is = ほにゃらら;)

        byte[] buf = new byte[1024];
        int len;
        while((len = is.read(buf, 0, buf.length) != -1){
            out.write(buf, 0, len);
        }
        
    }
    catch(Exception e){
        ・・・・
    }
}


ServletOutputStream を使えばいいかも・・・・
ただMIMEタイプを何にすればいいかわかりません。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-04-01 17:53
現状でURLに生の日本語が入るようなものって正当でしたっけ?
だめな気がしなくもないですが。

それは置いておいて、
java.net.URLEncoderでencodeしてからredirectとかではだめでしょうかね。
(試してないのでなんとも言えませんが)

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