日期:2014-05-17  浏览次数:20768 次

struts2和hibernate怎么从数据库中取也图片直接显示在jsp上面?
小弟用ssh框架在写一个图书馆管理系统,我想从数据库中取出图片,直接显示在jsp页面上(不是先下载下来),Action中取得书本的图片信息后用ServletOutputStream直接作为流传上jsp直接显示,当然了这里的Action中还有书本的其它信息要传到下一个jsp页面,可是老是
java.lang.IllegalStateException: getOutputStream() has already been called for this response这个异常,有人建议我把execute方法中最后返回null,异常没有了,图片也得到了,可是因为没有跳转到下一个页面,书本的其它信息是得不到的。。。有没有一个好的方法,可以把图片能显示在页面上,而这个页面还能从Action中接收到其它信息???求解。。。。。。下面是小弟写的一部分代码:
private String book_id;
private BookService bookService;
private HttpServletResponse response;
private Book book;
private ServletOutputStream out; // 二进制流可以直接在jsp页面显示

public String execute() throws Exception {

//getBookDetails是从数据库中得到一个书本所有信息,当然包括图片信息,图片是Blob类型
if (!getBookDetails()) {
return "failed";
}
getImage();
return "success";
}

public String getImage() {

Blob image = book.getImage();

try {
InputStream in = image.getBinaryStream();
out = response.getOutputStream();
byte b[] = new byte[in.available()];
in.read(b);
out.write(b);
out.flush();
out.close();
in.close();
} catch (SQLException e) {
e.printStackTrace();
return "error";
} catch (IOException e) {
e.printStackTrace();
return "error";
}
return "show";
}

private boolean getBookDetails() {

book = bookService.getBookByBook_Id(book_id);
if (book == null)
return false;
return true;
}


------解决方案--------------------
为什么要用ServletOutputStream ,直接把获取图片的代码封装,用FileOutOutputStream,返回一个图片url的字符串,什么就都不影响了
------解决方案--------------------
图片存在数据库中药转换成2进制  数据量会很大 一般是不会这样用的