- PR -

サーブレットで画像を配信(?)したい

投稿者投稿内容
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-05-31 21:25
getAttribute()を使うのではなく、getId()を使って一応問題解決です。

しかし、sessionDestroyed(HttpSessionEvent hse)の中で、
以下のようにしてパスを取得したかったのですが、取得できませんでした。
String strPathName = getServletContext().getRealPath("/");
(取り合えず、今回はパスを直に指定してテストしました)
listenerの中では、使えないのでしょうか?
質問ばかりですみませんが、アドバイスお願いいたします。


public class checkSessionServlet extends HttpServlet implements HttpSessionListener
{
public void sessionDestroyed(HttpSessionEvent hse)
{
String strPathName = getServletContext().getRealPath("/"); ← これダメ?
}
}

Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-05-31 21:53
別インスタンスですから。
c9katayama
常連さん
会議室デビュー日: 2003/02/04
投稿数: 38
投稿日時: 2005-05-31 23:12
ストリームを使う場合、以下のようにやります。

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
BufferedImage image
= new BufferedImage(100,100,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D)image.getGraphics();
//このgに対して描画
res.setContentType("image/jpeg");
ServletOutputStream output = res.getOutputStream();
ImageIO.write(image,"jpeg",output);
}

大体こんな感じです。
画像生成して、ServletOutputStreamにデータを直接流します。

ファイルに残すのは後処理がありますし、セキュリティ的に
問題もありますので、個人的にはおすすめではありません。

MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-06-01 08:42
自分がやった案件ですと
イントラ限定で + 漏れても困るようなデータではない + 複数のファイルを同時に作成しなければいけない。
と言う条件がそろっていたので、セキュリティ的にも処理的にも
ファイルを作成して削除するという流れの方がやりやすかったのですが
ただ単に画像を表示するだけなら皆さんが仰るとおりストリームだけでいい気がします。

ちなみパス関してですが、私の場合はpublicでstaticな属性を作ってそこに外部から渡していました(汗

ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-06-01 12:16
Anthyhimeさん、c95029さん、MARUさん、レスありがとうございます。

>別インスタンスですから。
Listenerとして作成したサーブレットと、ユーザがアクセスするサーブレット(?)は別インスタンスですが、どちらも同じフォルダに入れてあるのでどちらからも取得できると思ったのですが、ダメですか?

>ファイルに残すのは後処理がありますし、セキュリティ的に
>問題もありますので、個人的にはおすすめではありません。
セキュリティの問題ですか。
現在は実験なので、セキュリティはどうでもいいですが、実際運用する場合にはセキュリティをしっかりしないといけないので、ストリーム方式に書き換えるべきということですね。
#これからストリーム方式で、実験してみます。

>イントラ限定で + 漏れても困るようなデータではない + 複数のファイルを同時に作成
>しなければいけない。
>と言う条件がそろっていたので、セキュリティ的にも処理的にも
>ファイルを作成して削除するという流れの方がやりやすかったのですが
ケースバイケースで使い分けるといった感じでしょうか。

いずれにしても、どうしていいものやらさっぱりわからん状態から、2種類の実現方法に関する知識を得られたことは、とても有用です。
みなさん、ありがとうございました。
#といっても、ストリーム方式をこれから実験してみるトコなので、更に質問があると思いますので、今後も見捨てずによろしくお願いいたします。



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