[TIL] 240307

Geehyun(장지현)·2024년 3월 8일

TIL

목록 보기
44/70
post-thumbnail

TODAY

  • 성낙현의 JSP 자바 웹 프로그래밍

    • chap04 쿠키
    - 쿠키
    쿠키란, 클라이언트의 상태 정보등을 키(Key), 값(value) 형태로 저장하는 기술입니다.
    쿠키로 저장할 값을 클라이언트 단에서 저장하다가, 다음 요청 시 요청과 함께 서버로 전송합니다.
    
    - 쿠키의 제약조건
    1) 3000개까지 생성 가능
    2) 쿠키 하나의 최대 크기는 4096바이트 입니다.
    3) 하나의 호스트나 도메인에서 최대 50개까지 만들 수 있습니다.
    4) 쿠키 키(Key), 값(value) 은 String형으로 저장할 수 있으며, 몇몇의 특수문자는 제한됩니다. 
       ( ) < > @ , ; : \ " / [ ] ? = { }
       
    - 쿠키 굽는 방법
      1) 쿠키 생성 : 쿠키를 생성할 때는 Cookie 생성자를 이용해서 생성합니다.
         Cookie 변수명 = new Cookie(String Key, String value);
      2) 도메인 설정 : 쿠키에 적용할 도메인을 설정합니다. 
         변수명.setDomain(String domain);
      3) 경로 설정 : 쿠키가 적용될 경로로 지정합니다.
         변수명.setPath(String path);
      4) 수명 설정 : 해당 쿠키가 유지될 기간을 초단위로 작성합니다. 미작성 시 0으로 설정되면 만들어지자마자 사라집니다.
         변수명.setMaxAge(int age);
      5) 열심히 만든 쿠키 추가하기 : 위 순서대로 만든 쿠키를 response 객체를 이용해서 응답헤더에 쿠키를 추가합니다.
         
    - 쿠키 값 바꾸기
      변수명.setValue(String value);
      
    - 쿠키 정보 읽기
      1) 쿠키 정보 갖고오기 : request 객체를 이용해서 생성되어있는 쿠키 정보를 배열로 가져옵니다.
         Cookie[] 변수명 = request.getCookie();
      2) 쿠키 값 가져오기 : 위 생성한 배열에서 getName, getValue 으로 쿠키명과 값을 갖고올 수 있습니다.
         for(Cookie 변수명1 : 쿠키담은 변수명) {
         	String 쿠키이름 담을 변수명 = 변수명1.getName();
          String 쿠키값 담을 변수명 = 변수명1.getValue();
         }
         위 for문을 이용해서 if문으로 조건을 걸어 원하는 쿠키만 갖고오는 식으로 활용할 수 있습니다.
      3) 쿠키의 다양한 정보 갖고오기
         쿠키담은변수.getDomain();    => 도메인 정보
         쿠키담은변수.getPath();      => 경로 정보
         쿠키담은변수.getMaxAge();    => 쿠키 수명
    • 실습 1 : 쿠키 만들고 바로 조회해보기
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h2>쿠키 사용하기</h2>
    <%!
    // 쿠키 값 저장하는 메서드로 사용하는 법(예시)
    /*
    public void setCookie(String name, String val, String path, int expire_date, String domain, HttpServletRequest req, HttpServletResponse reps) {
    		Cookie cookie = new Cookie(name, val);
    		cookie.setPath(!(path.isEmpty()) ? path : req.getContextPath());   
    		cookie.setMaxAge(expire_date > 0 ? expire_date : 0);
    		cookie.setDomain(!(domain.isEmpty())? domain : "");
    		reps.addCookie(cookie);
    }
    */
    %>
    <h3>1. 쿠기 저장</h3>
    <%
    Cookie cookie = new Cookie("myCookie", "쿠키값1");
    cookie.setPath(request.getContextPath());   // 컨텍스트 패스에 값을 안주면 루트가 됨
    cookie.setMaxAge(3600);
    response.addCookie(cookie);
    // 위 작성한 메서드 활용해보기 (예시)
    //setCookie("myCookie", "쿠키값1", "/", 3600, "", request, response);
    %>
    
    <h3>2. 쿠기 조회</h3>
    <%
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
    		for(Cookie c : cookies) {
    			String cookieName = c.getName();
    			String cookieVal = c.getValue();
    			out.print(String.format("%s : %s<br>", cookieName, cookieVal));
    		}
    }
    
    %>
    
    <a href="cookie2.jsp">쿠키 조회하기</a>
    </body>
    </html>
    • 실습 2 : 리스트 만들어서 파라미터, 리퍼러 값 저장 후 3건 누적해서 최신순으로 보여주기
    // 리스트 페이지
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    		<ul>
    			<%
    				for(int i = 1; i < 11; i++) {
    					out.print("<li><a href='click.jsp?params=" + i + "'>리스트" + i + "</a></li>");
    				}
    			%>
    		</ul>
    </body>
    </html>
    
    // 쿠키 굽는 페이지
    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true" %>
    <%@ page import="chap04.CookieUtil"%>
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%	
    			// 뉴 버전
    			String param;
    			String referer;
    			// 파라미터 값 읽어서 가져오기
    			String params = request.getParameter("params");
    			String referers = request.getHeader("referer");
    			param = params;
    			referer = referers;
    			// 이전 쿠키 값 갖고와서 넣기
    			String paramC = CookieUtil.getCookieValue(request, "paramList");
    			String refererC = CookieUtil.getCookieValue(request, "referlerList");
    			if(paramC != null && paramC != "" && paramC != "null") {
    				if(paramC.indexOf("~") > 0) {
    					String[] arrParam = paramC.split("~");
    					if(arrParam.length < 3){
    						param = param + "~" + paramC;
    					}  else {
    						param = param + "~" + paramC.substring(0, paramC.lastIndexOf("~"));
    					}
    				} else {
    					param = param + "~" + paramC;
    				}
    			}
    			if(refererC != null && refererC != "" && refererC != "null") {
    				if(refererC.indexOf("~") > 0) {
    					String[] arrReferer = refererC.split("~");
    					if(arrReferer.length < 3){
    						referer = referer + "~" + refererC;
    					}  else {
    						referer = referer + "~" + refererC.substring(0, refererC.lastIndexOf("~"));
    					}
    				} else {
    					referer = referer + "~" + refererC;
    				}
    			}
    			// 쿠키 꾸워
    			CookieUtil.setCookie(response, "paramList", param, 3600, "/");
    			CookieUtil.setCookie(response, "referlerList", referer, 3600, "/");
    		
    			/*
    			// 예전 버전
    			List<String> paramList = new ArrayList<String>();
    			List<String> referlerList = new ArrayList<String>(); 
    		
    			// 이전 쿠기 값 갖고와서 리스트로 전환 후 넣기
    			String paramC = CookieUtil.getCookieValue(request, "paramList");
    			if(paramC != null && paramC != "" && paramC != "null") {
    				List<String> orgParam = Arrays.asList((paramC.replace("|", " ")).split(" "));
    				for (String e : orgParam) {
    					paramList.add(e);
    				}
    			} 
    		
    			String refererC = CookieUtil.getCookieValue(request, "referlerList");
    			if(refererC != null && refererC != "" && refererC != "null") {
    				List<String> orgrefer = Arrays.asList((refererC.replace("|", " ")).split(" "));
    				for (String e : orgrefer) {
    					referlerList.add(e);
    				}
    			} 
    		
    		
    			// list 페이지에서 파라미터 값 받아서 리스트에 넣어주기
    			String params = request.getParameter("params");
    		
    			if ((paramList.size()) < 3) {
    				paramList.add(params);
    			} else {
    				paramList.remove(0);
    				paramList.add(params);
    			}
    		
    			// 최종 리스트를 String으로 전환
    			String realParams = (((paramList.toString()).replace("[", "")).replace("]","")).replace(", ", "|");
    	
    			String referer = request.getHeader("referer");
    		
    			if ((referlerList.size()) < 3) {
    				referlerList.add(referer);
    			} else {
    				referlerList.remove(0);
    				referlerList.add(referer);
    			}
    		
    			String realRefere = (((referlerList.toString()).replace("[", "")).replace("]","")).replace(", ", "|");
    		
    			// 쿠키 꾸워
    			CookieUtil.setCookie(response, "paramList", realParams, 3600, "/");
    			CookieUtil.setCookie(response, "referlerList", realRefere, 3600, "/");
    			*/
    		
    		
    			// 넘겨
    			response.sendRedirect("show.jsp");
    		%>
    <h2><%= param %></h2>
    <h2><%= referer %></h2>
    <h2><%= params %></h2>
    <h2><%= referers %></h2>
    <h2><%= paramC %></h2>
    <h2><%= refererC %></h2>
    <h2><% if(paramC.indexOf("~") > 0) {out.print(Arrays.toString(paramC.split("~")));} else {out.print(paramC);} %></h2>
    <h2><% if(refererC.indexOf("~") > 0) {out.print(Arrays.toString(refererC.split("~")));} else {out.print(refererC);} %></h2>
    </body>
    </html>
    
    // 결과 페이지
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true" %>
    <%@ page import="chap04.CookieUtil"%>
    <%@page import="java.util.*"%>
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    		<%
    			String param = CookieUtil.getCookieValue(request, "paramList");
    			List<String> paramList = Arrays.asList((param.replace("~", " ")).split(" "));
    			String referer = CookieUtil.getCookieValue(request, "referlerList");
    			List<String> refererList =  Arrays.asList((referer.replace("~", " ")).split(" "));
    		%>
    		<ul>
    			<%
    				for(int i = 0; i < paramList.size(); i++) {
    					out.print("<li>" + (i+1) + "번째 param : " + paramList.get(i) + " url : " + refererList.get(i));
    				}
    			%>
    		</ul>
    		<a href="list.jsp"><button>돌아가기</button></a>
    </body>
    </html>

Review

  • 쿠키에 값을 저장해서 레이어 팝업 "오늘하루 안보기", "자동 로그인" 의 기능등을 구현할 수 있었다.
  • 아직 크게 응용은 못해봤지만, 점점 웹개발에 가까워지고 있지 않나 생각인든다.
  • JSP부분은 일단 어떻게든 사용은 해보고있는데, 문법 쓸수있는 객체, 메서드 등에 익숙해질려면 시간이 걸릴 것 같다.

TO DO

  • Java 최종 정리 (~3/9일까지로 연장)
  • Maria DB 최종 정리
    정리하고 있는 부분 : 361p / 진도 : 완료! ㅎㅎ
  • 우선순위
    1) Java
    2) JSP
    3) MariaDB
profile
블로그 이전 했습니다. 아래 블로그 아이콘(🏠) 눌러서 놀러오세요

0개의 댓글