서블릿 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 오류 로그 오류


실행 후 표시되는 이미지 표시 아이콘을 마우스 오른쪽 버튼으로 클릭하면 나타나는 오류



Google 검증 페이지 콘솔


고찰



에러 로그에는 Servlet.service()가 예외를 올렸습니다. 라고 기재가 있어,
Google의 검증 페이지에서는 데이터가 크기 때문에 변환이 불가능한 것과 같은 오류의 기재가 있었습니다.

상기의 에러가 추출되어 Servlet의 응답이 돌아오지 않는 상태입니다.
이미지 데이터 변환 용량의 문제와 해석을 했습니다.
getBinaryStream("FILE")로 받고,
BufferedInputStream로 하고 컨텐츠 타입의 지정을 실시해 OutputStream로 돌려주고 있을 것입니다만,
Servlet이 예외를 발생시키고 응답이 반환되지 않습니다.

좋은 해결책이 있으면 교수를 부탁드립니다.

좋은 웹페이지 즐겨찾기