처음부터 차근차근

상태유지 방법 본문

프로그래밍/JSP

상태유지 방법

_soyoung 2022. 1. 2. 17:04
반응형

submit버튼 여러개 만들기

<input type="submit" name="button" value="1번버튼" />
<input type="submit" name="button" value="2번버튼" />

이렇게 보내면 servlet class에서 submit의 value값을 받을 수 있다. 

String button_ = request.getParameter("button");

 

 

 

입력 데이터 배열로 받기

<input type="text" name="val" />
<input type="text" name="val" />
<input type="text" name="val" />

이렇게 같은 name으로 값을 여러개 보내면 servlet class에서 배열로 받을 수 있다.

int sum = 0;
String[] val_ = request.getParameterValues("val");
for (int i = 0; i < val_.length; i++) {
	int number = Integer.parseInt(val_[i]); // 여기서 number 변수는 for문 돌때마다 새로 정의되지 않음 
	sum += number;
}

number은 for문 돌때마다 새로 선언과 초기화가 되는게 아니라 처음 한 번만 생성되고 지역변수 처럼 계속 쓰인다.

 

 

 

 

상태유지 방법

서버 저장소

  1. application
  2. session
  3. request
  4. pageContext

클라이언트 저장소

  1. cookie

( + hidden input, querystring)

서버 내 저장소

WAS안에는 application과 session을 따로 저장할 수 있는 서버 내의 공간이 있다.

 

application 

웹 서버(application)에 전역적으로 데이터를 저장한다.(=전역변수로 데이터 저장)

그래서 application 전역에서 데이터를 사용할 수 있다.

예 : 공용 락커

ServletContext application = request.getServletContext();
application.setAttribute("number", 1); // 값 저장
int num = (Integer)application.getAttribute("number"); // 값 가져오기

servlet context(application 저장소) : 어떤 데이터를 저장하고 유지하는 서버 내의 공간

 

 

 

session

session : 현재 접속한 사용자

session 범주 내에다 데이터를 저장한다.

하나의 웹 브라우저마다 하나의 사용자라고 본다.

그래서 웹 브라우저가 달라지면 다른 사용자라고 인식한다.

예 : 개인용 락커(사용자 별로 공간이 다름)

HttpSession session = request.getSession();
session.setAttribute("number", 1); // 값 저장
int s_num = (Integer)session.getAttribute("number"); // 값 가져오기

 

session 메소드

session.invalidate(); // <중요!!> 세션 종료
session.setMaxInactiveInterval(24 * 60 * 60); // 세션 타임아웃 설정(초 단위로 설정) // 24시간
session.getCreationTime(); // 세션이 시작된 시간을 반환
session.getLastAccessedTime(); // 마지막 요청시간 반환(1970.01.01 부터 ~ 밀리초로)

 

chrome 창을 여러 개 띄우는 것도 다른 사용자로 인식하는가?

--> NO

하나의 chrome이라는 프로세스 밑에 스레드를 놔서 창을 띄운다.  

엄연히 chrome이라는 하나의 프로세스이기 때문에 하나의 사용자라고 인식한다.

그리고 프로세스가 가지는 자원을 스레드는 다같이 공유하기 때문에 다른 사용자라고 인식하지 않는다.

 

웹서버가 session을 구분하는 방법

session id를 항상 쿠키로 저장하고 있다.

그래서 이 session id가 다르면 다른 사용자라고 인식한다.

 

 

 

request

class와 forwarding되는 페이지 관계에서 사용할 수 있는 객체이다.

// request에 데이터 저장
String str = "apple";
request.setAttribute("fruit", str);



// request 데이터 출력
<%=request.getAttribute("fruit")%>
or
${fruit}

예를 들어 add라는 servlet class에서 fruit라는 이름으로 값이 apple인 데이터를 저장하고 test.jsp로 forwarding하면 test.jsp에서 그 값을 사용할 수 있다.

 

 

 

pageContext

한 페이지 내에서만 사용할 수 있는 저장소이다.

예를 들어 test.jsp에서 pageContext 객체를 선언하면 test.jsp 안에서만 사용할 수 있다.

<%
	pageContext.setAttribute("test", "this is test");
%>

 

 

 

Cookie

cookie란 클라이언트의 웹 브라우저에 데이터를 저장할 수 있는 기능이다.

웹 브라우저에서 url로 요청을 할 때 클라이언트는 웹 서버로 cookie를 가져간다.

cookie는 브라우저의 메모리에 존재한다.

주로 데이터를 길게 유지해야할 때, 잠깐 저장하는 데이터 일때 cookie를 사용한다.

// 새 cookie 생성
int sum = 1;
Cookie cookie = new Cookie("cookie_name", String.valueOf(sum)); //cookie 값은 문자열로만 저장할 수 있다.
response.addCookie(cookie); // cookie 저장


// cookie 값 가져오기
Cookie[] cookies = request.getCookies();
String c_ = "";
if(cookies != null) {
	for(Cookie cookie1 : cookies) {
		if("cookie_name".equals(cookie1.getName())) {
			c_ = cookie1.getValue();
			break;
		}
	}
}

// cookie 삭제
cookie.setMaxAge(0); // 설명은 아래에...

 

 

cookie path

cookie의 url을 설정하는 것이다.

그러면 이 cookie는 해당 url에 속한 서블릿에서만 사용할 수 있다.

Cookie cookie = new Cookie("cookie_name", String.valueOf(sum));
cookie.setPath("/test");

/test라는 요청이 왔을 때만 해당 cookie를 사용할 수 있다.

 

 

 

cookie MaxAge

MaxAge는 cookie의 유효 시간을 설정하는 함수이다.

cookie에 MaxAge를 설정하지 않았을 때 모든 cookie는 웹 브라우저가 닫히면 cookie도 같이 사라진다.

cookie가 MaxAge가 설정되면 웹 브라우저와 상관없이 그 기간 내에 계속 존재해야하기 때문에 외부 파일(내 컴퓨터)에 저장된다.

Window cookie 파일 저장 경로

C:\Users\username\AppData\Local\Microsoft\Windows\INetCache
Cookie cookie = new Cookie("cookie_name", String.valueOf(sum));
cookie.setMaxAge(24 * 60 * 60); // 초로 설정해야함 // 24시간

 

 

 

정리 

session 

사용 범위 : 전역 범위

생명 주기 : WAS 시작 ~ 종료될 때까지

저장 위치 : WAS 서버의 메모리

 

application

사용 범위 : 세션 범위

생명 주기 : 세션 시작 ~ 종료될 때까지

저장 위치 : WAS 서버의 메모리

 

cookie

사용 범위 : 웹 브라우저 별 지정한 path 범주

생명 주기 : maxAge 안 정하면 웹브라우저 닫힐 때까지, maxAge 정하면 그 유효 시간까지

저장 위치 : 웹 브라우저의 메모리 or 외부 파일

 

 

 

 

출처 : https://www.youtube.com/playlist?list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd 변형 및 요약 

반응형
Comments