2011-07-28 11 views
-2

URLを介してイメージを読み取り、JSPページでレンダリングする最良の方法は何ですか?JSP /サーブレット:URLを介してイメージを読み込んでJSPページでレンダリングする方法(イメージURLは公開されていません)

これまでのところ、2つのJSPページをコーディングしました。

EDIT START:

*Experimental: Obviously the ImageServ will be a servlet, not a jsp. 

EDITのEND:

index.jsp 

<%page .... 
<html> 
...... 
<img src="ImageServ.jsp?url=http://serveripaddress/folder/image.jpg" /> 
..... 


ImageServ.jsp 
<%@page import="javax.imageio.ImageIO"%> 
<%@page import="java.net.URL"%> 
<%@page import="java.io.*, java.awt.*, java.awt.image.*,com.sun.image.codec.jpeg.*" %> 
<% 
    try { 
     String urlStr = ""; 
     if(request.getParameter("url") != null) 
     { 
      urlStr = request.getParameter("url"); 
      URL url = new URL(urlStr); 
      BufferedImage img = null; 
      try{ 
        img = ImageIO.read(url); 
        out.println(" READ SUCCESS" + "<br>"); 
      }catch(Exception e) { 
        out.println("READ ERROR " + "<br>"); 
        e.printStackTrace(new PrintWriter(out)); 
      } 

      try { 
        response.setContentType("image/jpeg"); 
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream()); 
        encoder.encode(img); 
       }catch(Exception ee) { 
          response.setContentType("text/html"); 
          out.println("ENCODING ERROR " + "<br>"); 
          ee.printStackTrace(new PrintWriter(out)); 
      } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(new PrintWriter(out)); 
    } 
%> 

しかし、これは動作していないようです:

READ SUCCESS 
ENCODING ERROR 
java.io.IOException: reading encoded JPEG Stream 
    at sun.awt.image.codec.JPEGImageEncoderImpl.writeJPEGStream(Native Method) 
    at sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:476) 
    at sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:228) 

: すべての時間が、私はこのエラーが表示これを得る方法に関する任意のアイデア???

答えて

2

あなたの画像データは既にエンコードされているので、単にImageIO.write(img, "jpeg", response.getOutputStream());と書くことができます。 JPEGImageEncoderを使用する必要はありません(使用できません)。

+0

imgの型がBufferedImageであるため、 /ImageServ.jsp:57を言うエラーが得た:シンボル シンボルを見つけることができません:メソッド書き込み(java.awt.image.BufferedImage) 場所:クラスにjava.io.OutputStream \t \t \t \t o.write(IMG); – Satish

+0

@Satish:私は応答してコードを更新しました。 – zacheusz

+0

ありがとう! BufferedImageをjsp出力ストリームに正常に書き込む方法を見つけようとしています。 – Satish

0

古典的な質問です。ここに例があります:http://www.exampledepot.com/egs/javax.servlet/GetImage.html

また、JSPでコーディングすることはすべて行わないでください。フロントエンドのレンダリングコーディングのためだけにしてください。バックエンドクラスでJavaコーディングを行います。

0

ひどいひどいコード。 JSPのコントローラロジックを書くことは決してありませんバイナリデータをJSP出力ストリームに書き込むことはできません。ストリームは既にテ​​キスト出力用に初期化されています。ロジックをサーブレットに入れ、Commons IOで入力ストリームを応答出力ストリームにパイプします。これは動作します。あなたはまだその愚かな解決策を主張しているなら、レスポンスを完全に包み込み、代わりにバイナリデータを提供するフィルタを書く必要があります。参照のためにthisを参照し、そのコードを調べてください。がんばろう。

編集:

doGet(...) { 
    response.setContentType("image/jpeg"); 
    String url = request.getParameter("url"); 
    ... 
    InputStream is = ....getInputStream(); 
    IOUtils.copy(is, response.getOutputStream()); 
    // cleanup 
    } // done 

これは、ローカルディスクからどのように私のパイプPDFですが、URLからサービス提供に違いはありません。

+1

これは実験コードでした! JSPのリフレッシュは簡単で、変更とページのリロードを行うと、変更が実行されます。何らかの理由で、私の食が "出版"を求めているように、サーブレットがリフレッシュされるのはネック物の痛みです – Satish

+0

しかし、決してこのようなアプローチには慣れません。 安価なサーブレットのアプローチについては、上記を参照してください。 –

+0

コモンズioを使用した配管入力ストリームの例? – Satish

関連する問題