前提:TOMCAT8.5 MySQL8.0 JavaEE8 mysql-connector-java-8.0.11.jar
画像アップロード⇒サーバに保存⇒HTMLに出力
一連の処理をEclipseで作成するにあたり、時間の経過とともに記憶から失われる気がするため(プログラマではないので)重要事項をメモ。
・mysql-connector-java-8.0.11.jarはVer5までと異なり、getConnection時に各種パラメータの指定が必要。
("jdbc:mysql://localhost:3306/データベース名?allowPublicKeyRetrieval=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false","ユーザ名", "パスワード");
・アップロードメソッドを記載するサーブレット
@MultipartConfig(location="ワークフォルダからimageフォルダまでの絶対パス")
partでファイル関連を扱うことになるが、getRealPathを使わず、
part.write(id+"_"+(user.getPicid()+1)+"_"+fileName);
このようにファイル名を付ける。
ファイル名生成のコツ⇒時刻で管理しても同時に複数クライアントから同名ファイルがアップロードされると、先に入ったファイルが次のファイルに上書きされる恐れがある。これを避けるため、DB接続で一意の番号も割り振るべき。たとえばCOALESCE句を利用する。
insert intoで要素を全て指定した後、SELECTから繋ぐ。
select ?,?,COALESCE(MAX(comid)+1),now() - INTERVAL 9 HOUR,?,? from commnet");
この例では、comidというカラムがNullの場合に1、それ以外の場合は現comidの最大値+1で入力される。削除などで番号が中抜けになっても、最大値から+1される。(1,2,4)の要素があっても3ではなく5が入る。
ファイルの出力(HTML)は相対パスで可能。
"http://IPアドレス:8080/プロジェクト名/image/";
※Eclipse側でも、アップロードされたファイルがワークスペースに同期する設定を、ウィンドウ⇒設定⇒一般から行う必要がある。(チェックを入れるだけ。)
・ネイティブフックまたはポーリングを利用してリフレッシュ
・アクセス時にリフレッシュ
※コメント投稿者のブログIDはブログ作成者のみに通知されます