개발/교육
(JSP) 34일차
kakk789
2022. 5. 18. 16:55
세션(Session)
- 내장 객체가 존재 ( session . ~~ )
- 세션 자료형 Object 형
- 세션은 웹 브라우저마다 할당 받음
쿠키(Cookie)
- 직접 객체 생성 필요 ( new Cookie() )
- 쿠키 자료형 String
세션 내장객체 이용 방법
세션 값 저장 (setAttribute)
- 세션에 값을 저장
session.setAttribute(String name, Object value)
"title"이라는 세션 ID에 "JSP Programming" 이라는 값을 저장
session.setAttribute("title", "JSP Programming");
세션 가져오기 (getAttribute)
- 세션 명을 통하여 값을 가져옴
- object형으로 반환 받기 때문에 String or Integer 로 타입캐스팅 하여 받아와야함.
session.getAttribute(String name)
모든 세션 이름 반환(session.getAttributeNames())
session.getAttributeNames();
Enumeration enums = session.getAttributeNames();
세션 이름을 next하는 함수 ( nextElement() )
enums.nextElement()
String name = (String)enums.nextElement();
데이터 유무 판단 메소드 ( hasMoreElements() )
- 읽어 올 요소가 남아있는지 판단
- 있으면 true, 없으면 false 반환
enums.hasMoreElements()
while(enums.hasMoreElements()){
.....
.....
}
예 시
Enumeration enums = session.getAttributeNames();
while(enums.hasMoreElements()){
String name = (String)enums.nextElement();
out.print(name+"<br>");
out.print(session.getAttribute(name));
out.print("<hr>");
}
현재 세션에 저장되어 있는 값


세션 유효시간
- default = 30분
유효시간 설정
session.setMaxInactiveInterval(int seconds)
session.setMaxInactiveInterval(60*5)
유효시간 불러오기
session.getMaxInactiveInterval()
int s_time = session.getMaxInactiveInterval()
세션 당 유지시간 확인 (밀리 세컨즈로 반환)
getId() - 세션 ID 확인(동일 브라우저는 같은 세션 ID 할당)
getLastAccessedTime() - 마지막에 접속했던 시간
getCreationTime() - 최초 생성했던 시간
세션 유지 시간 구하는 방법
getLastAccessedTime() - getCreationTime()
String session_id = session.getId();
long last_time = session.getLastAccessedTime();
long start_time = session.getCreationTime();
long keeping_time = (last_time - start_time) / 1000;
out.print("1. 세션 아이디: " + session_id +"<br>");
out.print("2. 세션 유지된 " + keeping_time+" 초" +"<br>");
세션에 설정된 '값' '삭제' 하는 방법
- invalidate() 함수는 세션을 파기하는 것이기 때문에 파기 후 session 객체에 접근을 못함
- 그래서 isRequestedSessionInvalid() 로 추가로 유효성 검사해야함
단일 세션 삭제
removeAttribute("세션명");
세션 값 삭제
invalidate()
// 단일 세션 삭제
session.removeAttribute("세션명");
// 모든 세션 삭제
session.invalidate();
invalidate()로 세션을 전부 파기 후 getAttribute 하면 아래와 같은 에러 발생

세션의 유효성을 판단하는 함수 (isRequestedSessionInvalid)
reqeust.isRequestedSessionInvalid()
if(request.isRequestedSessionIdValid() == true){
out.print("세션이 유효합니다");
}
else{
out.print("세션이 유효하지 않아요");
}

쿠키(Cookie)
- 웹 사이트에서 사용 될 4KB 이하 크기의 임시 파일
- 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하지 위해 사용
- 클라이언트의 응답을 통하여 쿠키를 기록할 수 있음 (response 객체)
- 쿠키를 삭제하는 명령은 없음 (삭제하려면 유효기간 'setMaxAge'를 0을 설정)
쿠키 생성
new Cookie("쿠키이름", "쿠키 값")
쿠키 기록 (클라이언트 측에 )
response.addCookie(쿠키이름);
쿠키 정보 반환
request.getCookies() - 모든 쿠키 정보 반환, 배열을 반환
Cookie[] cookies = request.getCookie();
request.getName() - 쿠키 이름 반환
request.getValue() - 쿠키에 설정된 값을 반환
Cookie [] cooks = request.getCookies();
if(cooks !=null){ //쿠키가 있을경우만 동작
out.print("쿠키의 개수 : " + cooks.length+"<br>");
out.print("<hr>");
for(Cookie coo:cooks){
out.print("쿠키이름: " + coo.getName() +"<br>");
out.print("쿠키값: " + coo.getValue() +"<br>");
out.print("<hr>");
}
}
쿠키 유효기간 설정 ( setMaxAge )
cookie.setMaxAge(시간)
- 시간을 0으로 설정하면 쿠키 삭제 가능.
쿠키에 값 설정 ( setValue )
request.setValue()
다른 페이지로 이동 ( sendRedirect )
response.sendRedirect("이동할 페이지");
지시자 종류
- <%@ page %>
- <%@ include %> - 다른 JSP를 현재 문서에 포함시킬 때 사용
- <%@ taglib %> - 사용자 정의 태그를 사용하고 싶을 때 선언
<%@ include file="loginCheck.jsp" %>
JSP 액션태그
- jsp에서 사용하는 태그
- JSP 페이지 내에서 어떤 동작을 하도록 지시하는 태그, 예를 들어 페이지 이동, 페이지 include, 자바 빈 생성 등이 있습니다.
- XML 형식인 <jsp: …… /> 를 사용하며 반드시 닫아 줘야함
forward 액션태그
- 현재 위치한 jsp 웹페이지에서 다른 웹페이지로 이동할 때 사용
<jsp:forward page="파일명"/>
- jsp 액션 forward 태그는 리다이렉트 될 때 리다이렉트 되는 파일이 노출이 안됨.
만약 red.jsp에서 yellow.jsp 로 리다이렉트 시켰다면 URL에 표시될 때 red.jsp만 표시됨
response.sendRedirect("yellow.jsp")
- 이것도 리다이렉트 하는 자바 코드이지만 해당의 경우 yellow.jsp가 노출이 됨.
include 액션태그
- 특정 영역에 외부파일의 내용을 포함할 때 사용
<jsp:incluse page="파일명">
- 문서의 실행 결과를 포함 시킴
- 해당 파일명의 .java / .class 파일이 별도로 생성됨
- 즉 파일명.java / 파일명.class 가 생성되어 실행 됨
<%@ include file="파일명" %>
- 문서의 내용을 포함 시킴
지시자 include ( <%@ )
- 문서의 내용을 포함
- 포함되는 문서의 별도의 서블릿이 생성되지 않음
- 포함되는 문서의 내용이 완전하지 않아도 됩니다.
.jsp 를 요청하면 내가 요청한 jsp의 .java 가 생성되고 .class 가 생성된 후 jsp가 실행 됨
main01.jsp에서 age01.jsp를 호출

age01.jsp에서 선언된 값 (age =20)

main01.jsp가 실행되면 .main01.java가 생성되고
'main01.java'에 'age01.jsp'의 내용('age=20') 이 추가되어 있음

액션태그 include ( <jsp:include )
- 문서의 실행결과를 포함시키는 것
- 포함되는 문서의 별도의 서블릿이 생성
- 포함되는 문서의 내용이 완전해야함
main02.jsp안에는 단순 실행 결과만 포함되어 있음

age02.jsp의 class파일과 java파일이 각각 생성되었음

액션태그 Param
- 다른 웹페이지로 파라미터를 전달할 때 사용
- 당연히 forward나 include 내부에서 선언하여 사용
<jsp:param value="전달할 값" />
자바 빈즈(Java Beans)
- 자바코드와 HTML 코드가 뒤섞여있어 유지보수의 어려움이 있다. 그래서 '자바 소스코드'를 '자바 클래스'로 따로 빼두어 JSP가 복잡해지는 것을 방지할 수 있음.
- 이때, 웹 어플리케이션에서 사용하는 객체들을 '자바 빈즈(beans)'라고 표현

useBean 액션태그
- 자바빈즈를 JSP 웹페에지에서 사용하기 위해 java클래스를 선언하고 초기화하는 태그
- 스크립틀릿을 안쓰고 'useBean'액션 태그 안에서 객체를 생성하여 사용할 수 있음
<jsp:useBean id="변수명" class="클래스명" type="타입명" scope="page | request | session | application" />
scope 설명
: page - 현재 문서에서만 해당 객체를 사용 (기본 값)
: request - 링크가 걸려있는 다음 문서에서도 사용
: session - 세션 파기 전까지 유지 (= 브라우저 닫기 전까지)
: application - 서버 종료 전까지 유지
아래 두 코드는 같은 코드 (useBean VS 스크립틀릿)
// useBean 액션태그 안에서 선언
<jsp:useBean id="nowTime" class="java.util.Date" />
// 스크립틀립 안에서 선언
<%
Date nowTime = new Date();
%>
useBean 액션태그에서 SETTER / GETTER 설정
<jsp:setProperty property="실제 속성 명" value="값" name="객체id"/>
<jsp:setProperty property="실제 속성 명" value="*" name="객체id"/>
( * 을 사용하기 위해선 객체VO의 변수명과 입력 받을 tag의 name이 동일 해야한다)
<jsp:getProperty property="실제 속성 명" name="객체id"/>
<jsp:useBean id="m" class="com.sist.vo.MemberVO"></jsp:useBean>
<jsp:setProperty property="id" value="tiger" name="m"/>
<jsp:setProperty property="pwd" value="1234" name="m"/>
<jsp:setProperty property="name" value="name" name="m"/>
아이디 : <jsp:getProperty property="id" name="m"/>
비밀번호 : <jsp:getProperty property="pwd" name="m"/>
이름 : <jsp:getProperty property="name" name="m"/>
Tip
- jsp를 요청하면 내가 요청한 jsp의 .java가 생성되고 .class 가 생성되서 jsp가 실행 됨
반응형