일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- springsecurity
- swaggerUrl
- MVC모듈
- springmvc
- .out
- Spring
- 컴퓨터과학
- 원격저장소
- Swagger
- Junit5
- assuming That
- c언어
- Git
- 부스트코스
- assume True
- securityconfig
- .idea
- gitbash
- CS50
- container
- springboot
- assume
- MVC
- 스프링프레임워크
- GitHub
- 파일삭제
- 팀과제
- springframeworkruntime
- assume That
- DispatcherServlet
- Today
- Total
도담이 먹여 살려야하는 집사
SCOPE 본문
Scope 란?
- Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용.
- Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
- Request : http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
- Page : 페이지 내에서 지역변수처럼 사용
Page Scope >> 특정 서블릿이나 JSP가 실행되는 동안에만 정보를 유지하고 싶은 경우
- PageContext 추상 클래스를 사용
- JSP 페이지에서 pageContext라는 내장 객체로 사용 가능
- forward가 될 경우 해당 Page scope에 지정된 변수는 사용할 수 없음.
- 사용방법은 Applicatio scope 나 Session scope, request scope와 같음
- 마치 지역변수처럼 사용된다는 것이 다른 Scope들과 다름
- JSP에서 pageScope에 값을 저장한 후 해당 값을 EL표기법 등에서 사용할 때 사용
- 지역 변수처럼 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용.
Request Scope >> 웹 브라우저로부터 WAS가 요청을 받은 후, 포워드 되는 동안 유지하고 싶은 정보가 있을 경우
- http 요청을 WAS가 받아서 웹 브라우저에게 응답할때 까지 변수값을 유지하려고 할때 사용.
- HttpServletRequest 객체 사용
- JSP 에서는 request 내장 변수 사용
- 서블릿에서는 HttpServletRequest 객체를 사용
값을 저장할 때 : request 객체의 setAttribute() 메소드 사용
값을 읽어올 때 : request 객체의 getAttribute() 메소드 사용
- forward시 값을 유지하고자 사용
* forward를 하기 전 request 객체의 SetAttribute() 메소드로 값을 설정한 후, 서블릿이나 JSP에게 결과를 전달하여 값을 출력하도록 함
>> forward되는 동안 값을 유지시키는 것을 Request Scope를 사용함을 알 수 있음.
Session Scope >> 접속한 웹 브라우저별로 정보를 관리 하고 싶을 경우
- 웹 브라우저별로 변수를 관리하고자 할 경우 사용
- 웹 브라우저간의 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션정보를 사용할 수 있음. >> 브라우저에서 여러개의 새로운 탭을 열었을때 첫번째 브라우저에서 로그인이 되어있다면 세번째 같은 브라우저를 열어도 로그인이 되어있는 경우를 말함
HttpSession 인터페이스를 구현한 객체 사용
JSP >> session 내장변수 사용
>>JSP에서 session.getAttribute() 이런식으로 사용하면 됨.
Servlet >> HttpServletRequest의 getSession()메소드사용 >> session객체를 얻어올 수 있음.
실제 요청이 들어갔을 때 클라이언트에 대한 정보를 알아야함. >> 세션이 어떤 클라이언트의 것인지 알아낼 수 있기 때문에 request가 세션을 얻어 낼 수 있는 메소드를 가지고 있음
- 값을 저장할 때 >> session 객체의 setAttribute()메소드 사용
- 값을 읽어올 때 >> session 객체의 getAttribute()메소드 사용
- 장바구니처럼 사용자별로 유지되어야 할 정보가 있을 때 사용. VS 하나의 요청이 들어왔을 때 지금 생기는 것은 Request Scope >>브라우저별로 생김 그래서 어떤 요청이 들어왔을 때 응답이 같고 끝났을 때 request, response객체는 없어지지만 session 객체는 없어지지 않음. request보다는 훨씬 더 오랫동안 정보를 유지함.
>> 어떤 클라이언트 요청 또는 응답을 하고, 어떤 일들을 계속 하는 동안 정보를 계속 유지해주는 scope
>> 클라이언트마다 하나씩 공간을 가지고 있어서 각 클라이언트마다 유지를 해야 되는 정보들을 session scope를 이용해서 정보를 유지시킴.
Application Scope >> 하나의 웹 어플리케이션에서 공유하고 싶은 변수가 있을 경우
- 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있음.
- ServletContext 인터페이스를 구현한 객체 사용
JSP >> application 내장객체 사용
Servlet >> getServletContext()메소드를 이용하여 application객체를 이용
- 웹 어플리케이션 하나당 하나의 application객체가 사용됨.
- 값을 저장할 때 >> application 객체의 setAttribute()메소드 사용
- 값을 읽어올 때 >> application 객체의 getAttribute()메소드 사용
- 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용.
response.setContentType() : 응답을 받는 객체가 어떤 타입으로 받는지 설정
PrintWriter out = response.getWriter() : 브라우저상에 출력될 out print객체 만들어주기
ServletContext app = getServletContext() : servletContext객체를 얻어냄 (실제 웹 애플리케이션 영역)
애플리케이션 객체에 값을 넣어주기 (app에 넣어줌)
현재 사진상의 applicationScope01서블릿은 애플리케이션에 value값을 맡기는 역할만 함.
application.setApplication("value">> 맡길 객체의 이름,value)
appscope01과 역할은 같지만 01에서 얻어온 value =1 값에 +1을 해주는것이 02의 역할
int value = (int) application.getAttribute("value");
형변환을 해주는 이유 : 처음 01서블릿에서 value값을 맡길때 이부분이 오브젝트로 들어가기 때문에 실제 형변환을 하는 작업을 거쳐야함.
>>01이 실행되지 않고 02가 먼저 실행된다면?
01이 실행되지 않았음 >> value값이 설정되어 있지 않음
02에서는 01의 value값을 무작정 가져오게 되기 때문에 null값을 반환할것임
이럴경우 exception처리를 해주는 것이 좋음.
NullpointerException e
<%
int value = (int) application.getAttribute("value");
value = value + 2;
application.setAttribute("value",value);
%>
JSP는 application객체의 내장객체를 사용하기때문에 ServletContext를 얻어내서 따로 따로 사용 할 필요없이 바로 application하면 됨.
value가 없었을 때 오류를 발생시킬 수 있기때문에 오류 발생 가능성이 있음 >> exception처리 해주기.
다른 클라이언트가 요청을 해도 그 값을 같이 사용함 >> 브라우저가 바뀌었기 때문에 사실 클라이언트가 달라진것
그러나 applicationScope를 사용하게 되면 이클라이언트에서 저장하고 있던 값을 다른 브라우저의 클라이언트에서도 또 사용하고 있는 것을 볼 수 있음. >> 이 웹 어플리케이션이 다시 시작할때까지 정보가 유지된다!