JSP, Servlet, JDBC 강의 6일차 -(2)

Jiian·2022년 5월 13일

JSP,Servlet

목록 보기
9/11

해당 게시물은 Udemy의 "JSP, Servlets and JDBC for Beginners" 강의를 정리한 내용입니다. 영어를 한국어로 번역하는 과정에서 잘못된 부분이 있을 수 있습니다. 또한 기타 게시물들의 내용을 참조한 부분이 있습니다.

This post summarizes Udemy's "JSP, Servlets and JDBC for Beginners" lecture.

  • 웹 브라우저와 서버간에 주고 받는 텍스트 데이터다
  • Name / Value 쌍으로 되어있다.
  • 브라우저는 서버 도메인의 이름에 맞는 cookie만을 전송한다.
  • 클라이언트의 쿠키 폴더에 저장된다.

  • Cookie 는 javax.servlet.http 이라는 패키지 안에서 정의된다.
  • 패키지는 모든 JSP 페이지들 안에 무료로 import되어 있다.

Cookie(String name, String value)

  1. 웹 사이트를 개인 맞춤화하기 위한 HTML Form 생성
  2. form data 를 읽고, cookie 설정하는 JSP 생성하기
  3. cookie를 읽고, 개인 맞춤화된 내용을 보여주는 홈 페이지 생성하기

1단계

  • 내가 좋아하는 언어 고르는 사이트
<meta charset="euc-kr">
<html>
<head>
<title> Personalize Site</title>
</head>

<body>
<form action ="cookies-personalize-response.jsp">
	너가 제일 좋아하는 프로그래밍 언어 골라봐!
	<select name = "favoriteLanguage">
			<option> Java </option>
			<option> Python </option>
			<option> C </option>
			<option> Ruby</option>
			
	</select>
	<br/><br/>
	
	<input type="submit" value="Submit"/>

</form>


</body>
</html>

2단계

  • 내가 좋아하는 언어 받아와서 쿠키 설정
  • 사이트에 내가 좋아하는 언어 명시해주고, 메인 페이지로 돌아갈 수 있게끔 해줌
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="EUC-KR"%>
<%@ page import="java.util.*" %>

<html>
<head><title> 확인 </title></head>

<%
 // form data 읽어오기 
 String favLang = request.getParameter("favoriteLanguage");

// 쿠키 생성하기  
Cookie theCookie = new Cookie("myApp.favoriteLanguage", favLang);


//cookie 지속하는 시간 설정
theCookie.setMaxAge(60*60*24*365); // 1년 (초 단위로 설정 )


// 쿠키를 브라우저에 전송하기  
response.addCookie(theCookie);

%>

<body>

	고마워! 너가 제일 좋아하는 언어 ${param.favoriteLanguage} 로 설정할게!
	
	<br/><br/>
	
	<a href = "cookies-homepage.jsp">홈 페이지로 이동하기</a>

</body>

</html>

3단계

  • 메인 페이지
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="EUC-KR"%>
<%@ page import="java.util.*" %>

<html>
<body> 
<h3> 메인 페이지  </h3>
<!-- 쿠키로부터 제일 좋아하는 프로그래밍 언어 읽어오기   -->
<%

	// 쿠키가 없을 경우 (기본)
	String favLang = "Java";

	// 	브라우저 요청으로 쿠키 받아오기  
	Cookie[] theCookies = request.getCookies();
	
	// 제일 좋아하는 언어 쿠키 찾
	if (theCookies != null){
		
		for (Cookie tempCookie: theCookies){
			if("myApp.favoriteLanguage".equals(tempCookie.getName())){
				favLang = tempCookie.getValue();
				break;
				
			}
		}
	}

%>

<!--  개인 맞춤화된 페이지  -->
<h4> <%=favLang%> 관련 새로운 책</h4>
<ul>
	<li> 어쩌구 저쩌구  </li>
	<li> 어쩌구 저쩌구  </li>
</ul>


<h4> <%=favLang%> 관련 새로운 소식 </h4>
<ul>
	<li> 어쩌구 저쩌구  </li>
	<li> 어쩌구 저쩌구  </li>
</ul>


<h4> <%=favLang%> 관련 새로운 일자리 </h4>
<ul>
	<li> 어쩌구 저쩌구  </li>
	<li> 어쩌구 저쩌구  </li>
</ul>
<hr>
<a href="cookies-personalize-form.html">개인 맞춤 페이지로 가기 </a>

</body>

</html>

결과

크롬 브라우저에서 쿠키 삭제 후

쿠키 값의 공백 처리 방법

  • 쿠키값들을 encode, decode 하기 위해 URL이 필요하다.

  • 처음에 왜 굳이 이렇게 해줘야 하는 지, 아무런 오류가 기존에 나지도 않고, 출력값도 똑같은데 무엇을 위해 하는 건지 몰랐다. 검색해보니, 인프런 Q&A 부분에 누군가가 답을 해주었다. 그 이유는 아래와 같다.

웹 프로토콜에 보면 서버와 클라이언트간의 데이터는 영문, 숫자, 일부 특수문자만 가능하다. 한글과 같은 유니코드 문자와 공백은 허용하지 않는다.
그래서 지원하지 않는 문자들을 코드화 시켜 유니코드글자와 공백 등을 다른 문자로 대체한 문자열을 만들어 사용하게 된다. 유니코드 문자열을 코드화 시키는 것을 인코딩, 이걸 다시 복원하는 것이 디코딩이다.
클라이언트에게 보낼 때 서버에서 인코딩 해서 보내고 클라이언트가 보낼때는 인코딩되어 있는 문자열을 디코딩해서 사용해야 한다. 파라미터나 응답결과에 있는 문자열들은 자동으로 인코딩 디코딩을 하기 때문에 문제가 되지 않는다. 허나 쿠키의 경우는 자동으로 처리가 되지 않아 직접 작업을 해줘야 한다. 이건 웹 표준에 정해져 있는 프로토콜이므로 왜 이렇게 해야하나~ 보단 이렇게 해야 한다고 생각해야 한다.

  • URL 두 가지 종류
  1. java.net.URLEncoder
  2. java.net.URLDecoder

  • cookies-homepage.jsp 파일
<%@ page import="java.net.URLDecoder" %>
 //쿠키 데이터 해독 ... handle case of languages with spaces in them
    favLang = URLDecoder.decode(tempCookie.getValue(), "UTF-8");
  • cookies-personalize-response.jsp 파일
<%@ page import="java.net.URLEncoder" %>
// 쿠키 데이터 부호화 ... handle case of languages with spaces in them
    favLang = URLEncoder.encode(favLang, "UTF-8");

참조

profile
Slow and Steady

0개의 댓글