java - Unable to show images in JSP from database using servlet -
i trying fetch , display , images saved blob on jsp mysql database using servlet. wrote code referring many websites , still , not working. not getting type of errors. showing this

i have created table using
create table contacts(id int not null auto_increment, name varchar(40), second varchar(40), photo blob, primary key(id));   this servlet displayservlet.java
@webservlet("/displayservlet") public class displayservlet extends httpservlet {     private static final long serialversionuid = 1l;     connection conn = null;     preparedstatement stmt = null;     resultset rs = null;     public void init() throws servletexception {      }  public displayservlet() {     super(); }   protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {     dopost(request, response); }  /**  * @see httpservlet#dopost(httpservletrequest request, httpservletresponse response)  */ protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {      string imageid = request.getparameter("id");     system.out.println(imageid);     inputstream simage;        // check if id supplied request.     if (imageid == null) {         // thing if id not supplied request.         // throw exception, or send 404, or show default/warning image, or ignore it.         response.senderror(httpservletresponse.sc_not_found); // 404.         return;     }      try{         class.forname("com.mysql.jdbc.driver");         conn = drivermanager.getconnection("jdbc:mysql://localhost:3306/projectbuy", "root","root");         stmt = conn.preparestatement("select photo contacts id=" + imageid);         rs = stmt.executequery();         if(rs.next()){             system.out.println("inside rs");             byte[] bytearray = new byte[1048576];             int size=0;             simage = rs.getbinarystream(4);             response.reset();             response.setcontenttype("image/jpeg");             while((size = simage.read(bytearray)) != -1 ){                 response.getoutputstream().                 write(bytearray,0,size);             }         }      } catch (exception e){         e.printstacktrace();     } }   }
here jsp page , imagedemo.jsp
<%@page contenttype="text/html" pageencoding="utf-8"%> <!doctype html> <html>     <head>         <meta http-equiv="content-type" content="text/html; charset=utf-8">         <title>jsp page</title>     </head>     <body>          <h1>hello world!</h1>           <img src="displayservlet?id=1" height="150px" width="150px" alt="profilepic">      </body> </html>   finally xml file
<servlet-mapping>         <servlet-name>action</servlet-name>         <url-pattern>*.do</url-pattern>     </servlet-mapping>  <servlet>     <servlet-name>displayservlet</servlet-name>     <servlet-class>displayservlet</servlet-class> </servlet>  <servlet-mapping>     <servlet-name>displayservlet</servlet-name>     <url-pattern>/displayservlet/*</url-pattern> </servlet-mapping>      
you're selecting 1 column:
stmt = conn.preparestatement("select photo contacts id=" + imageid);   but later trying retrieve 4th:
simage = rs.getbinarystream(4);   and have no flush() call afer writing loop. it's idea use connection pool instead of instantiating directly drivermanager, , close after work.
Comments
Post a Comment