通过jsp向mysql插入图片并显示到页面的问题
向mysql插入图片是通过二进制输入流的形式实现的,就是pstmt.setBinaryStream(2,str,str.available());存储在数据库longblob数据类型里面。以上这些已经实现。
接着我想从数据库里面取出数据,并在页面显示图片,以下是部分代码:
public class DBResult {
public static InputStream outImage(Connection conn,String picid) {
int id=Integer.parseInt(picid);
String sql="select pic from p where picid="+id;
PreparedStatement pstmt = null;
ResultSet rs=null;
InputStream is = null;
try{
pstmt = (PreparedStatement) conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()){
is = rs.getBlob("pic").getBinaryStream();
}
is.close();
rs.close();
pstmt.close();
}catch (Exception e) {
e.printStackTrace();// TODO: handle exception
}
return is;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
String page=null;
String picid = request.getParameter("txtpicid");
if(picid!=null){
response.setContentType("image/jpeg");
Connection conn = dataBase.getConnection();
InputStream is=DBResult.outImage(conn, picid);
if(is!=null){
try{
is=new BufferedInputStream(is);
BufferedImage bi=ImageIO.read(is);
OutputStream os=response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
encoder.encode(bi);
is.close();
os.close();
}catch (IOException e) {
System.err.println(e.getMessage());
}
}
}
request.setAttribute("picid", picid);
page="imageout.jsp";
response.sendRedirect(page);
}
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1815)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
注:这个错误是由这句response.sendRedirect(page);引起的,但我要跳到imageout.jsp页面又用这句,求解决办法。
还有就是imageout.jsp这个页面不显示图片,怎么解决?
[最优解释]
解决了,只是路径问题而已,总是绕不过弯来。
[其他解释]
is.close();
你关了它干什么?
[其他解释]
求高手指教!
[其他解释]