반응형
- 세션의 특징
- 정보가 서버의 메모리에 저장됨
- 브라우저의 세션 연동은 세션 쿠키를 이용함
- 쿠키보다 보안에 유리함
- 서버에 부하를 줄 수 있음
- 브라우저(사용자)당 한 개의 세션(세션 id)이 생성됨
- 세션은 유효 시간을 가짐(기본 유효 시간은 30분임)
- 로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에 주로 사용됨
- 세션의 실행 과정
- 브라우저로 사이트에 접속함
- 서버는 접속한 브라우저에 대한 세션 객체를 생성함
- 서버는 생성된 세션 id를 클라이언트 브라우저에 응답함
- 브라우저는 서버로부터 받은 세션 id를 브라우저가 사용하는 메모리의 세션 쿠키에 저장함(쿠키 이름은 jsessionId)
- 브라우저가 재접속하면 브라우저는 세션 쿠키에 저장된 세션 id를 서버에 전달함
- 서버는 전송된 세션 id를 이용해 해당 세션에 접근하여 작업을 수행함
- 세션 API의 특징과 기능
- getSession() : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성함
- getSession(true) : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성함
- getSession(false) : 기존의 세션 객체가 존재하면 반환하고, 없으면 null을 반환함
반환 타입 | 메서드 | 설명 |
Object | getAttribute(String name) | 속성 이름이 name인 속성값을 Object 타입으로 반환함. 해당되는 속성 이름이 없을 경우 null 값을 반환함 |
Enumeration | getAttributeNames() | 세션 속성 이름들을 Enumeration 객체 타입으로 반환함 |
long | getCreationTime() | 1970년 1월 1일 0시 0초를 기준으로 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 반환함 |
String | getId() | 세션에 할당된 고유 식별자를 String 타입으로 반환함 |
int | getMaxInactiveInterval() | 현재 생성된 세션을 유지하기 위해 설정된 세션 유지 시간을 int 타입으로 반환함 |
void | invalidate() | 현재 생성된 세션을 소멸함 |
boolean | isNew() | 최초로 생성된 세션인지 기존에 생성되어 있었던 세션인지 판별 |
void | removeAttribute(String name) | 세션 속성 이름이 name인 속성을 제거함 |
void | setAttribute(String name, Object value) | 세션 속성 이름이 name인 속성에 속성 값으로 value를 할당함 |
void | setMaxInactiveInterval(int interval) | 세션을 유지하기 위한 세션 유지 시간을 초 단위로 설정함 |
- 서블릿에서 세션 API 이용하기
- SessionTest 서블릿 생성
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sess2")
public class SessionTest2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(); // 세션 생성
out.print("세션 아이디 : " + session.getId() + "<br>");
out.print("최초 세션 생성 시간: " + new Date(session.getCreationTime()) + "<br>");
out.print("최근 세션 접근 시간: " + new Date(session.getLastAccessedTime()) + "<br>");
session.setMaxInactiveInterval(60); // 세션 유효시간 설정 : 단위 초, 기본값 1800초
out.print("유효 시간: " + session.getMaxInactiveInterval() + "<br>");
if(session.isNew()) {
out.print("세션 생성");
}
}
}
- 세션 삭제
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sess3")
public class SessionTest3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
if(session.isNew()) {
out.print("세션 생성");
}
session.invalidate(); // 세션 삭제
}
}
- 세션을 이용한 로그인 정보 바인딩
- SessionTest4 서블릿 생성
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sess4")
public class SessionTest4 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(); // 세션 생성
String id = request.getParameter("user_id");
String pw = request.getParameter("user_pw");
if(session.isNew()) { // 최초 요청시
if(id != null && !id.trim().equals("")) {
session.setAttribute("user_id", id);
out.print("<a href='sess4'>로그인 상태 확인</a>");
} else {
out.print("<a href='login2.html'>다시로그인하기</a>");
session.invalidate();
}
} else { // 재요청 (get요청)
id = (String) session.getAttribute("user_id");
if(id != null) {
out.print("안녕하세요 " + id + "님");
} else {
out.print("<a href='login2.html'>다시로그인하기</a>");
session.invalidate();
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- SessionTest5 서블릿 생성
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sess5")
public class SessionTest5 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String userId = (String) session.getAttribute("user_id");
out.print("세션객체이 바인딩 된 데이터 : " + userId);
}
}
- login2.html 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="sess4" name="frmLogin" method="post">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</form>
</body>
</html>
- lombok.jar 다운 및 설치
lombok.jar 다운받기
( https://projectlombok.org/download )
알집으로 보인다면 명령 프롬프트에서 jar 파일이 있는 경로로 간다
그리고 다음 명령어를 입력
java -jar lombok.jar
can't find IDE 뜨면 ok 누르고
IDEs 부분에 이클립스가 안잡히면 Specify location... 눌러서 eclipse.exe 추가
그리고 Install / Update 누르고
마지막 Quit Installer 누르면 설치 완료.
WEB-INF \ lib 폴더 안에 lombok.jar 파일 넣고 빌드패스 지정
- lombok 사용하기
package lombokTest;
import lombok.Data;
@Data
public class MemberDTO {
private String id;
private String name;
private String password;
private String email;
public static void main(String[] args) {
MemberDTO dto = new MemberDTO();
dto.setId("bboggu");
dto.setName("뽀꾸");
dto.setPassword("1234");
dto.setEmail("bbo@ghg.com");
System.out.println(dto);
}
}
@Data 를 적어주면
필드 변수를 적어 넣고 ctrl + o 를 눌러서 만들어 졌는지 확인해보자
Getter, Setter 기타등등 다 만들어 져있음.
혹시나 안뜬다면 이클립스를 다시 시작해보기
반응형
'학습 > JSP' 카테고리의 다른 글
19. 여러 가지 서블릿 관련 Listener API (0) | 2022.11.15 |
---|---|
16. 종합(회원목록, 추가, 삭제, 로그인) (0) | 2022.11.14 |
14. 쿠키 (0) | 2022.11.09 |
13. <hidden>태그와 URL Rewriting 이용해 웹 페이지 연동 (0) | 2022.11.09 |
12. ServletConfig (0) | 2022.11.09 |
댓글