ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [WEB : Servlet] Cookie 쿠키(생성, 읽기, 제거)
    비전공자 공부일기/:: WEB & Front-End 2019. 7. 2. 17:30

    2019. 07. 02 필기

     

    자바스크립트 쿠키는 따로 있음. 자바스크립트 쿠키는 권한이 있는, 예를들면 로그인 상태의 사람만 볼 수 있는 응답화면을 제공한다. 다음 예시의 쿠키는 이런 권한이 없어도 볼 수 있는 응답화면을 제공한다.

     

    • 쿠키 - 클라이언트에 저장되는 정보 / 간단한 데이터를 String 으로 저장
    • 세션 - 서버에 저장되는 정보 / 보안을 요하는 필요한 데이터를 객체로 저장

     

    * 웹 페이지의 브라우저에서 마우스 오른쪽을 누르고 '(페이지) 검사'를 누르면 검사창이 뜨는데, 검사창 상단의 Application 탭을 누르면 Cookie를 확인할 수 있다.

     

    쿠키를 생성하여 응답문서에 쿠키를 저장하여 클라이언트에게 전달하는 서블릿

    @WebServlet("/read.itwill")
    public class CookieReadServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
        
    	
    	
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    		response.setContentType("text/html;charset=UTF-8");
    		PrintWriter out=response.getWriter();
    		
    		//Http : 클라이언트가 제공하는 모!든! 쿠키(Cookie 인스턴스 배열)를 반환하는 메소드
    		// => 클라이언트가 제공한 쿠키가 없는 경우 null 반환
    		Cookie[] cookies=request.getCookies();
    		
    		out.println("<!DOCTYPE html>");
    		out.println("<html>");
    		out.println("<head>");
    		out.println("<title>Servlet</title>");
    		out.println("<style>");
    		out.println("p {color: #FF00CC; }");
    		out.println("</style>");
    		out.println("</head>");
    		out.println("<body>");
    		out.println("<h1>클라이언트에 쿠키 전달</h1>");
    		out.println("<hr>");
    		out.println("<p>전달된 쿠키는 클라이언트의 가슴 속에 남아있습니다.</p>");
    		out.println("<hr>");
    		if(cookies==null) {
    			out.println("<p>너는 쿠키가 없구나~</p>");
    		} else {
    			String id="";
    			String count="";
    			
    			for(Cookie cookie:cookies) {
    				//Cookie.getName() : 쿠키명을 반환하는 메소드
    				if(cookie.getName().contentEquals("id")) {
    					//Cookie.getValue() : 쿠키값을 반환하는 메소드
    					id=cookie.getValue();
    				} else if(cookie.getName().contentEquals("count")) {
    					count=cookie.getValue();
    				}
    				
    				if (!id.equals("")) {
    					out.println("<p>아이디 ="+id+"</p>");
    				}
    				
    				if(!id.equals("")) {
    					int cnt=Integer.parseInt(count)+1;
    					out.println("<p>요청횟수 ="+cnt+"</p>");
    					
    					Cookie countCookie = new Cookie("count", cnt+"");
    					countCookie.setMaxAge(24*60*60);
    					response.addCookie(countCookie);
    				}
    			}
    		}
    		out.println("<p><a href='create.itwill'>쿠키 전달</a></p>");
    		out.println("<p><a href='remove.itwill'>쿠키 제거</a></p>");
    		out.println("</body>");
    		out.println("</html>");
    	}
    
    }
    

     

    클라이언트에 저장되어 전달된 쿠키값을 응답문서로 생성하여 전달하는 서블릿
    => 클라이언트에 서버 문서를 요청할 경우 서버이름으로 저장된 모든 쿠키를 무조건 리퀘스트 메세지로 전달

    @WebServlet("/read.itwill")
    public class CookieReadServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
        	
    	
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    		response.setContentType("text/html;charset=UTF-8");
    		PrintWriter out=response.getWriter();
    		
    		//Http : 클라이언트가 제공하는 모!든! 쿠키(Cookie 인스턴스 배열)를 반환하는 메소드
    		// => 클라이언트가 제공한 쿠키가 없는 경우 null 반환
    		Cookie[] cookies=request.getCookies();
    		
    		out.println("<!DOCTYPE html>");
    		out.println("<html>");
    		out.println("<head>");
    		out.println("<title>Servlet</title>");
    		out.println("<style>");
    		out.println("p {color: #FF00CC; }");
    		out.println("</style>");
    		out.println("</head>");
    		out.println("<body>");
    		out.println("<h1>클라이언트에 쿠키 전달</h1>");
    		out.println("<hr>");
    		out.println("<p>전달된 쿠키는 클라이언트의 가슴 속에 남아있습니다.</p>");
    		out.println("<hr>");
    		if(cookies==null) {
    			out.println("<p>너는 쿠키가 없구나~</p>");
    		} else {
    			String id="";
    			String count="";
    			
    			for(Cookie cookie:cookies) {
    				//Cookie.getName() : 쿠키명을 반환하는 메소드
    				if(cookie.getName().contentEquals("id")) {
    					//Cookie.getValue() : 쿠키값을 반환하는 메소드
    					id=cookie.getValue();
    				} else if(cookie.getName().contentEquals("count")) {
    					count=cookie.getValue();
    				}
    				
    				if (!id.equals("")) {
    					out.println("<p>아이디 ="+id+"</p>");
    				}
    				
    				if(!id.equals("")) {
    					int cnt=Integer.parseInt(count)+1;
    					out.println("<p>요청횟수 ="+cnt+"</p>");
    					
    					Cookie countCookie = new Cookie("count", cnt+"");
    					countCookie.setMaxAge(24*60*60);
    					response.addCookie(countCookie);
    				}
    			}
    		}
    		out.println("<p><a href='create.itwill'>쿠키 전달</a></p>");
    		out.println("<p><a href='remove.itwill'>쿠키 제거</a></p>");
    		out.println("</body>");
    		out.println("</html>");
    	}
    
    }
    

     

     

    클라이언트에 저장된 쿠키를 제거하고 응답문서로 전달하는 서블릿

    @WebServlet("/remove.itwill")
    public class CookieRemoveServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	
    	
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    		response.setContentType("text/html;charset=UTF-8");
    		PrintWriter out=response.getWriter();
    		
    		//클라이언트에서 제공된 모든 쿠키를 반환받아 저장
    		Cookie[] cookies=request.getCookies();
    		
    		if(cookies!=null) {
    			for(Cookie cookie:cookies) {
    				//클라이언트에서 제공된 모든 Cookie 인스턴스의 지속시간을 0으로 변경
    				cookie.setMaxAge(0);
    				//지속시간이 변경된 Cookie 인스턴스를 클라이언트에게 전달
    				// => Cookie 인스턴스를 전달받은 클라이언트는 지속시간이 0으로 셋팅되어 잇으므로 쿠키 소멸
    				response.addCookie(cookie);
    			}
    		}
    			
    			out.println("<!DOCTYPE html>");
    			out.println("<html>");
    			out.println("<head>");
    			out.println("<title>Servlet</title>");
    			out.println("<style>");
    			out.println("p {color: #FF00CC; }");
    			out.println("</style>");
    			out.println("</head>");
    			out.println("<body>");
    			out.println("<h1>클라이언트에 쿠키 전달</h1>");
    			out.println("<hr>");
    			out.println("<p>쿠키가 사망하였습니다.</p>");
    			out.println("<hr>");
    			out.println("</body>");
    			out.println("</html>");	
    	}
    
    }
    

    댓글

coding wanee