개발/교육

(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("이동할 페이지");

지시자 종류

  1. <%@ page %>
  2. <%@ include %> - 다른 JSP를 현재 문서에 포함시킬 때 사용
  3. <%@ 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를 호출

main01.jsp

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

main01.jsp가 실행되면 .main01.java가 생성되고

'main01.java'에 'age01.jsp'의 내용('age=20') 이 추가되어 있음 

액션태그 include ( <jsp:include

  • 문서의 실행결과를 포함시키는 것
  • 포함되는 문서의 별도의 서블릿이 생성
  • 포함되는 문서의 내용이 완전해야함

main02.jsp안에는 단순 실행 결과만 포함되어 있음

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가 실행 됨
반응형