HttpSession을 이용한 Session 관리
☞ client의 상태값을 서버측에 저장하여 Session 관리
☞ javax.servlet.http.HttpSession 객체를 이용하여 관리
◎ 클라이언트의 상태값은 Attribute로 관리됨
☞ 장점
◎ 관리할 수 있는 상태값(클라이언트 데이터)의 종류나 크기나 개수의 제한이 없다.
◎ 서버에 저장되므로 cookie에 비해 보안상 유리
☞ 단점
◎ 서버에 부담
HttpSession 객체 생성
☞ HttpServeltRequest객체.getSession()
◎ 기존 Session이 있으면 기존 Session객체를, 없으면 새로 생성하여 리턴
- ex) 주로 로그인 페이지에서 사용
☞ HttpServletRequest객체.getSession(false) - 중요도 낮음
◎ 기존 Session이 있으면 기존 Session객체를, 없으면 null을 리턴
- ex) 로그인을 한 유저만 사용할 수 있음
하나의 웹브라우저에서 servlet과 JSP를 사용하는 경우에는 두 가지의 메소드를 구분하는 것이 의미가 없다.
☞ HttpSession 객체의 주요 메소드
◎ SetAttribute(String name, Object value);
◎ getAttribute(String name) : Object value
◎ removeAttribute(String name)
◎ getAttributeNames() : Enumeration
◎ invalidate() : session객체를 소멸 시킨다. - 로그아웃하는 경우에 필요
◎ setMaxInactiveInterval(int 초) : 클라이언트가 마지막 요청을 한 뒤 인수로 받은 시간 만큼 지나도 요청이 안들어 오면 session을 소멸 시킨다.
- 마지막 요청을 한지 int 초만큼 시간이 지나면 자동으로 로그아웃 된다.
◎ getId() : String - jSessionId 값 return

WriteServlet.java
☞ package : servlet.session
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class WriteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); //한글을 입력받기 위해 사용하는 메소드
String text = request.getParameter("text");
//text를 session scope에 설정
HttpSession session = request.getSession();
ArrayList list = (ArrayList)session.getAttribute("list");
if(list ==null) {
list = new ArrayList();
session.setAttribute("list", list);
}
list.add(text);
response.sendRedirect("/myweb/session/write_form.html");
}
}
ShowServlet.java
☞ package : servelet.session
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Session scope에 지금까지 저장된 클라이언트가 보낸 text들을 출력
HttpSession session = request.getSession();
String url = null;
ArrayList list = (ArrayList)session.getAttribute("list"); //ArrayList에 담겨있는 데이터를 가져온다.
if(list ==null) { //remove한 후 출력 내용이 없을 경우 입력 페이지로 이동
response.sendRedirect("/myweb/session/write_form.html");
return;
}
//출력
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
String jSessionID = session.getId();
out.println("JSESSIONID : " + jSessionID + "<br>");
out.println("지금 까지 입력된 값<br>");
for(int i=0; i<list.size(); i++) {
out.println((i+1) + " : "+ list.get(i) + "<br>");
}
out.println("<br><a href='/myweb/session_remove'>모든 입력글 삭제</a>");
out.println("</body></html>");
}
}
RemoveServlet.java
☞ package : servlet.session
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class RemoveServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Session scope의 list를 삭제
HttpSession session = request.getSession();
session.removeAttribute("list");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<a href='/myweb/session_show'>입력한 글 내용보기</a>");
out.println("<br><a href='/myweb/session/write_form.html'>입력폼</a>");
out.println("</body></html>");
}
}
write_form.html
☞ folder : session
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/myweb/session_write" method="post">
<input type="text" name ="text" size="50">
<input type="submit" value="글전송">
</form>
</body>
</html>