サーブレット・JSPでの画像表示


問題

DBにバイナリーファイルとして保存したimageデータを、
jspのsrcよりdoGetにてjspへレスポンスが出来ず画像を出力する事が出来ずに困っております。

DB保存画像 64KBのpng画像
型 BLOB型

実際のプログラム

JSP

・・・・・・・・・・
<body>
<h1>データを表示する</h1>

ログインID: ${JavaBean.id}<br>
プロフィール写真:<img src="/プロジェクト名/ImageServlet?id=${JavaBean.id}"  > <br>

</body>
・・・・・・・・・・・

サーブレット

package servlet;
import........

@WebServlet("/ImageServlet")
public class ImageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String id = request.getParameter("id");
        ImageDAO dao = new ImageDAO();
        BufferedImage bimg = dao.selectImageById(id);

        response.setContentType("image/png");
        OutputStream os =null;
        os=response.getOutputStream();
        ImageIO.write(bimg, "png", os);
        os.flush();
    }
}

DAO

package dao;

import .........

public class ImageDAO {
    private String url = "jdbc:h2:tcp://localhost/~/DB名";
    private String user = "";
    private String passwd = "";

public BufferedImage selectImageById(String id) {

       Connection con = null;

        try {
            Class.forName("org.h2.Driver");
            con = DriverManager.getConnection(url, user, passwd);

            //SQL文
            String sql = "SELECT FILE FROM テーブル名 WHERE USER_ID =  ?  ";

            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, "id");
            ResultSet rs = ps.executeQuery();

            //データ取り出し
            if (rs.next()) {
                while (rs.next()) {
                    InputStream is = rs.getBinaryStream("FILE");
                    BufferedInputStream bis = new BufferedInputStream(is);
                    return ImageIO.read(bis);
                }
            }
        } catch (IOException | SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

エラー内容

Tomcatのエラーログのエラー

実行後に表示されるimage表示アイコンの上を右クリックで開くと現れるエラー

Googleの検証ページのコンソール

考察

エラーログにはServlet.service()が例外をなげました。と記載があり、
Googleの検証ページではデータが大きので変換ができないのようなエラーの記載がありました。

上記のエラーが抽出されServletのレスポンスが帰らない状態です。
画像データ変換容量の問題と解釈をしました。
getBinaryStream("FILE")で受け取り、
BufferedInputStreamにしてコンテンツタイプの指定を行いOutputStreamで返しているはずなのですが、
Servletが例外を出しレスポンスが帰りません。

良い解決法があればご教授をお願いたします。