2016-05-23 20 views
0

私のpostgresqlデータベースに画像をアップロードしていて、アップロードは成功しています。今度はこのイメージをJSPで表示したいのですが、データベースに取り込むことができましたが、イメージを表示するためにJSPに渡す方法がわかりません。 サーブレットからJSPに画像を正しく渡す方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     Connection connect; 
     String userName = null; 
     byte[] image = null; 
     String imageName = null; 
     try { 
      connect = DriverManager.getConnection(databaseUrl, databaseUsername, databasePassword); 
      PreparedStatement select = connect.prepareStatement("SELECT username,image,image_name FROM users WHERE username = ?;"); 
      select.setString(1, "steve"); 
      ResultSet selectSet = select.executeQuery(); 

      while(selectSet.next()) { 
       userName = selectSet.getString(1); 
       image = selectSet.getBytes(2); 
       imageName = selectSet.getString(3); 
      } 

      request.setAttribute("username", userName); 
      response.setContentType(getServletContext().getMimeType(imageName)); 
      response.setContentLength(image.length); 
      response.getOutputStream().write(image); 


     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 


    } 

IはJSP

request.getRequestDispatcher("viewImage.jsp").include(request, response); 

に画像をダウン渡すのrequestDispatcherを使用してみましたが、私はIllegalStateExceptionが(のgetOutputStream()がすでに呼び出されている)に遭遇しました。

これは私のJSPコード

<c:out value='${requestScope.username }' /> 
    <img src="${pageContext.request.contextPath}"> 
  1. では、画像を渡すために、サーブレットからJSPを呼び出すが、他の方法はありますか?
  2. コンテンツタイプを画像のMIMEタイプに設定すると、コンテンツタイプのために 'username'が表示されないことになりますか?どうすれば修正できますか?
  3. JSPに画像を伝承することができた方法については、私は朝からこのポストを探していた、と私は迷ってしまいました

How to retrieve and display images from a database in a JSP page?

EDIT:アプリケーションの目的が表示されていますユーザーのプロフィール(画像とテキスト情報)

+0

重複で説明したように、 '' URLはサーブレットを呼び出す必要があります。あなたはしません。不明確な理由のために、あなたは ''からサーブレットのURLとイメージのファイル名/識別番号を削除しました。**私はキックオフの例を引き継いでそのまま続けることを強くお勧めします。 – BalusC

+0

私の zbryan

+0

複製の例に従い、コードスニペットの前後のテキストも読んでください。 – BalusC

答えて

1

は、画像をJSPに渡す必要はありません。

  1. 最初に、ブラウザはJSPページのURLを呼び出し、img要素をレンダリングします。
  2. ブラウザは、画像のsrc属性のURLを使用して、再度サーバーを呼び出します。
  3. これはあなたのサーブレットを呼び出す(右?)ので、サーブレットはイメージバイトをブラウザに戻すだけで済みます。
+0

私はそれを得ることはできません、私のアプリケーションの流れを教えてくださいできますか?これは私が達成しようとしているものです JSP(アップロードファイル) - >サーブレット(DBから画像を取得) - > JSP(画像を表示)ステップ1では、img要素はレンダリングされると言っていますが、私のアプリケーションでは、1番目のjsp(アップロードファイル)にimg要素はありません。 DBからイメージを取得していないので、2番目のjsp(ビューイメージ)を直接呼び出すと、何も表示されません。 – zbryan

0

次のいずれかが可能です、あなたのサーブレットから、さんが言う「画像/ GIF」を聞かせ

などの「IMG」タグの「SRC」属性としてサーブレットのパスを指定するMIME-TYPEのよう

ストリーム画像

<img src="/servlets/imgdata.do?id=1111"> 

たり、コンテキストルート内のファイルとJSP

UPD相対パスを渡すために画像データを保存します。

:同じようにリダイレクト
request.getSession().setAttribute("imgsrc", "myservlet.do?id=" + imgId); 
    request.getRequestDispatcher("my.jsp").forward(request, response); 

あなたもリクエストの

request.setAttribute(name, val); 

(全体ではないセッション)のスコープを使用することができます。

+0

ごめんなさい。私はあなたの答えに混乱し、私の最初の質問につながります。 "サーブレットはJSPを呼び出してイメージを渡すことはできますか?"私は流れを得ない – zbryan

関連する問題