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タイプで保存して送る。