サーブレット
サーブレット等の備忘録。
- 1. サーブレット
- 2. Apache Tomcat
- 3. java –version
- 4. JAVA_HOME
- 5. TomcatのID設定等&webアプリを登録の手順
- 6. Java SE
- 7. Java EE
- 8. リクエスト
- 9. レスポンス
- 10. GETリクエスト
- 11. POSTリクエスト
- 12. プロトコル
- 13. ステータスコード
- 14. Content-Typeヘッダ
- 15. Webアプリケーション
- 16. サーバサイドプログラム
- 17. サーブレットクラス
- 18. JSP
- 19. アプリケーションサーバ
- 20. サーブレットコンテナ
- 21. eclipseのクローンの初期設定
- 22. eclipseのワークスペースの切替
- 23. eclipseの設定確認
- 24. IDE
- 25. Pleiades(プレアデス)
- 26. ポート番号
- 27. hoge
- 28. HttpServletクラス
- 29. doGet()メソッド
- 30. HttpServletRequest
- 31. HttpServletResponse
- 32. サーブレットクラスでHTMLを出力
- 33. URLパターン
- 34. @WebServletアノテーション
- 35. Eclipseの新規メニューのカスタマイズ
- 36. 日付表示(javaの復習)
- 37. JSP(JavaServer Pages)
- 38. JSPファイル
- 39. JSPコメント
- 40. JSPファイルの構造
- 41. テンプレート
- 42. JSPファイルのURL
- 43. さいころクラス作ってJSPファイルで丁か半か
- 44. クリーン(Eclipse)
- 45. Servletのマッピングをみる(Eclipse)
- 46. get送信からpost送信に変更した時のエラー対応(Eclipse)
- 47. 暗黙オブジェクト
- 48. 問い合わせフォーム
- 49. MVCモデル
- 50. フォワード
- 51. リダイレクト
- 52. GitHubのFork等
- 53. フォワードとリダイレクトの差
- 54. フォワードとリダイレクトの使い分け
- 55. スコープ
- 56. JavaBeans
- 57. 直列化
- 58. JavaBeansのプロパティ
- 59. リクエストスコープ
- 60. リクエストスコープに保存する
- 61. リクエストスコープから取得する
- 62. セッションスコープ
- 63. HttpSessionインスタンス
- 64. セッションID
- 65. Cookie
- 66. セッションタイムアウト
- 67. ステートフルな通信
- 68. ステートレスな通信
- 69. アプリケーションスコープ
- 70. ServletContextインスタンス
- 71. application(暗黙オブジェクト)
- 72. スレッド
- 73. eclipseのエクスポート等
- 74. サーブレットクラス
- 75. init()メソッド
- 76. destroy()メソッド
- 77. サーブレットクラスのフィールド
- 78. スレッドの調停(同期)
- 79. リスナー
- 80. フィルタ
- 81. 動的インクルード
- 82. アクションタグ
- 83. 標準アクションタグ
- 84. 静的インクルード
- 85. includeデレクティブ
- 86. EL式
- 87. ページスコープ
- 88. EL式の暗黙オブジェクト
- 89. empty演算子
- 90. EL式でスコープ内のコレクションを取得
- 91. JSTL
- 92. taglibディレクティブ
- 93. EL式のif文
- 94. EL式の拡張forEach文
- 95. リレーショナルデータベース
- 96. レコード
- 97. DBMS
- 98. SQL
- 99. H2 Database
- 100. ホームディレクトリ
- 101. データベースを作成して接続する手順
- 102. JDBC
- 103. Tomcatで使う場合
- 104. DAO
- 105. DAOクラス
- 106. DAOパターン
- 107. デザインパターン
サーブレット
webサーバー上で動くJavaプログラム。
Apache Tomcat
webサーバーソフトウエア。
・Javaが動く。
・無料。
java –version
cmdのコマンド。
・Javaのバージョン確認。
・システム環境変数を設定しているから出来る。
JAVA_HOME
以前作った、システム環境変数。
・Javaの11の中の場所を変数に設定。
・値として場所が設定されている。
TomcatのID設定等&webアプリを登録の手順
①CATALINA_HOME
新規で環境変数に設定。
・変数値は(例)C:\pleiades\2022-09\tomcat\9
・カタリナはトムキャットの事らしい。
②Pathの設定
編集から新規で「%CATALINA_HOME%\bin」。
・cmd起動してstartupでTomcatが起動する。
(もしくはC:\pleiades\2022-09\tomcat\9\binのstartup.batをダブルクリック)
③ブラウザで「localhost:8080/」起動。
④Manager Appをクリックして、キャンセル(まだID等の設定をしていないので)。
⑤下記をコピー。
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
⑥C:\pleiades\2022-09\tomcat\9\confのtomcat-users.xmlをテラパッドで開く。
⑦一番下から2行目らへんに貼り付ける。
-->
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
</tomcat-users>
・パスワードもtomcatに変更しておく(ややこいので)。
⑧サイドログイン。
⑨WARファイルの配備のファイルを選択ボタンをクリック。
・登録したいアプリを指定。
⑩配備をクリック。
・配備解除がアプリの削除。
C:\pleiades\2022-09\tomcat\9\webappsがアパッチにおけるhtdocsみたいなもん。
似たような名前のもう1個のフォルダが今後出来る。
Java SE
Java Standard Edition。
・今まで使っていたのがこれの11。
Java EE
この中に入ってる機能がサーブレット。
・8
リクエスト
Webサーバへの要求。
レスポンス
Webサーバからブラウザへの応答。
GETリクエスト
URLの末尾にパラメータをつけて送る方式のリクエスト。
・?マーク以降がクエリ文字列。
・パラメーターが丸見え。
・商品とか動画とかの時に使う。
POSTリクエスト
パラメータをURLにつけないで送る方式のリクエスト。
・ログインIDとか個人情報はこっち。
プロトコル
ルール。
ステータスコード
リクエストの動作結果。
200 OK ・・・リクエスト成功
404 Not Found 対象がみつからない
Content-Typeヘッダ
ボディ部が何のデータか示す。
・レスポンスのヘッダ内の下に書いてある。
Webアプリケーション
Webサーバで公開してブラウザ上で実行出来るアプリ。
サーバサイドプログラム
ブラウザのリクエストによってサーバ上で動き、結果をHTMLで返すプログラム。
・Webアプリケーションの中核。
サーブレットクラス
ブラウザから実行出来る特殊なクラス。
・これを使ってサーバサイドプログラムを実現する技術がサーブレット。
JSP
JSPファイルを使ってサーバサイドプログラムを実現する技術(Javaで)。
・これを実行するとサーブレットクラスに変換される。
アプリケーションサーバ
Webアプリケーションを動作させる為のサーバ。
サーブレットコンテナ
サーブレットクラスの実行環境。
eclipseのクローンの初期設定
①ファイル→新規。
②ギットハブで作ったリポジトリのURLをコピぺ。
③参照先は以前作ったCドライブのworkspacesの中に新たにフォルダを作成
C:\workspaces\新しいフォルダ
④以前作った.gitignoreを③のフォルダに貼り付け。
eclipseのワークスペースの切替
①設定をエクスポート(ファイルから)。
②ファイルのワークスペースの切替からフォルダを指定。
③設定をインポート。
eclipseの設定確認
・ウィンドウ→設定→Java→インストール済みのJREが11か?
・同様にJava内のコンパイラーの準拠レベルを17から11へ
・サーバーのランタイム環境が(678…と入ってる?)
IDE
統合開発環境。
・開発ツールの統合ソフトウェア。
Pleiades(プレアデス)
開発環境ソフトウェア。
・Eclipse + プラグイン + Tomcatがセットになったもの。
ポート番号
リクエスト先のコンピュータのどのソフトウェアにリクエストするか表す数値。
hoge
メタ構文変数。特に意味はないもの。
HttpServletクラス
サーブレットクラスのもとのクラス(これを継承)。
doGet()メソッド
サーブレットクラスがリクエストされると実行されるメソッド。
・オーバーライド(上書き)して使う。
・HTMLに出力する処理等を記述。
HttpServletRequest
ブラウザから届いたリクエストに関する情報と機能を持つインスタンス。
HttpServletResponse
サーバーから送り出すレスポンスに関する情報と機能を持つインスタンス。
サーブレットクラスでHTMLを出力
// Content-Typeヘッダの設定
response.setContentType("text/html; charset=UTF-8");
// HTMLの出力処理部分
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>あああ</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>いいい</p>");
out.println("</body>");
out.println("</html>");
・Content-Typeヘッダの設定の後に記述する。
URLパターン
サーブレットクラスを実行する時に指定するもの。
http://<サーバ名>/<アプリケーション名>/<URLパターン>
@WebServletアノテーション
URLパターンを設定する機能。
Eclipseの新規メニューのカスタマイズ
①ウィンドウ→パースペクティブのカスタマイズ
②アクション・セット可用性→Webブラウザーにチェック
③ショートカット→JSPとサーブレットにチェック
④適用して保存
⑤ウィンドウ右上のjavaを右クリックして別名保存
⑥自分用の設定名をつける
日付表示(javaの復習)
// 今日の日付を取得
Date date = new Date();
// 日付表示のフォーマットを準備
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
// 取得した日付をフォーマットにセットしてtodayに代入
String today = sdf.format(date);
// 今日の日付を取得
LocalDate now = LocalDate.now();
// 日付表示のパターンを準備
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
// 今日の日付をパターンにセットしてtodayに代入
String today = dtf.format(now);
JSP(JavaServer Pages)
サーブレット同様で、サーバサイドプログラムの技術。
JSPファイル
JSPのファイル。
・リクエストされるとサーブレットクラスに変換される。
・いちいちサーバーを再起動しなくてもいい。
・HTML出力が簡単に書ける。
・WebContentの下に保存する。
JSPコメント
<%-- コメント --%>
JSPファイルの構造
// 例
<%-- pageディレクティブ --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- スクリプトレット --%>
<%
String name = hoge;
int age = 99;
%>
<%-- JSPコメント --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>hoge</title>
</head>
<body>
私の名前は<%=name%>。年齢は<%=age%>才です。
</body>
</html>
テンプレート
JSPファイル内のHTMLの事。
JSPファイルのURL
ttp://<サーバ名>/<アプリ名>/
さいころクラス作ってJSPファイルで丁か半か
// srcの中にtパッケージ作って、その中にSaicoro.javaを作る(下記)
package t;
import java.util.Random;
public class Saicoro {
private int eye;
public Saicoro() {
this.eye = new Random().nextInt(6) + 1;
}
public int getEye() {
return eye;
}
}
// WebContentの下にsaicoro.jspを作る(下記)
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="t.*" %>
<%
Saicoro sai = new Saicoro();
int me = sai.getEye();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>丁か半か</title>
</head>
<body>
<div>
<% if(me % 2 == 0){ %>
丁です。
<% } else {%>
半です。
<% } %>
</div>
</body>
</html>
クリーン(Eclipse)
コンパイルしなおす。プログラムは間違ってないけど、Eclipseの調子が悪い時とかに行う。
①Tomcatを右クリックして追加及び除去で一旦サーバー上から削除。
②クリーン(2カ所)
・プロジェクト→クリーンでコンパイルし直す
・サーバー右クリックでクリーン。
Servletのマッピングをみる(Eclipse)
初期設定
①プロジェクトエクスプローラーの3点リーダー
②フィルター及びカスタマイズ
③コンテンツ
④下記以外をチェック
・ネストされたプロジェクト
・Java要素
・Zipアーカイブ
プロジェクトエクスプローラーの見たいプロジェクトのデプロイメント記述子の中に有り。
get送信からpost送信に変更した時のエラー対応(Eclipse)
postに変えたにも関わらず、get送信ではありませんとでたら…。
リファクタリングでhtmlの名称を変更してみる。
・変更後、元の名前に戻すとまた同様のエラーが起きたので名称は戻さない方がベターっぽい。
暗黙オブジェクト
スクリプトレット(<% %>)の中にある宣言せずに利用できるオブジェクト。
問い合わせフォーム
<!-- html側 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>問合せフォーム</title>
</head>
<body>
<h1>お問い合わせ</h1>
<form action="/プロジェクト名/送信先名abc" method="post">
名前:<br><input type="text" name="name"><br><br>
問合せの種類<br>
<select name="qtype">
<option value="company">クレーム</option>
<option value="product">質問</option>
</select><br><br>
内容<br>
<textarea name="body"></textarea><br><br>
<input type="submit" value="送信">
</form>
</body>
</html>
// サーブレット側
package パッケージ名;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/abc") // html内に記述した送信先名(プロジェクト名不要)
public class クラス名 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost( // ポスト送信の為
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String qtype = request.getParameter("qtype");
String body = request.getParameter("body");
// コンソールに表示
System.out.println("名前:" + name);
System.out.println("問合せの種類:" + qtype);
System.out.println("内容:" + body);
}
}
MVCモデル
GUIアプリの模範的構造(コントローラ、モデル、ビュー)。
動きは下記の感じ。
①ユーザーがURLを入力
②(コントローラが)①を受取って処理クラス(モデル)へ投げる
③モデルが処理した物をコントローラがHTMLに出力する側(ビュー)へ渡す
④ビューが処理してユーザーへ返す
・言語を超えた考え型。
・PHPはコントローラとビューを兼ねている。
・JavaはコントローラがサーブレットでビューがJSP。
・コントローラがビューへ渡す物はStrinngu等のクラス(基本データ型ではない)。
フォワード
サーブレットクラスからJSPファイルへ投げる方法。
// 構文
RequestDispatcher dispatcher = request.getRequestDispatcher("フォワード先");
dispatcher.forward(request, response);
// 楽な書き方
String url = "フォワード先";
request.getRequestDispatcher(url).forward(request, response);
リダイレクト
ブラウザのリクエスト先を変更して処理の転送を行う
// 構文
response.sendRedirect(リダイレクト先のURL);
GitHubのFork等
1.ダウンロードしたい人のページに行く
2.右上のForkをクリック
3.自分のページにリポジトリが出来るのでCodeからURLをコピー
4.Sourcetreeを起動してファイル→クローン作製
5.3のURLを貼り付けてクローンを作りたい所を指定
6.eclipse側では同名のプロジェクトを作成
フォワードとリダイレクトの差
フォワードは、同じアプリケーション内のクラスやJSPファイルに処理を移す。
リクエスト/レスポンスは1往復。
リダイレクトは、別のサーブレットクラスやJSPファイルにリクエストさせて再実行。
リクエスト/レスポンスは2往復。
フォワードとリダイレクトの使い分け
サーブレットの処理結果をJSPで画面表示する時は、フォワード。
別のサーブレット(or URL)にアクセスし直して欲しい時は、リダイレクト。
スコープ
インスタンスを保存できる領域。
・保存出来るのはインスタンスのみ。
・基本データ型は保存不可。
・基本データ型をラッパークラスに格納すれば可能。
・ラッパークラスはIntegerやDoubleなどのクラス。
JavaBeans
複数の情報(ageやname等)ひとまとめで保存する為のルール。
・直列化可能
・クラスはpublicでパッケージに所属
・publicで引数のないコンストラクタを持つ
・フィールドはカプセル化
・命名規則に従ったgetter/setterを持つ
直列化
インスタンスのフィールド内容をバイト列に変換し保存(復元)する技術。
JavaBeansのプロパティ
フィールドにgetter(setter)を作る事で生まれるもの。
・プロパティを読む=getterを実行
・プロパティを変更=setterを実行
リクエストスコープ
リクエスト毎に生成されるスコープ。
・レスポンスされる迄利用可
・HttpServletRequestインスタンスのメソッドを使う
リクエストスコープに保存する
request.setAttribute("属性名",インスタンス)
// 第1引数はString型の属性名(同名有れば上書き)
// 第2引数はObject型としてざっくり捉える
リクエストスコープから取得する
取得する型 変数名 = (取得する型)request.getAttribute("属性名");
// 取得する型はインスタンスの属性名をString型(文字列)で指定
// 属性名は大文字小文字を区別
// 取得したインスタンスは元の型にキャスト
// インスタンスが保存されてない時はnullを返す
// 例
// サーブレット側
// ヒーローという名でaをスコープに保存
Hero a = new Hero("太郎");
request.setAttribute("ヒーロー", a);
// jsp側
Hero h = (Hero)request.getAttribute("ヒーロー")
セッションスコープ
リクエストをまたいで利用出来るスコープ。
・保存の有効期間は開発者が決める。
// セッションスコープの取得
HttpSession session = request.getSession();
// セッションスコープに保存
session.setAttribute("属性名",インスタンス);
// インスタンスを取得
型 変数 = (型) session.getAttribute("属性名");
// インスタンスを削除
session.removeAttribute("属性名");
// セッションスコープを破棄(ログアウト時に使用)
session.invalidate();
HttpSessionインスタンス
セッションスコープの正体。
・使用されない状態になってもすぐにはガベージコレクションの対象にはならない。
セッションID
HttpSessionインスタンスを作成するとサーバー側で発行するID。
発行以降、ブラウザ側がリクエストする際にこのIDをサーバーへ送る。
Cookie
サーバー側がブラウザ側へデータを保存させて送信させるしくみ。
・有効期限を設定可。
・通常はブラウザを閉じると期限終了。
セッションタイムアウト
一定時間利用されずにガベージコレクションの対象になる事。
ステートフルな通信
リクエストをまたいでユーザー情報を保持する通信。
ステートレスな通信
リクエストをまたいで情報を保持できない通信。
アプリケーションスコープ
アプリケーション毎に作成されるスコープ。
・アプリケーションが終了する迄使用可能。
・アプリケーション内の全てのサーブレットとJSPが利用可。
ServletContextインスタンス
アプリケーションスコープの正体。
// 取得
ServletContext application = this.getServletContext();
// 保存
application.setAttribute("属性名",インスタンス);
// インスタンスを取得
型 変数 = (型) application.getAttribute("属性名");
// インスタンスを削除
application.removeAttribute("属性名");
application(暗黙オブジェクト)
宣言不要なオブジェクト。
スレッド
処理の単位。
eclipseのエクスポート等
- eclipseでプロジェクトと設定をエクスポートする時。
- ファイル
- エクスポート
- ファイルシステムでプロジェクト毎エクスポート
- (ファイル→エクスポート→)設定
- プロジェクトと設定をインポートする時。
- ファイル
- インポート
- 設定
- (ファイル→エクスポート→)既存プロジェクトをワークスペースへ
- インポートするファイルを指定
- プロジェクトをワークスペースにコピーにチェックを入れる



・インポート先のワークスペースの設定のままでよければ、設定のエクスポート不要。
サーブレットクラス
・ブラウザからの初回リクエスト時に自動でインスタンス化。
・2回目以降は、再利用。
・Webアプリケーション終了時に破棄。
init()メソッド
サーブレットクラスがHttpServletから継承しているメソッド。
サーブレットクラスのインスタンス作成直後にに実行される。
public void init(ServletConfig config) throws ServletException {
super.init(config); // スーパークラスのinit()メソッドを実行
〇〇〇〇〇〇; // 最初の1回だけ実行したい処理(インスタンスの初期化等)
}
・複数のサーブレットクラスを使用する時、init()で初期化すると実行のタイミングでうまく動作しない事がある。
destroy()メソッド
サーブレットクラスがHttpServletから継承しているメソッド。
サーブレットクラスのインスタンス破棄直前に実行される。
public void destroy() {
〇〇〇〇〇〇; // 最後に1回だけ実行したい処理(表示等)
}
サーブレットクラスのフィールド
扱いが難しいから使用しない方が良い。
・他のサーブレットクラスやJSPから使用できない
スレッドの調停(同期)
排他処理。
・1つの処理の流れの単位がスレッド。
・複数のスレッドを同時実行するのがマルチスレッド
・同時アクセスで内容を壊す事をスレッドの競合
・競合しない為にコントロールする事を排他処理
リスナー
サーブレットの特殊なクラス。
・特定のイベント時に自動実行される
・リスナーはアノテーション(@Weblistener)が必要
・Webアプリケーション開始時にリスナーがインスタンス化される
・サーブレットクラスの初期化はリスナーでやる
package listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* count変数(訪問回数)を初期化するリスナー
*/
@WebListener
public class ListenerSample implements ServletContextListener {
public void contextDestroyed(ServletContextEvent sce) {}
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
Integer count = 0;
context.setAttribute("count", count);
System.out.println("リスナーが動きました");
}
}
フィルタ
リスナー同様に特殊なクラス。
・doGet()やdoPost()メソッドが実行される前後のタイミングで自動的に実行
・複数のサーブレットクラスに対して設定する事が出来る
・フィルターはアノテーション(@WebFilter)が必要
・javax.servlet.Filterインタフェースを実装
・init(),destroy(),doFilter()の3つのメソッドが実装必要
・doFilter()メソッド内で、chain.doFilter(request,response);より前に書いた処理が前処理、後ろが後処理になる
・JSPやHTMLファイルにも適用出来る
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
/**
* 文字エンコードを設定する
*/
@WebFilter("/*")
public class FilterSample extends HttpFilter implements Filter {
public void destroy() {}
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {}
}
動的インクルード
複数のページに同じ事を書かなくてよくなるやつ。
一か所更新がある時に複数のページで同じ更新をしなくてよくなるやつ。
・インクルードの意味は「含める」
<jsp:include page="インクルード先" />
<jsp:include page="インクルード先"></jsp:include>
アクションタグ
Javaのコードを呼出せるタグ。
標準アクションタグ
JSPに最初から用意されているアクションタグ。
<jsp:アクション名 属性名="値">…</jsp:アクション名>
<jsp:アクション名 属性名="値" />
静的インクルード
動的と違い、実行前に他のJSPファイルの内容を取り込む。
・インクルード先のJSPファイルの内容を更新したら元も要更新
・インクルード先の内容を取込む(動的は実行結果を取込む)
・インクルード先の内容を利用できる(動的は出来ない)
・includeデレクティブを使う
includeデレクティブ
<%@ include file="インクルード先" %>
EL式
// スコープに保存されているインスタンスを取得
${属性名}
//スコープに保存されているインスタンスのプロパティ値を取得
${属性名.プロパティ}
・指定した属性名のインスタンスを下記の順で探す(スコープ)
ページ→リクエスト→セッション→アプリケーション
・無ければ何も出力されない
・スコープから取得するインスタンスのクラスのインポート不要
・プロパティ名を指定するとgetterメソッドが自動実行される
・HTMLに記述すると式の結果が出力される
・スクリプトレットやスクリプト式内では使用不可
ページスコープ
JSPのみがもつスコープ。
・そのJSPファイル内でしか取得出来ない
EL式の暗黙オブジェクト
EL式に用意されている特別なオブジェクト。
・sessionScopeはセッションスコープを表すEL式独自のオブジェクト
empty演算子
EL式の演算子(Javaに無い)。
${empty 対象}
・対象がnull(無い等)ならばtrue
EL式でスコープ内のコレクションを取得
${リスト名[インデックス]}
・マップなら[キー]
JSTL
JavaServer Pages Standard Tag Libraryの略。
・EL式の分岐(繰返し)をやるためカスタムタグが入っている
・開発者の独自作成したアクションタグ
・ネットで落してWEB-INF/libのフォルダにドロップしてビルドパスに追加
・カスタムタグをまとめたものをタグライブラリ
・5つのタグライブラリで構成されている
・5つの中で頻度高いのはCore
taglibディレクティブ
タグライブラリをJSPで使う為に必要なやつ。
<%@ taglib prefix="接頭辞" uri="使用するタグライブラリのURI" %>
EL式のif文
<c:if test="条件式">
trueの時の処理
</c:if>
EL式の拡張forEach文
<c:forEach var="カウンタ変数" items="インスタンスの集合">
繰返し処理
</c:forEach>
リレーショナルデータベース
テーブル形式で管理するデータベース。
レコード
1件分のデータの行。
DBMS
データベース管理システム。
SQL
データベース専用言語。
H2 Database
Javaプラットフォーム上で動くオープンソースのデータベース。
ホームディレクトリ
C:\Users\user
・チルダ(~)はホームディレクトリ
・データベースを作るとここにデータベースが出来る(拡張子db)
・データベースが不要になったら直接上記ファイルを削除してOK
データベースを作成して接続する手順
jdbc:h2:~/データベース名
javaでh2使ってホームディレクトリにデータベース作る時のJDBC URL。
①h2の初期画面で保存済み設定を~(Embedded)のままで上記を入力し接続
②接続は上記設定を~(Server)を選択しJDBC URLの最後の方をデータベース名で接続
JDBC
Javaでデータベースを利用するプログラム。
下記2つが必要。
・java.sqlパッケージのクラス(インタフェース)
・JDBCドライバ(クラスパスに追加。Eclipse時はビルドパスに)
Tomcatで使う場合
①C:\Program Files (x86)\H2\binのjarファイルをコピー
②C:\pleiades\2022-09\tomcat\9\libの中に貼り付け
・H2 DatabaseはJavaで作成され1つのJARファイルだけで構成
DAO
Data Access Object
DAOクラス
データベースとのやりとり専門のクラス。
DAOパターン
DAOクラスを介してデータベースを利用する方法。
・JDBCプログラムの知識がなくてもデータベースを利用出来る
・コードが見やすくなる
・データベースの仕様変更時に対応し易い
デザインパターン
設計の定石(こうしたらええよ的な)。