서블릿은 JSP 표준에 앞서 자바에서 웹 어플리케이션 개발을 위해 만들어진 표준으로,
규약에 따른 서블릿 개발 과정은 다음과 같다.
HTTP 방식(method)별 구현 메서드
GET : protected void doGet(HttpServletRequest, HttpServletResponse)
throws ServletException, IOException
POST : protected void doPost(HttpServletRequest, HttpServletResponse)
throws ServletException, IOException
요청의 의미와 요청데이터 패키징 방식을 구분하기 위한 방법으로 정의도니 Http method
는 GET,POST, PUT, DELETE, HEAD, OPTION, TRACE등이 있으며, 이중 대부분의
웹서버와 브라우저에서 지원하면 일반적인 웹에서 사용되는 method는 GET 과 POST
가 있다.
서블릿의 callback 메서드 종류
에러 정보들을 가져와서 response가 끝날때 까지만 처리한다
작업이 끝이나면 response 와 request는 사라지고
다시 작업을 시작하면 response 와 request가 새로 만들어진다
쿠키에 대하여...
(웹서버와 브라우져는 애플리케이션을 사용하는 동안 필요한 값을 쿠키를 통해 공유하여 상태를 유지함.)
1. 구성요소?
쿠키정보 설정하는 방법
1. 쿠키객체 생성하기. 사용불가문자(공백,=,"/?@:;)
Cookie cookie = new Cookie("키값", "value값");
쿠키값은 사용불가문자를 제외한 나머지 출력가능한 아스키 문자 사용가능함.
=> 이외의 값(예를들면 한글)을 사용시에는 URLEncoder.encode() 사용하여 처리함.
2. 쿠키 최대 지속시간을 설정한다.(초단위) => 지정하지 않으면 브라우져 종료시 삭제됨.
cookie.setMaxAge(606024); // 24시간
3. 응답헤더에 쿠키객체를 추가한다.
response.addCookie(cookie);
=> 출력버퍼가 플러시 된 이후에ㅣ는 쿠키를 추가할 수 없다.
(응답헤더를 통해서 웹브라우져에 전달하기 때문에...)
예제)
쿠키 2개를 만들었다.
브라우저에 지속시간을 만들어줬다.
유지시간이 끝이나면 쿠키정보가 사라진다.
쿠키는 클라이언트에 만들어지기 때문에 아직 만든 것이 아니다.
web.xml에 설정을 해주어야 사용이 가능하다.
모든 servlet은 설정을 해주어야 한다.
결과)
http://localhost:8088/ServletTest/T05ServletCookieTest?userId=Apple&name=김강산
플러시가 된상황에는 쿠키를 다시 만들어서 넣어줄 수 없다.
Netowrk에 set-Cookie가 있으면 쿠키를 만들어 달라는 걸 알수 있다.
request에 Headers에 보면 Cookie가 있다.
ServletTest에는 Cookie가 저장되어있기 때문에 ServletTest에 있는 어떤 브라우져에
가도 Cookie가 남아있다.
예제)
쿠키배열로 가져온다.
향상된 for문으로 하나씩 꺼내온다.
name은 한글로 가져오기때문에 "UTF-8"로 디코딩한다.
결과)
사용중인 쿠키정보를 삭제하는 방법...
1. 사용중인 쿠키정보를 이용하여 쿠키객체를 생성한다.
2. 쿠키객체의 최대지속시간을 0으로 설정한다.
3. 설정한 쿠키객체를 응답헤더에 추가하여 전송한다.
예제)
읽어온 예제를 사용해서
if문으로 지속시간을 0으로 만들어준다.
결과)
세션(HttpSession)객체에 대하여...
Session이란?
다음 작업이 시작할때까지의 논리적인 연결?
브라우져가 종료되지 않는다면 Session이 유지되서 HttpServletRequest와 HttpServletResponse가 계속 유지된다.
브라우져가 종료가 되는순간 Session이 종료된다.
예제)
세션객체 만들기
setAttribute를 이용해서 userId와 visit를 세션에 저장한다.
그러면 세션이 종료되지 않는다면 계속 남아있다.
실행을 해볼려면 web.xml에 작성한다.
결과)
종료되는 시간이 Session으로 나와있다.
한번더 같은 이름으로 들어가면
재방문이 출력된다.
그리고 요청이 될때마다.
방문횟수가 증가한다.
재방문을 할때 쿠키정보가 없다면 새로 만들어지고 있다면 쿠키정보를 가져온다.
처음 방문 한 걸로 하기위해선 내 아이디를 삭제하고 다시한다.
또는 브라우져를 완전히 껐다가 다시켜면 처음 방문이란 문구가 뜬다.
request를 사용하면 새로고침을 할때마다 지워지고 새로 만들어지기 때문에 안됨!
HttpSession session = req.getSession();
새로 생성할때 사용하면된다.
정리
Cookie는 클라이언트단에 저장한다.
장점
서버쪽에 과부화를 덜 준다.
단점
보안성이 좋지않다.
쿠키정보를 탈취하거나 지워버리면 쉽게 해킹을 당하거나 지워져버린다.
Cookie
Cookie 생성방법은
Cookie라는 class를 제공한다.
setMaxAge로 접근한다.
만들어진 Cookie에 접근할려면 request메시지에 Cookie 를 이용하여 접근
request객체.Cookies(Cookie가 여러개이기 때문)
배열로 꺼내온다 getName, getValue로 꺼내온다.
지우는 방법은 setCookie를 사용해서 cookie.setMaxAge(0)유효시간은 0으로 만들어준다.
서블릿을 요청하는 HttpServletRequest
서블릿을 응답하는 HttpServletResponse
서버단에서 저장하는 HttpSession객체
Session
장점
보안성이 좋다.
Session은 브라우져를 완전히 꺼야 Session이 지워진다.
Session은 유지가 되기때문에 사용자 관련 정보를 취급한다.
브라우져만 켜져있다면 언제든지 꺼내 사용할수있다.
단점
메모리 관리가 안좋아진다.
Session은 브라우져를 완전히 꺼야 되기때문에 전역변수처럼 메모리를 계속 사용하고있다.
request에 getSession으로 불러와 사용할수있다 .
Session은 브라우져에 없으면 자동으로 생성하고
브라우져에 있다면 불러온다.
session.setAttribute("visitCnt", visitCnt)을 이용해서 꺼내올 수 있다.
삭제하는 방법
session.invalidate()을 사용해 삭제한다.
session.setMaxInactiveInterval(10)을 사용해서 분단위로 접근을 안하면 지워진다.
session-config
session-timeout 1 /session-timeout
/session-config
을 web.xml에 사용해 삭제한다.
중요한 객체 3개
서블릿 컨텍스트 객체에 대하여...
1. 서블릿 프로그램이 컨테이너와 정보를 주고 받기 위한 메서드를 제공한다.
ex) 파일의 MIME TYPE 정보 가져오기, 요청정보 보내기, 로깅 등.
2. 웹애플리케이션 당 1개씩 생성된다.(Session은 사용자당 1개씩 생성)
3. 서블릿 컨텍스트 객체는 서블릿이 초기화 될때 ServletConfig 객체를 통해서
가져올 수 있다.
예제)
애플리케이션단 1개 생성.
실제경로를 사용해야 루트를 알고 접근할수있다.
속성값을 두번 쓰면 속성이름이 변경된다.
삭제를 할땐 ctx.removeAttribute("aatr1");로 삭제한다.
서블릿 필터에 대하여...
1. 사용목적
예제1)
별표 는 Servlet전체를 필터하는것이고 그자리에 필터에 넣고싶은 Servlet을 넣으면 된다.
결과)
init()이 호출됨에따라 실행이 됬음을 알수있음.
initParameter 설정
예제2)
결과)
서블릿도 똑같이 설정해줄 수 있다.
시간 계산하기
예제3)
결과)
필터체인 순서
클라이언트에서 서버로 요청할때 클라이언트 요청 -> 예제1필터 -> 예제2필터 -> 서버
서버에서 클라이언트로 응답할때 서버 응답 -> 예제2필터 -> 예제1필터 -> 클라이언트
리스너란? 이벤트, 리스너, 이벤트핸들러 간략 개념정리
리스너는 단어의 뜻으로 보자면 (소리를) 듣는 사람, 청취자입니다. 프로그래밍에서의 리스너는 무언가 소리를 듣는 사람을 뜻하기 보다는 특정 이벤트(특정한 사건)가 발생하기를 '귀 기울여' 기다리다가 실행되는 컴포넌트(메서드나 함수)를 말합니다.
Request 사용
예제)
결과)
TomCat이 true로 바꿔줌
Session 사용
예제)
결과)
Context 사용
예제)
결과)
복습
servletContext
tomcat을 구동시켜 서비스할 상태가되면 자동으로 생성된다
애플리케이션이 서비스를 중지할 때 까지 구동된다
servletFilter
여러개를 쌓아서 구동시키는 필터체인
클라이언트에서 서버로 요청 할때 필터체인을 거쳐서 서버로 요청
서버에서 클라이언트로 응답할땐 반대 순서로 응답
ServletListener
컨테이너에서 발생한 이벤트를 처리한다
tomcat에 ServletListener를 넣어 놓으면 자동으로 이벤트 들을 처리한다
이미지를 보낼수있다
예제)
결과)