🚩오후에 할일
Scope까지 알아보면 pageContext가 모두 설명된다.
👍 Scope알아보고 활용까지
✌️ 2Tier -> 3Tier 이어주는 jdbc 까지
오후 사용할 파일 : propertyView.jsp , PropertyContollerServlet
👍 Scope알아보고 활용까지
Scope : 컨트롤러 레이어가 뷰에 요청과 인포메이션을 공유할 때 저장해두는 저장소.
공유 대상의 특성에 따른 범위와 명확한 생명주기에 의해 4가지로 나뉜다.
👑 request : 클라이언트가 요청했을 때 생성, 응답하면 사라짐
👑 session : 요청이 오면 생기고, 타임아웃하면 사라짐
👑 application : 서버가 시작하면 켜지고, 꺼지면 사라짐
👑 pageContext : 이 요청된 jsp페이지가 살아있는동안 존재함.
>> 라이프 사이클 기준으로 본다면 생명주기 범위가 다 다르다
생명주기 크기 비교
applicationScope > sessoinScope > requestScope > pageScope
각자 저장소가 가진 map이 있고 그것을 scope라고 부른다. scope의 실체는 map 컬렉션이었다.
Scope에 넣어서 보관했던 것을 Attribute -> entry 이다. -> entry는 이름과 값으로 이루어져 있다.
pageScope(PageContext) : 나머지 스콥프의 정보를 모두 가지고 있다. 공유라는 목적에는 부합하지 않지만 커스텀태그를 위해 필수항목이다.
requestScope (HttpServletRequest)
session Scope (HttpSession) : 나만의 데이터 관리하는 저장공간, 브라우저를 기준으로 만들어지므로 서로 다른 브라우저로 똑같이 네이버에 로그인해도
applicationScope (ServletContext) : 싱글톤으로 생성되기에 한번에 하나씩
web토큰(세션 없이도 로그인(쿠키) 유지하게 해주는 것. )
사용시 주의점
pageScope , requestScope 스코프는 정해진 타이밍에 지워지는데 sessionScope, applicationScope는 그렇지 않기도 해서 계속 서버가 무거워진다. >> flash attribute 방식 필요할 때가 있다.
내가 필요한 만큼 적절한 사용공간을 사용해야 좋다.
상황1)forward방식 이동
페이지를 이동하면 pageContext는 null이 된다. 영역을 벗어났기때문.
그렇다면 여기서 최소한 필요한 적절한 저장소는? reqeust. 그래서 우리는 계속 reqeust를 사용해온다
상황2)include방식 이동
include방식으로 페이지가 합쳐진 것처럼해도 결과는 같다. 그렇기 대문에 pageContext는 공유 목적으로 사용할 수 없는 것이다.
상황3)response.sendRedirect
그런데 여기는 클라이언트 사이드에서의 요청이기 때문에 request.getContextPath() 이것을 추가.
stateLess속성때문에 request가 끝나서 null 나옴
상황4)
<a href="<%=request.getContextPath()+path %>">attributeView.jsp로 이동</a>
페이지를 넘어갔기 때문에 당연히 pageScope : null, 요청 끝났으니 request도 null, session은 a태그를 누르면서 요청 시간이 갱신되었으므로 타임아웃 시간 남아서 나옴.
그런데 쿠키 지워버리면?
session도 null 나와버림.
그런데 어플리케이션 속성은 계속나옴 + 쓰레기 저장소 늘어나고 잇음 = 서버 무거워짐...
안지우면 쓰레기가 남는다. .... 쿠키와 어플리케이션
<%session.removeAttribute("sessionAttr");%> // flash attribute방식
꺼내고 나서 바로 삭제하는 방법
그럼 처음에는 저장소 2개 됐다가 새로고침하면 session은 사용하고나서 flash되어버려서 1개로 나옴
...
btsView에보면 btsMap이 어플리케이션에 저장되어있다. 이거 지우면 한명만 멤버 정보 이용할 수 있어서 플러쉬구조 사용하면 안됨. 지울때도 상황을 잘 보고 지워야함
🐲🐲허가/인증 해보자. -> 로그인을 통해
db일단 연결하지 말고 인메모리로 해보자.
1.VO( D.L)
2. DAO
3.BLL
4.C.L
순서가 생겨버림 -> 결합도가 낮다. -> 낮추자 -> 추상적인 사용방법( 인터페이스 )을 일단 만들어놓자.
▶ MemberVO
ValueObject(VO), DataTrendferOobject(DTO) 여러개의 값들을 하나의 객체로 묶어서 데이터를 주고 받을 수 있도록 그릇의 용도를 하는 역할.
캡슐화 : 이 객체를 외부에서 함부로 직접적으로 접근할 수 없도록 막아두는 것.
자바빈(JavaBean) 이란?
자바빈이란 특정한 기능을 지닌 컴포넌트를 말하는 것이 아닙니다.
간단히 말하자면 자바빈 규약 또는 자바빈 관례에 따라 만들어진 클래스를 의미합니다.
에초에 전송을 목적으로 하는 DTO, VO 그렇기 때문에 자바빈규약 6번 직렬화 되어 있어야 한다.
implements Serializable
transient 직렬화 막기 @JsonIgnore 마샬링 막기
▶ MemberDAO AuthenticateService AuthenticateException AuthenticateServiceImpl
단방향암호화 : 원래 평문으로 복구 불가능한거
양방향 암호화 : 양방향으로 복구가 가능한거
복구과정에 키가 쓰이고 키가 하나인경우 두개인경우 있음.... 다음주 보강 내용 이거 .... 어제 공부한거닷 힣
미션
검증 라이브러리를 사용해보자
자바의 랭패키지 기본 패키지 그런데 조금 부족한 부분 채워주는 라이브러
'내가 보려고 정리하는 > Spring' 카테고리의 다른 글
웹 : 3Tier로의 확장, DB연결하기 : 0320 (0) | 2023.03.20 |
---|---|
웹 : adapterpattern : 0317(3) (0) | 2023.03.20 |
웹 : fancytree, adapter pattern : 0317 (0) | 2023.03.17 |
웹 : jsp 기본객체( application ), js 함수지향언어, this!! :0316 (0) | 2023.03.16 |
웹 : JSP 기본객체, buffer, scope 저장소 Session : 0315 (0) | 2023.03.15 |