목차
1. 쿠키 개념과 사용법
쿠키(Cookie) : 웹 브라우저에 저장되는 작은 데이터 조각. 서버는 클라이언트에게 쿠키를 설정할 수 있으며, 이후 클라이언트는 해당 쿠키를 서버로 전송한다. 쿠키는 주로 사용자 식별, 상태 유지, 개인 설정 등에 사용된다.
특징
- 클라이언트(브라우저)에 저장된다.
- 유효 기간을 설정할 수 있다.
- 보안이 상대적으로 낮다.
- 작은 데이터 저장 용량(약 4KB)을 가진다.
setCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String username = "홍길동";
Cookie userCookie = new Cookie("username", username);
/**
쿠키는 요청한 사용자 브라우저에 저장된다.
즉, setCookie.jsp 요청한 사용자에 response 객체로 데이터 조각을 담아서 보내주어야 한다.
*/
userCookie.setMaxAge(60 * 60 * 30);
response.addCookie(userCookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>사용자가 이 페이지 요청시에 서버측에서 쿠키를 생성해서 응답 합니다.</h1>
<a href="getCookie.jsp">쿠키 값 읽어 보는 페이지</a>
</body>
</html>
getCookie.jsp
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
Cookie[] cookies = request.getCookies();
String cUsername = null;
if (cookies != null){
// 쿠키는 여러개 존재 가능하다. 여기 페이지에서 필요한
// 쿠키는 우리가 정의한 username 이름을 가진 녀석이다.
for (Cookie cookie : cookies ){
if (cookie.getName().equals("username")){
cUsername = cookie.getValue();
break;
}
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>쿠키 읽기</h2>
<%
if(cUsername != null) {
out.println("<p> 안녕하세요 " + cUsername + " 님 </p>");
} else {
out.println("<p> 쿠키가 설정되지 않았습니다. </p>");
}
%>
<a href="setCookie.jsp"> 쿠키 설정하러 가기</a>
</body>
</html>
2. 세션 개념과 사용법
세션(Session) : 서버에 저장되는 사용자별 데이터. 각 사용자는 고유한 세션 ID를 가지며, 세션 ID를 통해 서버는 사용자를 식별할 수 있다. 세션은 주로 로그인 정보, 사용자 설정, 애플리케이션 상태 등을 저장하는 데 사용된다.
세션의 특징
- 서버에 저장된다.
- 클라이언트와 서버 간의 상태를 유지한다.
- 비교적 큰 데이터 저장 용량을 가진다.
- 보안이 상대적으로 높다.
상태 유지란?
- 세션 ID : 서버는 클라이언트와의 상호작용을 추적하기 위해 세션 ID를 사용한다. 클라이언트는 서버로부터 세션 ID를 쿠키로 전달받으며, 이후 모든 요청에 이 세션 ID를 포함하여 서버에 전송한다. 서버는 이 세션 ID를 통해 클라이언트의 상태를 유지한다.
- 추상적인 개념 : 클라이언트와 서버 간의 상태 유지는 물리적인 연결을 의미하는 것이 아니라, 클라이언트의 상태 정보를 세션 ID를 통해 추적하고 관리하는 추상적인 개념이다.
도전과제
세션과 관련된 메소드들을 확인 및 활용하고 세션을 무효화 시키는 기능을 만들어 보세요
메소드 이름 | 리턴 타입 | 설명 |
getAttribute(String name) | java.lang.Object | 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당 되는 속성명이 없을 경우에는 null 값을 리턴한다. |
getAttributeNames() | java.util.Enumeration | 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다. |
getCreationTime() | long | 1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다. |
getId() | java.lang.String | 세션에 할당된 고유 식별자를 String 타입으로 리턴한다. |
getMaxInactiveInterval() | int | 현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다. |
invalidate() | void | 현재 생성된 세션을 무효화 시킨다. |
removeAttribute(String.name) | void | 세션 속성명이 name인 속성을 제거한다. |
setAttribute(String name, Object value) | void | 세션 속성명이 name인 속성에 속성값으로 value를 할당한다. |
setMaxInactiveInterval(int interval) | void | 세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다. |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션을 읽어 보는 페이지</title>
</head>
<body>
<h2>세션 읽기</h2>
<%
// 삼항연산자
// if else
// try catch 사용 가능
String username = (String) session.getAttribute("username");
Integer age = (Integer) session.getAttribute("age");
if (username != null) {
out.println("<p>안녕 " + username + "</p>");
out.println("<p>나이는 " + age + "이네요! </p>");
%><br><a href="delSession.jsp">세션 제거 하기</a> <%
} else {
out.println("세션 설정이 되지 않았습니다.");
%><br><a href="setSession.jsp">세션 설정 하러 가기</a> <%
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String username = "홍길동";
int age = 21;
session.setAttribute("username", username);
session.setAttribute("age", age);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 설정 페이지</title>
</head>
<body>
<h2>세션 설정이 완료 되었습니다.</h2>
<a href="getSession.jsp">세션 읽어 보기</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
session.invalidate();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>세션 제거 완료</h2>
<a href="setSession.jsp">세션 설정 하러 가기</a>
</body>
</html>
3. 구구단 만들어보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구구단 폼</title>
</head>
<body>
<%
String mHidden = "홍길동";
%>
<h2>출력하고 싶은 단을 선택하세요</h2>
<form action="gogodan.jsp" method="get">
<input type="hidden" name="mHidden" value="<%= mHidden%>">
<select name="num" id="num" style="width: 40px;">
<% for (int i = 1; i <= 9; i++) { %>
<option value="<%=i%>"><%=i%></option>
<% } %>
</select>
<button type="submit">선택</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구구단 결과</title>
</head>
<body>
<h1>구구단 결과</h1>
<%
int num = 0;
String sessionId = session.getId();
out.print("sessionId : " + sessionId);
try {
num = Integer.parseInt(request.getParameter("num"));
%>
<h2><%=num%> 단</h2>
<table border="1">
<thead>
<tr>
<th>계산식</th>
<th>결과</th>
</tr>
</thead>
<tbody>
<%for (int i = 1; i <= 9; i++) { %>
<tr>
<td><%= num %> x <%= i %> </td>
<td><%= num * i %> </td>
</tr>
<% } %>
</tbody>
<tfoot></tfoot>
</table border="1">
<%
} catch (Exception e) {
out.println("<p> 잘못된 접근 입니다.");
%><br>
<a href="form.jsp">구구단 선택 폼으로 돌아가기</a>
<% } %>
</body>
</html>
'Java > JSP' 카테고리의 다른 글
간단한 게시판 만들어 보기 (0) | 2024.07.08 |
---|---|
서블릿과 JSP의 개념과 차이점 (0) | 2024.07.05 |
폼 처리와 요청 방식 (0) | 2024.07.04 |
JSP 내장 객체란 뭘까? (0) | 2024.07.04 |
JSP 지시자(Directive) 간단 정리 (0) | 2024.07.04 |