hello all,
i wrote a code for display a image from database .. it is working fine ...but i want to write some text abouv and below the image.. my code is ...
package com.servlet;
import java.io.IOException;
import java.io.InputStream;
//import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DisplayImageFromDataBase extends HttpServlet {
String url = "jdbc:mysql://localhost/db";
String user = "root";
String password = "password";
String jdbcDriver = "com.mysql.jdbc.Driver";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
private static final long serialVersionUID = 5688494296139630737L;
public void doGet(HttpServletRequest request , HttpServletResponse response) throws ServletException , IOException{
String query = null;
String image = null;
int imagelength = 0;
// response.setContentType("text/html");
// PrintWriter pw = response.getWriter();
// pw.println("Display Image From DataBase");
// pw.println("Hansika Motwani");
System.out.println();
try{
Class.forName(jdbcDriver).newInstance();
conn = DriverManager.getConnection(url,user,password);
//pw.println("Before Query<br>");
System.out.println("Before Query");
query = "select image FROM db.servlet_images where image_Id = 2";
stmt = conn.prepareStatement(query);
stmt.executeQuery();
rs = stmt.getResultSet();
if(rs.next()){
image = rs.getString(1);
imagelength = image.length();
//pw.println("Image Length is : " + imagelength + "<br>");
System.out.println("Image Length is : " + imagelength);
}
query = "select image FROM db.servlet_images where image_Id = 2";
stmt = conn.prepareStatement(query);
stmt.executeQuery();
rs = stmt.getResultSet();
if(rs.next()){
int length = image.length();
byte [] bt = new byte[length];
InputStream ips = rs.getBinaryStream(1);
int index = ips.read(bt,0,length);
//pw.println("Index is : " + index + "<br>");
System.out.println("Index is : " + index);
stmt.close();
response.reset();
response.setContentType("image/jpg");
response.getOutputStream().write(bt,0,length);
response.getOutputStream().flush();
}
stmt.close();
conn.close();
}catch(SQLException e){
//pw.println("SQLException<br>");
System.out.println("SQLException");
//pw.println("Error is : " + e.getMessage() + "<br>");
System.out.println("Error is : " + e.getMessage());
}catch(ClassNotFoundException e){
//pw.println("ClassNotFoundException<br>");
System.out.println("ClassNotFoundException");
//pw.println("Error is : " + e.getMessage() + "<br>");
System.out.println("Error is : " + e.getMessage());
}catch(IllegalAccessException e){
//pw.println("IllegalAccessException<br>");
System.out.println("IllegalAccessException");
//pw.println("Error is : " + e.getMessage() + "<br>");
System.out.println("Error is : " + e.getMessage());
}catch(InstantiationException e){
//pw.println("InstantiationException<br>");
System.out.println("InstantiationException");
//pw.println("Error is : " + e.getMessage() + "<br>");
System.out.println("Error is : " + e.getMessage());
}
finally{
stmt = null;
conn = null;
}
}
}
when i use printwriter then it gives error....
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.IllegalStateException: getWriter() has already been called for this response
org.apache.coyote.tomcat5.CoyoteResponse.getOutputStream(CoyoteResponse.java:568)
org.apache.coyote.tomcat5.CoyoteResponseFacade.getOutputStream(CoyoteResponseFacade.java:148)
com.servlet.DisplayImageFromDataBase.doGet(DisplayImageFromDataBase.java:64)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.