This article is just an extension to my previous article that stores images or data using swing components. In this article we are using the same thing but the way of doing is different. We will be using Servlets and JSP to store and retrieve images from a database. If you haven’t gone through my previous article then kindly have a look at it.
Inserting Image in Database using Java
We’ll be using the same database that has been used in the previous article.
Our screenshot will be like the following.
Form
The following is the source code for it.
Index.jsp
  1. <%@ Page ContentType="text/html" pageEncoding="UTF-8" %>
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>JSP Page</title>
  7. </head>
  8. <body>
  9. <form name="f1" method="post" enctype="multipart/form-data" action="addEmployee">
  10. <h2>
  11. Add Image In DB
  12. </h2>
  13. <table>
  14. <tr>
  15. <td>
  16. <table>
  17. <tr>
  18. <td>Name:</td>
  19. <td><input type="text" name="txtName" value="" /></td>
  20. </tr>
  21. <tr>
  22. <td>Address:</td>
  23. <td><input type="text" name="txtAddress" value="" /></td>
  24. </tr>
  25. <tr>
  26. <td>Salary:</td>
  27. <td><input type="text" name="txtSalary" value="" /></td>
  28. </tr>
  29. <tr>
  30. <td>Photo:</td>
  31. <td><input type="file" name="flPhoto" value="" /></td>
  32. </tr>
  33. <tr>
  34. <td colspan="2" align="right"><input type="submit" value="Save" name="btnSave" /></td>
  35. </tr>
  36. </table>
  37. </td>
  38. <td>
  39. <table>
  40. <tr>
  41. <td style="width: 450px; height: auto;">
  42. <iframe name="ifs" src="DisplayData" style="width: 550px; height: 300px"></iframe>
  43. </td>
  44. </tr>
  45. </table>
  46. </td>
  47. </tr>
  48. </table>
  49. </form>
  50. </body>
  51. </html>

AddEmployee.java

  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.sql.*;
  12. import java.util.Iterator;
  13. import java.util.List;
  14. import javax.servlet.annotation.MultipartConfig;
  15. import org.apache.commons.fileupload.FileItem;
  16. import org.apache.commons.fileupload.FileItemFactory;
  17. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  18. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  19. /**
  20. * @author Vishal.Gilbile
  21. */
  22. @MultipartConfig(location = "/tmp", fileSizeThreshold = 1024 * 1024,
  23. maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5)
  24. public class addEmployee extends HttpServlet {
  25. String name, add;
  26. float salary;
  27. FileItem flItem = null;
  28. /**
  29. * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
  30. * methods.
  31. * @param request servlet request
  32. * @param response servlet response
  33. * @throws ServletException if a servlet-specific error occurs
  34. * @throws IOException if an I/O error occurs
  35. */
  36. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  37. throws ServletException, IOException {
  38. response.setContentType("text/html;charset=UTF-8");
  39. PrintWriter out = response.getWriter();
  40. Connection con = null;
  41. CallableStatement stat = null;
  42. try {
  43. long maxFileSize = (2 * 1024 * 1024);
  44. int maxMemSize = (2 * 1024 * 1024);
  45. // final String path = "/tmp";
  46. boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
  47. if (isMultiPart) {
  48. FileItemFactory factory = new DiskFileItemFactory();
  49. ServletFileUpload upload = new ServletFileUpload(factory);
  50. List items = upload.parseRequest(request);
  51. Iterator<FileItem> iter = items.iterator();
  52. while (iter.hasNext()) {
  53. FileItem fileItem = iter.next();
  54. if (fileItem.isFormField()) {
  55. processFormField(fileItem);
  56. } else {
  57. flItem = fileItem;
  58. }
  59. }
  60. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  61. con = DriverManager.getConnection("jdbc:odbc:myCon", "", "");
  62. stat = con.prepareCall("{call prc_AddEmployee(?,?,?,?)}");
  63. stat.setString(1, name);
  64. stat.setString(2, add);
  65. stat.setFloat(3, salary);
  66. stat.setBinaryStream(4, flItem.getInputStream(), (int) flItem.getSize());
  67. // stat.setBinaryStream(4, (InputStream) itemPhoto.getInputStream(), (int) itemPhoto.getSize());
  68. int rows = stat.executeUpdate();
  69. if (rows > 0) {
  70. response.sendRedirect("index.jsp");
  71. } else {
  72. out.println("<html>");
  73. out.println("<head>");
  74. out.println("<title>Error Adding Employee</title>");
  75. out.println("</head>");
  76. out.println("<body>");
  77. out.println("<h2>Error Adding Employee Data</h2>");
  78. out.println("</body>");
  79. out.println("</html>");
  80. }
  81. }
  82. } catch (Exception ex) {
  83. out.println(ex.getMessage());
  84. } finally {
  85. try {
  86. con.close();
  87. stat.close();
  88. out.close();
  89. } catch (Exception ex) {
  90. out.println(ex.getMessage());
  91. }
  92. }
  93. }
  94. // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  95. /**
  96. * Handles the HTTP <code>GET</code> method.
  97. *
  98. * @param request servlet request
  99. * @param response servlet response
  100. * @throws ServletException if a servlet-specific error occurs
  101. * @throws IOException if an I/O error occurs
  102. */
  103. @Override
  104. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  105. throws ServletException, IOException {
  106. processRequest(request, response);
  107. }
  108. private void processFormField(FileItem item) {
  109. //String na = item.getFieldName();
  110. if (item.getFieldName().equals("txtName")) {
  111. name = item.getString();
  112. } else if (item.getFieldName().equals("txtAddress")) {
  113. add = item.getString();
  114. } else if (item.getFieldName().equals("txtSalary")) {
  115. String sal = item.getString();
  116. salary = Float.parseFloat(sal);
  117. }
  118. }
  119. /**
  120. * Handles the HTTP <code>POST</code> method.
  121. *
  122. * @param request servlet request
  123. * @param response servlet response
  124. * @throws ServletException if a servlet-specific error occurs
  125. * @throws IOException if an I/O error occurs
  126. */
  127. @Override
  128. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  129. throws ServletException, IOException {
  130. processRequest(request, response);
  131. }
  132. /**
  133. * Returns a short description of the servlet.
  134. *
  135. * @return a String containing servlet description
  136. */
  137. @Override
  138. public String getServletInfo() {
  139. return "Short description";
  140. }// </editor-fold>
  141. }

  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. DisplayData.java
  6. import java.io.IOException;
  7. import java.io.PrintWriter;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import java.sql.*;
  13. /**
  14. * @author Vishal.Gilbile
  15. */
  16. public class DisplayData extends HttpServlet {
  17. Connection con;
  18. CallableStatement stat;
  19. /**
  20. * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
  21. * methods.
  22. * @param request servlet request
  23. * @param response servlet response
  24. * @throws ServletException if a servlet-specific error occurs
  25. * @throws IOException if an I/O error occurs
  26. */
  27. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  28. throws ServletException, IOException {
  29. response.setContentType("text/html;charset=UTF-8");
  30. PrintWriter out = response.getWriter();
  31. try {
  32. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  33. con = DriverManager.getConnection("jdbc:odbc:myCon", "", "");
  34. stat = con.prepareCall("{call prc_getEmployees}");
  35. ResultSet rs = stat.executeQuery();
  36. out.println("<html>");
  37. out.println("<head>");
  38. out.println("<title>Servlet DisplayData</title>");
  39. out.println("</head>");
  40. out.println("<body>");
  41. out.println("<table style='width:100%; height:auto;'>");
  42. out.println("<thead><td>ID</td><td>Name</td><td>Address</td><td>Salary</td><td align='center'>Photo</td></thead>");
  43. while (rs.next()) {
  44. int id = rs.getInt(1);
  45. out.println("<td>" + id + "</td>");
  46. out.println("<td>" + rs.getString(2) + "</td>");
  47. out.println("<td>" + rs.getString(3) + "</td>");
  48. out.println("<td>" + rs.getString(4) + "</td>");
  49. out.println("<td style='width:150px; height:125px;'><img src='" + "retriveImage?" + id + "' style='width:150px; height:125px;'/></td></tr>");
  50. }
  51. out.println("</table>");
  52. out.println("</body>");
  53. out.println("</html>");
  54. } catch (ClassNotFoundException ex) {
  55. out.println(ex.getMessage());
  56. } catch (SQLException ex) {
  57. out.println(ex.getMessage());
  58. } finally {
  59. try {
  60. con.close();
  61. out.close();
  62. } catch (SQLException ex) {
  63. out.println(ex.getMessage());
  64. }
  65. }
  66. }
  67. // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  68. /**
  69. * Handles the HTTP <code>GET</code> method.
  70. * @param request servlet request
  71. * @param response servlet response
  72. * @throws ServletException if a servlet-specific error occurs
  73. * @throws IOException if an I/O error occurs
  74. */
  75. @Override
  76. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  77. throws ServletException, IOException {
  78. processRequest(request, response);
  79. }
  80. /**
  81. * Handles the HTTP <code>POST</code> method.
  82. * @param request servlet request
  83. * @param response servlet response
  84. * @throws ServletException if a servlet-specific error occurs
  85. * @throws IOException if an I/O error occurs
  86. */
  87. @Override
  88. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  89. throws ServletException, IOException {
  90. processRequest(request, response);
  91. }
  92. /**
  93. * Returns a short description of the servlet.
  94. * @return a String containing servlet description
  95. */
  96. @Override
  97. public String getServletInfo() {
  98. return "Short description";
  99. }// </editor-fold>
  100. }

RetrieveImage.java

  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. import java.io.IOException;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.sql.*;
  11. import javax.servlet.ServletOutputStream;
  12. /**
  13. * @author Vishal.Gilbile
  14. */
  15. public class retriveImage extends HttpServlet {
  16. Connection con;
  17. CallableStatement stat;
  18. /**
  19. * Processes requests for both HTTP
  20. * <code>GET</code> and
  21. * <code>POST</code> methods.
  22. * @param request servlet request
  23. * @param response servlet response
  24. * @throws ServletException if a servlet-specific error occurs
  25. * @throws IOException if an I/O error occurs
  26. */
  27. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  28. throws ServletException, IOException {
  29. //response.setContentType("text/html;charset=UTF-8");
  30. response.setContentType("image/jpeg");
  31. //PrintWriter out = response.getWriter();
  32. Blob ePhoto = null;
  33. byte[] rawBytes = null;
  34. ServletOutputStream out = response.getOutputStream();
  35. try {
  36. /*
  37. * TODO output your page here. You may use following sample code.
  38. */
  39. //byte[] rawBytes = null;
  40. String id = request.getQueryString();
  41. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  42. con = DriverManager.getConnection("jdbc:odbc:myCon", "", "");
  43. stat = con.prepareCall("{call prc_getEPhoto(?)}");
  44. stat.setInt(1, Integer.parseInt(id));
  45. ResultSet rs = stat.executeQuery();
  46. rs.next();
  47. // out.println("<html>");
  48. // out.println("<head>");
  49. // out.println("<title>Servlet retriveImage</title>");
  50. // out.println("</head>");
  51. // out.println("<body>");
  52. rawBytes = rs.getBytes(1);
  53. out.write(rawBytes);
  54. // out.println("</body>");
  55. // out.println("</html>");
  56. out.flush();
  57. stat.close();
  58. } catch (Exception ex) {
  59. out.println(ex.getMessage());
  60. } finally {
  61. try {
  62. con.close();
  63. out.close();
  64. } catch (Exception ex) {
  65. }
  66. }
  67. }
  68. // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  69. /**
  70. * Handles the HTTP
  71. * <code>GET</code> method.
  72. *
  73. * @param request servlet request
  74. * @param response servlet response
  75. * @throws ServletException if a servlet-specific error occurs
  76. * @throws IOException if an I/O error occurs
  77. */
  78. @Override
  79. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  80. throws ServletException, IOException {
  81. processRequest(request, response);
  82. }
  83. /**
  84. * Handles the HTTP
  85. * <code>POST</code> method.
  86. *
  87. * @param request servlet request
  88. * @param response servlet response
  89. * @throws ServletException if a servlet-specific error occurs
  90. * @throws IOException if an I/O error occurs
  91. */
  92. @Override
  93. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  94. throws ServletException, IOException {
  95. processRequest(request, response);
  96. }
  97. /**
  98. * Returns a short description of the servlet.
  99. *
  100. * @return a String containing servlet description
  101. */
  102. @Override
  103. public String getServletInfo() {
  104. return "Short description";
  105. }// </editor-fold>
  106. }
The following is the output for it.
Insert Image
Save Image