Mr.Nam 先生の講義要約 Chapter 2, 14-26

14番　サブレットとJSP(2)
有効範囲(scope)と属性(attribute)
HTTP特徴-状態情報保存X(Stateless)
したがって、貯蔵所が必要(Stateful)-状態情報保存ができます。

4つの貯蔵所（アクセス範囲、生存期間によって区分）
貯蔵所はMap形態(Key:属性、Value:属性値)

Mapに読み込み、書き込み可能。
読み:getAttribute()
書き方:setAttribute()
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

15番　サブレットとJSP(3)
URLパターンの種類と優先順位
1.exactmapping（正確）
- URL pattern : /login/hello.do
- マッチングURL:http://localhost/ch2/login/hello.do

2.pathmapping(経路マッピング)
- URL pattern : /login/*
- マッチングURL:http://localhost/ch2/login/~~~~~~

3.extensionmapping(拡張子マッピング)
- URL pattern : *.do
- マッチングURL:http://localhost/ch2/~~~~~~~~~/*.do

4.defaultmapping(デフォルトマッピング、すべてのアドレス)
- URL pattern : /
- マッチングURL:http://localhost/ch2/~~~~~~~~~
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

16番　サブレットとJSP(4)

Filter
共通の要請前処理と応答後の処理に使用。ロギング、エンコード(変換)など。
重複コード分離
DispatcherServlet、AOPに似ている。

処理手順1
フィルター1個で処理

-->1.要請を受ければFilterで前処理
-->2.サブレット呼び出し
-->3.サブレットで処理
-->4.Filterで後処理をして回答

処理手順2
フィルター2つで処理

-->1.要請を受ければFilter1で前処理
-->2.Filter2呼び出し
-->3.Filter2で前処理
-->4.サブレット呼び出し
-->5.サブレットで処理
-->6.Filter2で後処理
-->7.Filter1で後処理をして応答
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

17番　@RequestParam과 @ModelAttribute
@ Request Param
@RequestParam(required=false)は省略可能。必須入力不要。
@RequestParam(required=true)は省略不可。 必須入力が必要
パラメータがStringのとき、매媒介変数がintのときの2つがある
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

18番　@RequestMapping
@ModelAttribute
適用対象をModelのプロパティで自動追加するアナテーション
返却タイプまたはコントローラメソッドのパラメータに適用可能
キー値を省略すると、タイプの頭文字を小文字にしてキーとする。

媒介変数、返却タイプに@ModelAttributeを付けると、呼び出しと保存が不要になる。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

19番　会員登録画面を作成する
servlet-context.xml:web関連設定ファイル
root-context.xml:non-web関連設定ファイル
registerForm.jsp
会員加入画面
registerInfo.jsp
会員登録情報
RegisterController.java
コントローラー。registerForm.jsp、registerInfo.jspをマッピング
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

20番 @GetMapping, @PostMapping (1) 　
pom.xml
ジャババージョン、スプリングバージョンの変更可能。
修正後Maven-UpdateProject

servlet-context.xml
Controllerでメソッドが単にGET方式でviewにURLを接続するだけで、他にすることがないときは
setvlet-context.xmlにview-controllerとして登録して使用可能。

User.java
registerFormで入力された値をuserとして収める役割。
getter/setter作成が必要
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

21番 @GetMapping, @PostMapping (2)
@RequestMappingのURLパターン
優先順位(1→2→3)(Servletと同じ)
1.exactmapping:正確に一致
2.pathmapping:経路マッピング
3.extensionmapping:拡張子マッピング
?は一文字、**は複数文字、**は下位経路を含む。
URLエンコード-パーセントエンコード
URLに含まれるnon-ASCII文字を文字コード(16進数)文字列に変換
(ex. Park jinseong -> %...%...)
URLインコーディング！=Base64(6bitずつ切ってA-Z,a-z,0-9,=,/と表現)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

22番 redirectとforward

redirectとforwarの処理過程を比較
redirect
クライアントから手動でwrite.jspへ要請（request）。
サーバから300番台応答ヘッダー(Redirect)で応答。
クライアントから自動的にlogin.jspへGET要請。
(最初手動でGET/POST要請と関係なく、Redirectは無条件GET要請で送る)
(リクエスト2番、応答度2番)
forward
クライアントからwrite.jspへ要請。
write.jspでlogin.jspでrequest、responseを保存して伝達。
login.jspでクライアントに応答。
(リクエスト1番、回答2番)
requestはModel
write.jspはController
long.jspはview
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

23番 クッキー(Cookie)とは？
クッキーとは？
名前と値のペアで構成された小さな情報。アスキー文字のみ。
サーバから生成後、送信、ブラウザに保存。 有効期限以降自動削除。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

24番 セッション(Session)-理論
セッションとは？
お互いに関連する要請を一つにまとめたもの-クッキーを利用
browserごとに個別リポジトリ(sessionのオブジェクト)をサーバから提供(1:1)
（クッキー:ブラウザに保存、セッション:サーバに保存）

セッションの生成過程
ブラウザが要請すると、サーバーが無条件セッションオブジェクト（保存所）を作る
セッションidが含まれたクッキーを生成してブラウザに送り、ブラウザにクッキーが保存
ブラウザから要請を送る際、セッションid(J SESSION ID)が入ったクッキーを一緒に送る
サーバはJ SSESION IDで確認
同じPCでも他のブラウザなら他のSESSION IDを送る
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

25番 セッション(Session)-実習(1)
ホームでBoardを押すとBoardControllerがログインの有無を確認
ログインされていればboardList.jspに移動
ログインしていなければloginForm.jspへのリダイレクト
loginForm.jspで入力したid、pwdをLoginControllerが確認
一致すればホームに移動
一致しなければ再びloginForm.jspへのリダイレクト
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

26番 セッション(Session)-実習(2)
index.jspでBoardを押すとBoardControllerでログインの有無を確認。
ログインされていればboardList.jspに移動。
ログインしていなければloginForm.jspへのリダイレクト。
loginForm.jspで入力したid、pwをLoginCollerで確認。
id、pwdが一致するとboardList.jspに移動。
一致しなければloginForm.jspへのリダイレクト。

loginForm.jspからboardList.jspに移動するには、"/board/list"をBoardCollerから持って来なければならない。
URLを得る方法はrequest.getRequestURL()、request.getHeader("refer")がある。
受け取った値をinputタックにhiddenタイプで保存して送る。