- PR -

JSPのファイルサイズ取得

投稿者投稿内容
しがない開発者A
会議室デビュー日: 2008/09/18
投稿数: 5
投稿日時: 2008-09-18 23:23
 現在Webのシステム開発をしています。
クライアントからのリクエストをServletで受け、
requestJSP.forward(request, response);
にてJSPにてレスポンスを返すようにしています。

 JSPのレスポンス コンテンツサイズ(Content-Length)を取得し、その他の情報と供に、ユーザのアクセスログとしてDBへ保存しようとかんがえておりますが、ServletからJSPへ飛ばした後どのように、サイズをとればよいか分からず困っていますので皆様のお知恵を拝借できればと思います。

#response.getBufferSize()では実際のサイズではなく文字通りバッファサイズしか取得できません。。

以上、よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-09-18 23:41
Content-Length は keepalive 接続でない場合や HTTP/1.0 の場合、またチャンク転送の場合は設定されませんのであまり確実ではありませんね。

やるとすればフィルタで HttpServletResponse の wrapper を作成する方法でしょうか。結構テクニックが必要ですが。

アクセスログに記録されるバイトサイズを見る方法だと簡単ですかね。記録されるのはレスポンスを返したあとなのでサーブレットやフィルタからはとれませんが。
しがない開発者A
会議室デビュー日: 2008/09/18
投稿数: 5
投稿日時: 2008-09-19 00:14
 現在のアプリは、独自クライアント及びサーバのシステムで、クライアントからのHTTPリクエスト拡張ヘッダにユーザ識別のIDを付与しているため、ログをとる際は、どうしてもサーバ アプリケーション側でIDとレスポンスデータのサイズを記録したいのですが、う〜ん。

 アクセスログファイルからも考えたのですが、どうしてもリクエストのHTTP拡張ヘッダ内のUser IDとデータサイズを結びつけておきたいというのと、その他 付加情報もログとして保存する必要があるのでだめでした。

 『HttpServletResponse の wrapper を作成する方法でしょうか。結構テクニックが必要ですが。 』う〜ん。これは少し大変そうですね。。何か良い方法があればよいのですが。。

 Net上の情報を漁っていますが、未だ良い解に巡り合えずにいます。
わたなべ
大ベテラン
会議室デビュー日: 2007/12/09
投稿数: 123
お住まい・勤務地: 札幌
投稿日時: 2008-09-19 00:47
そこまで独自ならばプロキシサーバを経由させてキャプチャしてはどうでしょう。
もはやJavaとかServletとか関係なくなりますけど。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-09-19 01:00
JBoss や Tomcat をお使いであれば AccessLogValve を拡張することで実現できるかもしれません。

しかしリクエストのたびにデータベースに情報を保存するとなるとパフォーマンスにかなりの悪影響を及ぼしそうです。
本当にコンテントサイズを記録する必要があるのか、「そもそも・・」という視点で見直すこともオススメします・・・
しがない開発者A
会議室デビュー日: 2008/09/18
投稿数: 5
投稿日時: 2008-09-19 01:42
 実はリバース プロキシサーバを経由させる部分もあるのですが、オーバーヘッドがかかるため全ての部分ではそのような実装になっていません。HTMLを吐き出す部分は全体の一部なので、デザインもしやすくJSPで実装しましたが、どうしてもページサイズがアプリケーション側でほしいときは、Servletで書き出すしかないのでしょうかね?

 ただ、デザイナさん向けの可読性という意味では少しつらいです。。

 また、コンテンツサイズの保存ですが、ビジネスモデル的に従量課金のため、必要となります。ASP的なサービスで、全て此方のサーバ アプリケーションで処理しろということで(弱い立場です。。)仕方なく。。

最終的にはJBossに乗せる予定です。1ヶ月ほど前、AccessLogValveも少しいじってみましたが、実現には至りませんでした。

引き続き、何かよいお知恵ございましたら、お願いいたします。

[ メッセージ編集済み 編集者: しがない開発者A 編集日時 2008-09-19 01:48 ]

[ メッセージ編集済み 編集者: しがない開発者A 編集日時 2008-09-19 01:50 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-09-19 02:23
>最終的にはJBossに乗せる予定です。1ヶ月ほど前、AccessLogValveも少しいじってみましたが、
>実現には至りませんでした。
AccessLogValve でサイズを出力している箇所があると思うのですが、何が問題で実現に至らなかったのでしょうか?
しがない開発者A
会議室デビュー日: 2008/09/18
投稿数: 5
投稿日時: 2008-09-19 06:23
インギさん、わたなべさん レスありがとうございます。

>AccessLogValve でサイズを出力している箇所があると思うのですが、何が問題で実現に至らなかったのでしょうか?

 ログとしてほしいデータは、ユーザ毎の使用データサイズとなり、クライアントからのリクエストのHTTP拡張ヘッダに付加されたユーザのIDを取り出し、そのリクエストに対してのレスポンスのサイズとバインドした形のログを出力したいためAccessLogValveでは、HTTP拡張ヘッダに付加されたユーザのIDを取り出しログにはくことができなかったためあきらめた経緯があります。

 各ユーザのデータ量をとりたいという要求はあると思おうのですが、JSPでは機能を実現するのは難しいのでしょうかね。。

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