목차
HTTP는 비연결형 프로토콜
- 한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어짐
- 요청에 대한 응답을 서버가 전송하며 나면 연결 끊어짐
- 브라우저와 서버 간의 상태에 대한 보존 없이 매 순간 순간 새로운 연결
- 한번 로그인한 사용자가 로그아웃할 때까지 페이지를 이동해도 보관해야 할 정보가 있다면 이에 대한 처리가 매우 곤란짐 : HTTP 프로토콜의 한계
→ 세션, 쿠키
세션이란?
- 웹 서버에 웹 클라이언트 마다 각기 다른 정보를 일시적으로 저장하여 사용하기 위한 객체
- 클라이언트의 정보를 서버에 가지고 있다가 다시 해당 클라이언트의 또 다른 요쳥이 왔을 때 저장된 정보와 비교해 동일한 브라우저인지 판단
- 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
- 웹 서버에서만 접근이 가능하므로 보안 유지에 유리, 서버에 부담
세션의 개요
세션(session)
- 오직 웹 서버에 존재하는 객체로 웹 브라우저마다(사용자 별로) 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 됨
- 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않음
- 일정시간 유지(기본 30분)되고 새로운 요청 하지 않으면 자동 해제.
세션 생성
세션 생성
- session 내장 객체의 setAttribute() 메소드를 사용
void setAttribute(String name, Object value)
- 첫 번째 매개변수 : name
- 세션으로 사용할 세션 속성 이름
- 세션에 저장된 특정 값을 찾아오기 위한 키로 사용
- 두 번째 매개변수 value : 세션의 속성 값
- 세션 속성 값은 Object 객체 타입만 가능
- int, double, char 등의 기본 타입은 사용할 수 없음
setAttribute() 메소드 사용 예
session.setAttribute("memberId", "admin");
<form action="session01_process.jsp" method="POST">
<p> 아이디 : <input type="text" name="id">
<p> 비밀번호 : <input type="text" name="passwd">
<p> <input type="submit" value="전송">
</form>
- session01_process.jsp
<%
String user_id = request.getParameter("id");
String user_pw = request.getParameter("passwd");
if (user_id.equals("admin") && user_pw.equals("1234")) {
session.setAttribute("userID", user_id);
session.setAttribute("userPW", user_pw);
out.println("세션 설정이 성공했습니다<br>");
out.println(user_id+"님 환영합니다");
} else {
out.println("세션 설정이 실패했습니다.");
}
%>
세션 정보
단일 세션 정보 얻기
- getAttribute() 메소드를 사용
Object getAttribute(String name)
- getAttribute() 메소드는 반환 유형이 Object 형이므로 반드시 형 변환을 하여 사용해야 함
String id = (String)session.getAttribute("memberId");
→ 해당 속성 이름이 없는 경우 null
<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
// (String) 강제 형변환을 사용하는 이유는
// setAttribute의 값은 Object형태 이기 때문에
out.println("설정된 세션의 속성 값 [1] : " + user_id +"<br>");
out.println("설정된 세션의 속성 값 [2] : "+ user_pw + "<br>");
%>
다중 세션 정보 얻기
Enumeration getAttributeNames();
Enumeration == 열거형
enum.hasMoreElements() 는 해당 열거형의 값이 있으면 true 없으면 false
while문 안에서 nextElement() 를 사용하기 때문에 열거형에서 다음 순서로 넘어간다.
- toString 사용 이유 : Enumeration은 object 형식이기 때문에 String 형식으로 형변환하여 출력
세션 삭제
단일 세션 삭제하기
- 세션에 저장된 하나의 세션 속성 이름을 삭제
- removeAttribute() 메소드를 사용
void removeAttribute(String name)
- removeAttribute() 메소드 사용 예
session.removeAttribute("memberId");
<h4>-----세션을 삭제하기 전-----</h4>
<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
out.println("설정된 세션 이름 userID : " + user_id + "<br>");
out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
session.invalidate();
%>
<h4>-----세션을 삭제한 후-----</h4>
<%
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
%>
다중 세션 삭제하기
- 세션에 저장된 모든 세션 속성 이름을 삭제
- invalidate() 메소드를 사용
void invalidate()
- invalidate() 메소드 사용
session.invalidate()
<h4>-----세션을 삭제하기 전-----</h4>
<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
out.println("설정된 세션 이름 userID : " + user_id + "<br>");
out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
session.invalidate();
%>
<h4>-----세션을 삭제한 후-----</h4>
<%
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
%>
세션 유효 시간 설정
세션 유효 시간
- 세션을 유지하기 위한 세션의 일정 시간
- 웹 브라우저에 마지막 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션이 종료
- session 내장 객체의 setMaxInactiveInterval() 메소드를 사용
- 초 단위 설정
void setMaxInactiveInterval(int interval)
[사용 예]
session.setMaxInactiveInterval(60*60) // == 1시간
ArrayList
- 전통적인 배열 :
- 배열 생성시 배열의 크기가 고정.
- 데이터의 개수가 배열의 크기보다 많아지면 저장 불가능.
- 배열의 크기 크게 하면 공간 낭비.
- [ ] 사용하여 요소 접근
- ArrayList 클래스
- 저장되는 데이터의 개수에 따라 자동적으로 크기 변경.
- 즉, 요소가 가득 차게 되면 크기를 동적으로 증가.
- 삭제되면 크기가 줄어듬. 자동으로 변경하면서 사용 가능.
- ( )로 요소 접근
→ 실행 도중에 배열의 크기를 변경할 수 있는 동적 배열임
ArrayList <자료형> list = new ArrayList<자료형>();
// 요소들 리스트에 추가 : add() 메서드
list.add(“철수”);
// 리스트에서 요소 삭제 : remove() 메서드
list.remove(1); //첫번째 요소 삭제
// 리스트 요소 가져오기 : get() 메서드
String s =list.get(1); //첫번째 요소 반환
// 리스트의 각 요소 출
for(int i=0;i<list.size();i++) {
out.println(list.get(i) + "<br>");
}
HTTP는 비연결형 프로토콜
- 한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어짐
- 요청에 대한 응답을 서버가 전송하며 나면 연결 끊어짐
- 브라우저와 서버 간의 상태에 대한 보존 없이 매 순간 순간 새로운 연결
- 한번 로그인한 사용자가 로그아웃할 때까지 페이지를 이동해도 보관해야 할 정보가 있다면 이에 대한 처리가 매우 곤란짐 : HTTP 프로토콜의 한계
→ 세션, 쿠키
세션이란?
- 웹 서버에 웹 클라이언트 마다 각기 다른 정보를 일시적으로 저장하여 사용하기 위한 객체
- 클라이언트의 정보를 서버에 가지고 있다가 다시 해당 클라이언트의 또 다른 요쳥이 왔을 때 저장된 정보와 비교해 동일한 브라우저인지 판단
- 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
- 웹 서버에서만 접근이 가능하므로 보안 유지에 유리, 서버에 부담
세션의 개요
세션(session)
- 오직 웹 서버에 존재하는 객체로 웹 브라우저마다(사용자 별로) 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 됨
- 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않음
- 일정시간 유지(기본 30분)되고 새로운 요청 하지 않으면 자동 해제.
세션 생성
세션 생성
- session 내장 객체의 setAttribute() 메소드를 사용
void setAttribute(String name, Object value)
- 첫 번째 매개변수 : name
- 세션으로 사용할 세션 속성 이름
- 세션에 저장된 특정 값을 찾아오기 위한 키로 사용
- 두 번째 매개변수 value : 세션의 속성 값
- 세션 속성 값은 Object 객체 타입만 가능
- int, double, char 등의 기본 타입은 사용할 수 없음
setAttribute() 메소드 사용 예
session.setAttribute("memberId", "admin");
<form action="session01_process.jsp" method="POST">
<p> 아이디 : <input type="text" name="id">
<p> 비밀번호 : <input type="text" name="passwd">
<p> <input type="submit" value="전송">
</form>
- session01_process.jsp
<%
String user_id = request.getParameter("id");
String user_pw = request.getParameter("passwd");
if (user_id.equals("admin") && user_pw.equals("1234")) {
session.setAttribute("userID", user_id);
session.setAttribute("userPW", user_pw);
out.println("세션 설정이 성공했습니다<br>");
out.println(user_id+"님 환영합니다");
} else {
out.println("세션 설정이 실패했습니다.");
}
%>
세션 정보
단일 세션 정보 얻기
- getAttribute() 메소드를 사용
Object getAttribute(String name)
- getAttribute() 메소드는 반환 유형이 Object 형이므로 반드시 형 변환을 하여 사용해야 함
String id = (String)session.getAttribute("memberId");
→ 해당 속성 이름이 없는 경우 null
<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
// (String) 강제 형변환을 사용하는 이유는
// setAttribute의 값은 Object형태 이기 때문에
out.println("설정된 세션의 속성 값 [1] : " + user_id +"<br>");
out.println("설정된 세션의 속성 값 [2] : "+ user_pw + "<br>");
%>
다중 세션 정보 얻기
Enumeration getAttributeNames();
Enumeration == 열거형
enum.hasMoreElements() 는 해당 열거형의 값이 있으면 true 없으면 false
while문 안에서 nextElement() 를 사용하기 때문에 열거형에서 다음 순서로 넘어간다.
- toString 사용 이유 : Enumeration은 object 형식이기 때문에 String 형식으로 형변환하여 출력
세션 삭제
단일 세션 삭제하기
- 세션에 저장된 하나의 세션 속성 이름을 삭제
- removeAttribute() 메소드를 사용
void removeAttribute(String name)
- removeAttribute() 메소드 사용 예
session.removeAttribute("memberId");
<h4>-----세션을 삭제하기 전-----</h4>
<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
out.println("설정된 세션 이름 userID : " + user_id + "<br>");
out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
session.invalidate();
%>
<h4>-----세션을 삭제한 후-----</h4>
<%
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
%>
다중 세션 삭제하기
- 세션에 저장된 모든 세션 속성 이름을 삭제
- invalidate() 메소드를 사용
void invalidate()
- invalidate() 메소드 사용
session.invalidate()
<h4>-----세션을 삭제하기 전-----</h4>
<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
out.println("설정된 세션 이름 userID : " + user_id + "<br>");
out.println("설정된 세션 값 userPW : " + user_pw + "<br>");
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
session.invalidate();
%>
<h4>-----세션을 삭제한 후-----</h4>
<%
if (request.isRequestedSessionIdValid() == true) {
out.print("세션이 유효합니다.");
} else {
out.println("세션이 유효하지 않습니다.");
}
%>
세션 유효 시간 설정
세션 유효 시간
- 세션을 유지하기 위한 세션의 일정 시간
- 웹 브라우저에 마지막 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션이 종료
- session 내장 객체의 setMaxInactiveInterval() 메소드를 사용
- 초 단위 설정
void setMaxInactiveInterval(int interval)
[사용 예]
session.setMaxInactiveInterval(60*60) // == 1시간
ArrayList
- 전통적인 배열 :
- 배열 생성시 배열의 크기가 고정.
- 데이터의 개수가 배열의 크기보다 많아지면 저장 불가능.
- 배열의 크기 크게 하면 공간 낭비.
- [ ] 사용하여 요소 접근
- ArrayList 클래스
- 저장되는 데이터의 개수에 따라 자동적으로 크기 변경.
- 즉, 요소가 가득 차게 되면 크기를 동적으로 증가.
- 삭제되면 크기가 줄어듬. 자동으로 변경하면서 사용 가능.
- ( )로 요소 접근
→ 실행 도중에 배열의 크기를 변경할 수 있는 동적 배열임
ArrayList <자료형> list = new ArrayList<자료형>();
// 요소들 리스트에 추가 : add() 메서드
list.add(“철수”);
// 리스트에서 요소 삭제 : remove() 메서드
list.remove(1); //첫번째 요소 삭제
// 리스트 요소 가져오기 : get() 메서드
String s =list.get(1); //첫번째 요소 반환
// 리스트의 각 요소 출
for(int i=0;i<list.size();i++) {
out.println(list.get(i) + "<br>");
}