본문 바로가기

Servlet

session//세션 삭제//id//방문회수//name 삭제

  getSession(false)
  - > session Object가 존재하면, 현재 HttpSession을 반환한다.
  존재하지 않으면, null을 반환한다
 
  getSession(true)
   -> session Object가 존재하면, 현재 HttpSession을 반환한다.
  존재하지 않으면, 새로 생성한다

 

 

첫화면

 

HelloServlet 클릭시

 

loginId Servlet클릭시 

 

name삭제 클릭 후 콘솔창 출력내용

 

session삭제 후 콘솔창 출력

 

 

 

html

<body>
<!-- Session : Server에 저장(사용자 Hardware, Tomcat) -->
<a href="hello">HelloServlet</a>
<br>
<a href="loginId">loginId Servlet</a>
</body>

 

 

HelloServlet.java

세션 Obj객체생성후 생성 확인.

리셋기한 설정, 방문횟수 설정 및 출력 

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=utf-8");
		PrintWriter pw = resp.getWriter();
		pw.println("<html>");
		pw.println("<head>");
		pw.println("<title>제목</title>");
		pw.println("</head>");
		pw.println("<body>");
		
		/* 
		 	getSession(false)
		 	session Object가 존재하면, 현재 HttpSession을 반환한다.
		 	존재하지 않으면, null을 반환한다
		 	
		 	getSession(true)
		 	session Object가 존재하면, 현재 HttpSession을 반환한다.
		 	존재하지 않으면, 새로 생성한다
		  */
		//(session 객체생성) seesion을 얻어올때는 항상 request를 통한다
		HttpSession session = req.getSession(false);
		
		if (session == null) {
			/* session은 Object도 저장 가능 (Cookie는 String만 가능) */
			session = req.getSession(true);
			//리셋 기한정하기
			//일반적으로 2시간정도로 지정 (365*24*60*60은 1년)
			session.setMaxInactiveInterval(30);//30초로 지정
			session.setAttribute("visited", "1");
			pw.println("<p>첫번째 방문입니다</p>");
		}else {
			//session.getAttribute("visited")는 return값이 obj라서 cast변환 필수
			String visited = (String) session.getAttribute("visited");
			int count = Integer.parseInt(visited);
			
			count++;
			
			pw.println("<p>방문회수는"+count+"번째 방문입니다</p>");
			session.setAttribute("visited", count+"");
		}
		
		pw.println("</body>");
		pw.println("</html>");		
		pw.close();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
}

 

 

 

 

LoginIdServlet.java

session을 등록하고 id와 name을 추가함

아래 링크 2개 생성

@WebServlet("/loginId")
public class LoginIdServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=utf-8");
		PrintWriter pw = resp.getWriter();
		pw.println("<html>");
		pw.println("<head>");
		pw.println("<title>제목</title>");
		pw.println("</head>");
		pw.println("<body>");
		
		pw.println("<h3>login id session</h3>");
		HttpSession session = null;
		if (session == null) {
			pw.println("<p>session을 등록합니다</p>");
			session = req.getSession(true);
			
			session.setAttribute("id", "만두");
			session.setAttribute("name", "홍길동");
		}
		String id = (String) session.getAttribute("id");
		String name = (String) session.getAttribute("name");
		session.setAttribute("visited", "1");

		
		pw.println("<p>id : " +id +"</p>");
		pw.println("<p>id : " +name +"</p>");

		//session의 name들을 다 꺼내라
		Enumeration<String> enum_session = session.getAttributeNames();
		while(enum_session.hasMoreElements()) {
			String key = enum_session.nextElement();
			String value = (String) session.getAttribute(key);
			
			pw.println("<p>"+key+":"+value+"</p>");
		}
		//cookie 삭제 -> session name지우기
		pw.println("<a href=delObj>name 삭제</a>");
		pw.println("<a href=sessionDel>session 삭제</a>");

		pw.println("</body>");
		pw.println("</html>");		
		pw.close();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
}

 

 

 

DeleteObject.java

session.removeAttribute("name");로 name만 지우고

session.getAttributeNames();로 세션 모두 꺼내어 나머지 출력

@WebServlet("/delObj")
public class DeleteObject extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		HttpSession session = req.getSession();
		
		//session은 살아있고 name만 지움
		session.removeAttribute("name");
		
		//session의 name들을 다 꺼내라
		Enumeration<String> enum_session = session.getAttributeNames();
		while(enum_session.hasMoreElements()) {
			String key = enum_session.nextElement();
			String value = (String) session.getAttribute(key);
			
			System.out.println(key+" : "+value);
		}
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
}

 

 

 

 

 

SessionDelete.java

session.invalidate();로 세션 삭제(해방)

@WebServlet("/sessionDel")
public class SessionDelete extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		HttpSession session = req.getSession();
		
		//delete(삭제), release(해방) : session도 release개념으로 빌려왔던것 돌려주는 개념
		session.invalidate();//세션 해방
		if (req.getSession(false)==null) {//session삭제 완료시
			System.out.println("session이 비어있습니다");
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
}