###JavaとMySQLについてです
勉強のために、webアプリケーションで簡単なネット掲示板を作成しています。
コメントなどメッセージのやり取りをする機能は実装できていて、
メッセージとともに画像や添付ファイルも投稿できるような機能を作りたいのですがなかなかうまくできません。
流れとしてはJSP→servlet→DB→servlet→JSPというように、
JSPで画像を入力→servletで受取りDBに登録→別のservletでテーブルのレコードを全て取得→JSPで全て表示、という形になっています。
画像をバイナリデータで保存することは出来ているのですが、それを画像ファイルに復元する方法がよくわかりません。
方法を教えてください。
出来ればですが、サンプルコードなども提示していただけると幸いです。
宜しくお願い致します。
###入力JSP
Java
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>ImageUploader</title> 7 </head> 8 <body> 9 <Div Align="center"> 10 <h1>画像のアップロード</h1> 11 <form method="POST" action="FileUploadDbServlet" enctype="multipart/form-data"> 12 <table> 13 <tr> 14 <td>ファイル名: </td> 15 <td><input type="text" name="name" size="30" /></td> 16 </tr> 17 <tr> 18 <td>画像 : </td> 19 <td><input type="file" name="image" size="30" /></td> 20 </tr> 21 <tr> 22 <td colspan="2"> 23 <input type="submit" value="送信"> 24 </td> 25 </tr> 26 </table> 27 <br><br> 28 </form> 29 <input type="button" value="show" onclick="location.href='ShowImage'" style="WIDTH:100px; HEIGHT:50px"> 30 </Div> 31 </body> 32</html>
###登録servlet
java
1package servlet; 2 3import java.io.IOException; 4import java.io.InputStream; 5import java.sql.Connection; 6import java.sql.DriverManager; 7import java.sql.Statement; 8 9import javax.servlet.ServletContext; 10import javax.servlet.ServletException; 11import javax.servlet.annotation.MultipartConfig; 12import javax.servlet.annotation.WebServlet; 13import javax.servlet.http.HttpServlet; 14import javax.servlet.http.HttpServletRequest; 15import javax.servlet.http.HttpServletResponse; 16import javax.servlet.http.Part; 17 18/** 19 * Servlet implementation class FileUploadDbServlet 20 */ 21@WebServlet("/FileUploadDbServlet") 22@MultipartConfig(maxFileSize = 2147483647) 23public class FileUploadDbServlet extends HttpServlet { 24 private static final long serialVersionUID = 1L; 25 26 /** 27 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 28 */ 29 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 30 request.setCharacterEncoding("UTF-8"); 31 ServletContext sc = getServletContext(); 32 Connection con = null; 33 34 //ファイル名の取得 35 String name = request.getParameter("name"); 36 //画像ストリームの取得 37 InputStream is= null; 38 Part filePart = request.getPart("image"); 39 if (filePart != null) { 40 is = filePart.getInputStream(); 41 } 42 try { 43 44 // DBコネクションの取得 45 Class.forName("com.mysql.jdbc.Driver"); 46 con = DriverManager.getConnection( 47 "jdbc:mysql://host/DB","user","pass"); 48 Statement st=null; 49 st = con.createStatement(); 50 51 String rs ="INSERT INTO image(name,img) VALUES('"+ name +"','"+ is +"')"; 52 st.executeUpdate(rs); 53 54 55 // DBコネクションのクローズ 56 if(con!=null) con.close(); 57 58 // 登録後画面に飛ぶ 59 sc.getRequestDispatcher("/ShowImage").forward(request, response); 60 61 } catch (Exception e) { 62 e.printStackTrace(); 63 } finally{ 64 } 65 } 66 67} 68
###表示用servlet
java
1package servlet; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.util.ArrayList; 7 8import javax.servlet.ServletContext; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15 16/** 17 * Servlet implementation class ShowImage 18 */ 19@WebServlet("/ShowImage") 20public class ShowImage extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 23 /** 24 * @see HttpServlet#HttpServlet() 25 */ 26 public ShowImage() { 27 super(); 28 // TODO Auto-generated constructor stub 29 } 30 31 /** 32 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 33 */ 34 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 request.setCharacterEncoding("UTF-8"); 36 ServletContext sc = getServletContext(); 37 Connection con = null; 38 ArrayList aList = new ArrayList(); 39 HttpSession session = request.getSession(); 40 41 try { 42 43 // DBコネクションの取得 44 Class.forName("com.mysql.jdbc.Driver"); 45 con = DriverManager.getConnection( 46 "jdbc:mysql://host/db","user","pass"); 47 48 // ユーザーコードの取得 49 String sqlStatement = "SELECT * FROM image"; 50 // JavaBeanの実行 51 model.Bean myBean = new model.Bean(); 52 myBean.setCon(con); 53 myBean.setSqlStatement(sqlStatement); 54 myBean.image(); 55 // 結果の取得 56 aList = myBean.getResult(); 57 // 結果のセット 58 session.setAttribute("image", aList); 59 60 // DBコネクションのクローズ 61 if(con!=null) con.close(); 62 63 // 登録後画面に飛ぶ 64 sc.getRequestDispatcher("/WEB-INF/JSP/ShowImage.jsp").forward(request, response); 65 66 } catch (Exception e) { 67 e.printStackTrace(); 68 } finally{ 69 } 70 } 71
###表示用JSP
java
1<%@page contentType="text/html" pageEncoding="UTF-8"%> 2<%@ page import="java.util.*" %> 3<% 4 ArrayList image = new ArrayList(); 5 image = (ArrayList)session.getAttribute("image"); 6%> 7<!DOCTYPE html> 8<html> 9 <head> 10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11 <title>Show Image</title> 12 </head> 13 <body> 14 <Div Align="center"> 15 <h1>格納されているもの</h1> 16 <br><br> 17 <table border=1> 18 <% for(int i=0;i<image.size();i++){ %> 19 <% if(i==0 || i%3==0){ %> 20 <tr> 21 <% } %> 22 <td> 23 <%= image.get(i) %> 24 </td> 25 <% } %> 26 </table> 27 </Div> 28 </body> 29</html>
###試したこと
DBにバイナリデータを保存するまでと、そのままのデータをJSP上に表示することまでは出来ていると思います(正しいのかは別)
このデータを画像として表示する方法が分かりません。
###補足情報(言語/FW/ツール等のバージョンなど)
eclipse
MySQL
Tomcat
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/18 02:39
2017/07/18 03:01
2017/07/18 04:06
2017/07/18 04:55
2017/07/18 05:32
2017/07/18 05:45
2017/07/18 07:52
2017/07/18 08:22
2017/07/18 08:39
2017/07/18 08:46
2017/07/19 00:44
2017/07/19 01:24
2017/07/19 04:23
2017/07/19 05:14
2017/07/27 00:54
2017/07/27 01:07