質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

0回答

1547閲覧

java_servlet 画像更新が反映されない

amasann

総合スコア4

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2020/08/21 03:29

前提・実現したいこと

結論:社員データ修正で、新規登録時の画像と異なる画像を選択すると、選択し直した画像が反映されず、最初に登録した画像が表示されてしまいます。修正時に選択した画像が反映されるようにしたいです。

ここに質問の内容を詳しく書いてください。
java servletで社員情報管理ツールを作っています。
駆け出しエンジニア(開発を初めて3か月目)になります。
そして、初のteratailへの質問になります。
何卒、よろしくお願いいたします。

トップページ

社員一覧メニュー

社員情報編集画面

発生している問題・エラーメッセージ

エラーメッセージ 上記三枚目の写真で、新規登録時の画像と異なる画像を選択し、 設定を押下してもエラーメッセージはでてこず、 再度、同ページを開いた際に、変更した画像が反映されない状況です。

java

1//社員情報更新logic 2package action; 3 4import java.io.FileNotFoundException; 5import java.io.IOException; 6import java.io.InputStream; 7import java.util.ArrayList; 8import java.util.List; 9 10import javax.servlet.ServletException; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13import javax.servlet.http.Part; 14 15import dao.EmployeeDAO; 16import dao.ImageDAO; 17 18public class EmpUpdateLogic implements CommonLogic { 19 @SuppressWarnings({ "null", "unlikely-arg-type" }) 20 @Override 21 public String execute(HttpServletRequest request, HttpServletResponse response) { 22 boolean empIDisNull = request.getParameter("empID").equals(""); 23 boolean empNameisNull = request.getParameter("empName").equals(""); 24 if(empIDisNull || empNameisNull) { 25 request.setAttribute("errorMessage", "IDと名前は必須です。"); 26 return "error.jsp"; 27 } 28 String empIDstr = request.getParameter("empID"); 29 if (!empIDstr.matches("[0-9]{1,5}")) { 30 request.setAttribute("errorMessage", "社員IDは1~5桁の数字で入力してください。"); 31 return "error.jsp"; 32 } 33 String age = request.getParameter("age"); 34 if (!(age.matches("[0-9]{1,3}") || age.equals(""))) { 35 request.setAttribute("errorMessage", "年齢は1~2桁の数字で入力してください。(空欄も可)"); 36 return "error.jsp"; 37 } 38 String zipcode = request.getParameter("zipcode"); 39 if (!(zipcode.matches("^[0-9]{3}-[0-9]{4}$") || zipcode.equals(""))) { 40 request.setAttribute("errorMessage", "郵便番号はハイフンありの7桁の郵便番号で入力してください。<br>例:123-4567<br>(空欄も可)"); 41 return "error.jsp"; 42 } 43 String dateEntering = request.getParameter("dateEntering"); 44 if (!(dateEntering.matches("^[0-9]{4}-[0-9]{2}-[0-9]{2}$") || dateEntering.equals(""))) { 45 request.setAttribute("errorMessage", "入社日はハイフンで区切った年月日で入力してください。<br>例:2001-01-01<br>(空欄も可)"); 46 return "error.jsp"; 47 } 48 String dateRetired = request.getParameter("dateRetired"); 49 if (!(dateRetired.matches("^[0-9]{4}-[0-9]{2}-[0-9]{2}$") || dateRetired.equals(""))) { 50 request.setAttribute("errorMessage", "退社日はハイフンで区切った年月日で入力してください。<br>例:2001-01-01<br>(空欄も可)"); 51 return "error.jsp"; 52 } 53 int pictID = Integer.parseInt(empIDstr); 54 List<String> empParams = new ArrayList<String>(); 55 empParams.add(request.getParameter("empName")); 56 empParams.add(age); 57 empParams.add(request.getParameter("gender")); 58 empParams.add(String.valueOf(pictID)); 59 empParams.add(zipcode); 60 empParams.add(request.getParameter("prefecture")); 61 empParams.add(request.getParameter("address")); 62 empParams.add(request.getParameter("deptID")); 63 empParams.add(dateEntering); 64 empParams.add(dateRetired); 65 empParams.add(empIDstr); 66 EmployeeDAO empDao = new EmployeeDAO(); 67 if (empDao.updateEmp(empParams) == false) { 68 request.setAttribute("errorMessage", "データベースへの登録に失敗しました。(EMP)"); 69 return "error.jsp"; 70 } 71 Part pict = null; 72 try { 73 pict = request.getPart("picture"); 74 } catch (IOException e1) { 75 e1.printStackTrace(); 76 } catch (ServletException e1) { 77 e1.printStackTrace(); 78 } 79 String pictureSTR = request.getParameter("pictureSTR"); 80 InputStream is = null; 81 if(pict != null || !pict.equals("")) { 82 try { 83 is = pict.getInputStream(); 84 } catch (FileNotFoundException e) { 85 e.printStackTrace(); 86 } catch (IOException e) { 87 e.printStackTrace(); 88 } catch (Exception e) { 89 e.printStackTrace(); 90 } 91 ImageDAO imageDAO = new ImageDAO(); 92 if(pictureSTR == null) { 93 if (imageDAO.addImage(pictID, is) == false) { 94 request.setAttribute("errorMessage", "データベースへの登録に失敗しました。(画像データadd)"); 95 return "error.jsp"; 96 } 97 } else if(!pictureSTR.equals("")) { 98 } else { 99 if (imageDAO.updateImage(pictID, is) == false) { 100 request.setAttribute("errorMessage", "データベースへの登録に失敗しました。(画像データupdate)"); 101 return "error.jsp"; 102 } 103 } 104 } 105 request.setAttribute("message", "データベースへの登録に成功しました。"); 106 return "success.jsp"; 107 } 108}

java

1//画像DAO 2package dao; 3 4import java.io.InputStream; 5import java.sql.Blob; 6import java.sql.Connection; 7import java.sql.DriverManager; 8import java.sql.PreparedStatement; 9import java.sql.ResultSet; 10import java.sql.SQLException; 11import java.util.ArrayList; 12import java.util.Base64; 13import java.util.List; 14 15import bean.Constants; 16import bean.Picture; 17 18public class ImageDAO { 19 public List<Picture> findAllImage() { 20 List<Picture> pictureAllList = new ArrayList<Picture>(); 21 try { 22 Class.forName(Constants.DRIVER_NAME); 23 } catch (ClassNotFoundException e) { 24 e.printStackTrace(); 25 } 26 try ( 27 Connection conn = DriverManager.getConnection(Constants.JDBC_URL, Constants.DB_USER, Constants.DB_PASS); 28 PreparedStatement pstmt = conn.prepareStatement("SELECT pict_id,pict_image FROM PICTURE ORDER BY pict_id"); 29 ResultSet rs = pstmt.executeQuery(); 30 ) { 31 while (rs.next()) { 32 int pict_id = rs.getInt("pict_id"); 33 Blob blob = rs.getBlob("pict_image"); 34 byte[] b = blob.getBytes(1, (int)blob.length()); 35 String imageSTR = Base64.getEncoder().encodeToString(b); 36 Picture sw = new Picture(pict_id, imageSTR); 37 pictureAllList.add(sw); 38 } 39 } catch (SQLException e) { 40 e.printStackTrace(); 41 return null; 42 } 43 return pictureAllList; 44 } 45 46 public boolean updateImage(int pictID, InputStream is) { 47 try { 48 Class.forName(Constants.DRIVER_NAME); 49 } catch (ClassNotFoundException e) { 50 e.printStackTrace(); 51 } 52 try ( 53 Connection conn = DriverManager.getConnection(Constants.JDBC_URL, Constants.DB_USER, Constants.DB_PASS); 54 PreparedStatement pstmt = conn.prepareStatement("UPDATE PICTURE SET pict_image = ? WHERE pict_id = ?"); 55 ) { 56 pstmt.setBlob(1, is); 57 pstmt.setInt(2, pictID); 58 int result = pstmt.executeUpdate(); 59 if (result != 1) { 60 return false; 61 } 62 } catch (SQLException e) { 63 e.printStackTrace(); 64 return false; 65 } 66 return true; 67 } 68 69 public boolean addImage(int pictID, InputStream is) { 70 try { 71 Class.forName(Constants.DRIVER_NAME); 72 } catch (ClassNotFoundException e) { 73 e.printStackTrace(); 74 } 75 76 try ( 77 Connection conn = DriverManager.getConnection(Constants.JDBC_URL, Constants.DB_USER, Constants.DB_PASS); 78 PreparedStatement pstmt = conn 79 .prepareStatement("INSERT INTO PICTURE (pict_id,pict_image) VALUES (?,?)");) { 80 pstmt.setInt(1, pictID); 81 pstmt.setBlob(2, is); 82 int result = pstmt.executeUpdate(); 83 if (result != 1) { 84 return false; 85 } 86 } catch (SQLException e) { 87 e.printStackTrace(); 88 return false; 89 } 90 return true; 91 } 92 93 public boolean deleteImage(int pictID) { 94 try { 95 Class.forName(Constants.DRIVER_NAME); 96 } catch (ClassNotFoundException e) { 97 e.printStackTrace(); 98 } 99 try ( 100 Connection conn = DriverManager.getConnection(Constants.JDBC_URL, Constants.DB_USER, Constants.DB_PASS); 101 PreparedStatement pstmt = conn.prepareStatement("DELETE FROM PICTURE WHERE pict_id = ?");) { 102 pstmt.setInt(1, pictID); 103 int result = pstmt.executeUpdate(); 104 if (result != 1) { 105 return false; 106 } 107 } catch (SQLException e) { 108 e.printStackTrace(); 109 return false; 110 } 111 return true; 112 } 113}

補足情報(FW/ツールのバージョンなど)

tomcat8(java8)
windows 10
IDE:eclips4.7.3
DB:H2

何卒よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/08/21 03:49

更新表示だけの問題ですか? 修正を指定した画像は、DBには正しく登録されているのでしょうか。 そこを確認することで、表示だけの問題か、そもそもDBに更新内容が保存されていないのか、あるいは別の問題なのか範囲を絞りやすくなります。
A-pZ

2020/08/21 04:11

画像をアップロードしているform部分の実装(JSP)も記載すると回答が得られるかもしれません。 なお、画像アップロードする際にはサーブレットにアップロード用の定義が必要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問