[ITWILL : JSP]쿠키(Cookie)

ITWILL학원 : 17강 JSP기초 BY 정규태강사

  • 클라이언트쪽에서 저장되어 관리되는 정보.

    • 이름, 값, 유효기간 도메인(주소), 경로 … 등등 포함하고 있다.
  • ㅋ쿠기의 이름은 알파벳, 숫자조합으로 생성됨

    • 공백, 괄호, 등호, 콤마, 세미콜론 등등은 인코딩작업 후 쿠키로 사용할 수 있다.
  • 브라우저가 종료되어도 상관없이 지정된 생존기간까지 사용가능.(클라이언트의 HDD하드디스크에 저장되기때문에 브라우저 종료되어도 계속 데이터를 유지할수있다.)

  • 쿠키생성하면서 값을 입력하였다고 쿠키가 메모리 또는 하드디스크에 저장된 것이 아니다. 쿠키를 생성하였으면 생성한 쿠키를 클라이언트로 전송해줘야한다.

  • 단점 : 클라이언트에서 관리되기 때문에 보안에 취약(하드디스크에 있는 쿠키파일 수정할수있기때문)

  • 반대개념은 세션(Session) : 서버쪽에서 저장되어 관리되는 정보, 서버종료되면 사용불가

https://tansfil.tistory.com/58

1-1. 왜 쿠키가 필요할까?

  • 서버는 클라이언트의 1건의 요청에 응답 후 연결을 끊는다.
    WHY?
    서버가 요청오는 모든 클라이언트와 계속 연결이 되어있으면 서버쪽에 부담이 되기때문에!
  • 이때 요청에 응답하면서 쿠키를 함께 보낸다.
    WHY?
    아 옛날에 그 클라이언트구나?! 하면서
    클라이언트를 구분해서 인지할수있고 빠른 응답이 가능하기때문에!

1-2. 쿠키사용방법

  1. 쿠키 생성하기
  • 서버
    1. 서버는 쿠키 객체를 생성
    2. 서버는 쿠키에 필요한 설정을 지정(유효기간, 설명, 도메인, … 등등)
    3. 서버가 생성된 쿠키를 HDD에 저장 후 클라이언트에 쿠키를 전달
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<h1>쿠키테스트(서버 역할)</h1>
<%
//1.쿠키객체생성 : 기본생성자이면 에러가 뜨니 기본값을 직접 입력해주거나 꼭 파라미터를 작성할 것
//아래처럼 직접 입력시 공백있으면 에러남 ex)"Cookie Val!" =>에러발생
Cookie ck = new Cookie("cName", "CookieValue!");

//2.쿠키에 필요한 설정 : 시간설정(사용할 수 있는 시간을 지정)
ck.setMaxAge(600); //초단위, 600초 = 10분(60초*10)

//3.쿠키정보를 저장해서 응답
response.addCookie(ck);
%>

<script type="text/javascript">
alert("쿠키값생성 후 저장됨");
location.href="cookieTest.jsp";
</script>
  1. 쿠키 사용하기
  • 브라우저(클라이언트)
    1. 브라우저에서 요청시 쿠키정보를 가져옴
    2. 쿠키값은 (이름, 값)쌍으로 만들어진 배열.
    3. 쿠키값의 이름을 사용해서 쿠키 객체를 사용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<h1>쿠키테스트(클라이언트 역할)</h1>
<%
//1. 쿠키정보가져오기
Cookie[] cks = request.getCookies();
String cName="";
String cValue="";

if(cks != null){
for(int i=0; i < cks.length; i++){
if(cks[i].getName().equals("cName")){
//2. 저장된 쿠키 이름을 가져온다
cName = cks[i].getName();
//3. 쿠키값을 가져온다
cValue = cks[i].getValue();
}
}
}
%>

<h2> 쿠키이름 : <%=cName %> </h2>
<h2> 쿠키값 : <%=cValue %> </h2>
<input type="button" value="쿠키값 저장" onclick="location.href='cookieSet.jsp'">
<input type="button" value="쿠키값 삭제" onclick="location.href='cookieDel.jsp'">
  1. 특정 쿠키 삭제하기
  • 쿠키값이 있을때만 삭제진행
  • 쿠키 배열의 처음부터 끝까지 비교하여 쿠키이름이 “cName”인 대상을 찾아서 삭제 -> 변경된 쿠키 정보를 클라이언트에 전달
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%
//1.쿠키 가져오기 : 지울 쿠키가 있는지부터 체크
Cookie[] cookies = request.getCookies();
String cName="";
String cValue="";

//2. 쿠키값이 있을때만 삭제동작 진행
if(cookies != null){
for(int i=0; i < cookies.length; i++){
// 3. 쿠키이름이 "name"인 대상을 찾아서 삭제 = 쿠키의 유효시간을 0으로 설정하여 만료시킨다
if(cookies[i].getName().equals("cName")){
cookies[i].setMaxAge(0);
// 4. 변경된 쿠기 정보를 다시 클라이언트에 전달
response.addCookie(cookies[i]);
}
}
}
%>
<script type="text/javascript">
alert("쿠키값 삭제 성공")
location.href="cookieTest.jsp"
</script>
  1. 전체 쿠키 삭제
  • 쿠키값이 있을때만 삭제진행
  • 쿠키 배열의 전체를 찾아서 삭제 -> 변경된 쿠키 정보를 클라이언트에 전달
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%
//1.쿠키 가져오기 : 지울 쿠키가 있는지부터 체크
Cookie[] cookies = request.getCookies();
String cName="";
String cValue="";

//2. 쿠키값이 있을때만 삭제동작 진행
if(cookies != null){
for(int i=0; i < cookies.length; i++){
// 3. 쿠키 전체의 유효시간을 0으로 설정하여 만료시킨다
cookies[i].setMaxAge(0);
// 4. 변경된 쿠기 정보를 다시 클라이언트에 전달
response.addCookie(cookies[i]);
}
}
}
%>
<script type="text/javascript">
alert("쿠키값 삭제 성공")
location.href="cookieTest.jsp"
</script>

1-3. 크롬 개발자도구로 쿠키 확인하기

쿠키를 확인하는 방법은

  1. 크롬 개발자도구를 오픈
  2. NETWORK 탭에서 NAME카테고리에서 내가 만든 jsp파일클릭
  3. Cookies 탭클릭
  4. 세션아이디(jsessionid)위에 쿠기가 생성된 것을 확인할 수 있다.

1-4. 쿠키예시

  1. 쿠키폼페이지 생성하기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <h1>쿠키form</h1>

    <!-- 폼태그 언어값에 따라서 달라지는 출력값 구현 -->
    <%
    //1.쿠키정보가져오기

    Cookie[] ck = request.getCookies();
    String lang = "";

    if(ck != null){
    for(int i=0; i<ck.length; i++){
    if(ck[i].getName().equals("lang")){
    lang = ck[i].getValue();
    }
    }
    }

    %>

    <form action="cookiePro.jsp" method="post" name="fr">
    <input type="radio" name="language" value="kor"
    <% if(lang.equals("kor")){ %>
    checked
    <%} %>
    >한국어
    <input type="radio" name="language" value="eng"
    <% if(lang.equals("eng")){ %>
    checked
    <%} %>
    >영어(미국)
    <input type="submit" value="언어설정">
    </form>

    <%
    if(lang.equals("kor")){
    out.print("안녕하세요, 쿠키연습!");
    }else if(lang.equals("eng")){
    out.print("Hello, Cookie Test!");
    }else{ //설정값없을때
    out.print("");
    }
    %>
  2. 쿠키프로페이지 생성하기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <h1>쿠키pro</h1>

    <%
    System.out.println("라디오버튼 결과값 : "+ request.getParameter("language"));

    //1.쿠키객체생성 : 기본생성자이면 에러가 뜨니 기본값을 직접 입력해주거나 꼭 파라미터를 작성할 것 , 직접입력시 공백있으면에러남
    Cookie ck = new Cookie("lang", request.getParameter("language"));
    //두번째방법 : 첫번째 방법도 쓸수있어야한다(짧은 코드)
    //String lang = request.getParameter("language");
    //Cookie ck = new Cookie("lang", lang);

    //2.쿠키에 필요한 설정 : 시간설정(사용할 수 있는 시간을 지정)
    ck.setMaxAge(120); //초단위, 600초 = 10분(60초*10)
    //3.쿠키정보를 저장해서 응답
    response.addCookie(ck);
    //response.sendRedirect("location href='cookieForm.jsp'");
    %>

    <script type="text/javascript">
    alert("언어설정완료!");
    location.href="cookieForm.jsp";
    </script>
MYSQL 설치, MYSQL환경변수설정, cmd에서 명령어 잘못입력해서 mysql못빠져나갈때
단일행함수 : 숫자함수, 날짜함수
단일행함수 : 변환함수, 일반함수
여러행함수 : 그룹함수

[ITWILL : JSP] ==과 str.equals(str2) 차이, 객체와 클래스

ITWILL학원 : 16강 JSP기초 BY 정규태강사

1. ==과 str.equals(str2) 차이점

두가지는 공통적으로 비교연산을 하지만 차이점이 존재한다.
String타입을 비교할때는 equals()를 사용해야한다.

  • == : 두개의 문자열 객체가 완전히 같은지 비교(주소비교)

    • 메모리 주소를 비교(동일한 객체인지)
    • stack 메모리에 있는 주소를 비교
    • 기본형데이터타입을 비교할때 사용한다
  • str.equals(str2) : 두 개의 문자열 객체의 문자 데이터값이 같은지 비교

    • 대상의 내용을 비교
    • heap
    • 모든 참조형데이터타입에 사용하는 것은 아니고 참조형데이터타입중에 string타입 비교시에만 사용 가능하다.
    • 다른 참조형데이터타입을 비교하는 방법은 상속을 배운뒤 알게된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
//일치여부확인(==이용)
if (id == DBID && pw == DBPW){
%> <%=id%> 님 환영합니다! <%
}else{
%> 잘못입력하셨습니다.<%
}

//일치여부확인(equals이용)
if (id.equals(DBID) && pw.equals(DBPW)){
%> <%=id%> 님 환영합니다! <%
}else{
%> 잘못입력하셨습니다.<%
}

참고링크 : java equals 차이점

2. 객체와 클래스

  • 객체 : 모든 대상,기능들이다.

->객체를 프로그램에 포함하기위해서는 내가 필요한 기능만 뽑는 즉, 추상화과정이 필요하다.

  • 클래스 : 추상화된 객체를 코드로 표현한 형태

흔히 이를 붕어빵만들기에 비유하곤 한다.

클래스 - 객체 => 인스턴스화(객체화)
붕어빵틀 - 붕어빵 => 가열동작

하지만 붕어빵틀과 붕어빵만 있으면 붕어빵을 만들수있을까?
가열동작이 없으면 붕어빵은 만들어지지않는다
이 가열동작은 인스턴스화(객체화, 메모리에 올린다)라고 생각하면 쉽다.
이때 new연산자를 이용한다. -> new를 하면 메모리에 올라간다.

3. 클래스

1. 클래스와 객체는 같다?

NOPE! 다르다!

2. 클래스의 구성요소

  1. 생성자 : 멤버 변수를 초기화
  2. 멤버 변수 : 객체의 속성
  3. 멤버 메서드 : 객체의 동작(기능)

왼쪽처럼 기본데이터형의 변수를 선언하면 stack메모리에 올라간다.
오른쪽처럼 클래스를 선언하면 stack에는 a라는 변수가 생성되고 heap에는 new Test()라는 객체가 생성된다.

3. 클래스예시

휴대폰이라는 객체가 있다고 생객해보자

  1. 속성 : model, price, color …등등
  2. 기능 : on/off(), tell(), sendMSG() …등등
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Phone {
1. 속성
model
price
color ...등등

2. 기능
on/off()
tell()
sendMSG() ...등등

}

new Phone(); //클래스선언이 되고 이는 heap메모리에 저장된다.
input태그속성 및 input태그type종류

input태그속성 및 input태그type종류

required 속성

필수입력요소를 설정할때 required 속성을 지정하면 된다.
필수입력요소를 입력하지않고 submit버튼을 누르면 해당칸을 입력하라는 메세지가 출력되고 포커스까지 해준다.

Read More