1. 서블릿과 JSP는 어디에 쓰는 물건인고?: 서문
학습 목표
웹 서버와 클라이언트는 무엇을 하나요, 어떻게 대화하죠?
2분짜리 HTML 가이드
HTTP 프로토콜. 넌 누구냐!
HTTP GET, POST 요청 및 HTTP 응답을 해부해보자.
URL로 웹 페이지가 어디 있는지 어떻게 알지?
웹 서버, 정적인 웹 페이지 그리고 CGI
서블릿의 신비를 벗겨보자: 작성, 배포, 실행
JSP는 "HTML에 자바를 넣을 순 없을까"라는 고민에서 탄생했다네요.
2. 웹 애플리케이션 아키텍처: 개요
학습 목표
컨테이너의 정체는 무엇이며 개발자에게 어떤 의미이죠?
코드는 어떤 모습일까?(무엇이 서블릿을 서블릿답게 만드는가)
서블릿에 이름을 붙인 뒤 DD에서 URL과 매핑하기
스토리: 밥은 지금 결혼정보 사이트를 만들고자 합니다(MVC 도입)
MVC 디자인 패턴은 이런 문제를 해결합니다.
실제 배포 서술자(DD)
J2EE에는 무엇이 들어 있나
3. 초 간단 미니 MVC 튜토리얼: 실전 MVC 애플리케이션
학습 목표
MVC 애플리케이션을 빌드해보자; 먼저 설계부터 하고...
개발 및 배포 환경을 만들어보자
제일 첫 화면 HTML 코드를 만들어 테스트하자
배포 서술자(DD)를 만들다
서블릿 컨트롤러를 생성, 컴파일, 배포, 테스트하다
모델 컴포넌트를 디자인, 빌드, 테스트하다
컨트롤러가 모델을 호출하도록 확장하다
뷰 컴포넌트를 만든 다음 배포하다(이것 JSP입니다)
서블릿 컨트롤러가 뷰 컴포넌트를 호출하도록 확장하다
4. 서블릿이 되어 보자: 요청과 응답
학습 목표
컨테이너 안에서 서블릿의 일생
서블릿 초기화와 스레드
그러나 서블릿의 본연의 임무는 GET, POST 요청을 핸들링 하는 것입니다
멱등이 아닌 요청 이야기.
GET 요청을 보낼지 POST 요청을 보낼지 어떻게 결정합니까?
파라미터 전송 및 사용하기
지금까지는 Request였고… 이제 Response에 대해 알아보죠.
Response 헤더에 값을 설정할 수도 값을 추가할 수도 있다네요.
리다이렉트 대 Request 디스패치
리뷰: HttpServletResponse
5. 웹 애플리케이션이 되어 보자: 속성과 리스너
학습 목표
초기화 파라미터와 위기에서 구해 준 ServletConfig
JSP에서 서블릿 초기화 파라미터는 어떻게 접근하나요?
위기에서 구해 준 컨텍스트 초기화 파라미터
ServletConfig와 ServletContext 비교
그녀가 원한 건 ServletContextListener였다
튜토리얼: 간단한 ServletContextListener 리뷰
개발한 리스너 컴파일, 배포 그리고 테스트
ServletContextListener에 대한 모든 것, 리뷰
리스너 8개: 컨텍스트 이벤트 리스너 말고 그 외...
정확히 속성이라는 것, 생존 범위라는 것이 무엇입니까?
속성 API 및 속성의 어두운 면들...
Context 생존 범위는 스레드-안전(thread-safe)하지 못하다?
어떻게 하면 컨텍스트 속성을 스레드-안전하게 만들 수 있나요?
동기화 해보겠다고요?
세션 속성은 스레드-안전한가?
SingleThreadModel의 폐해.
단지 Request 속성과 지역 변수만이 스레드 안전합니다.
Request 속성과 Request 디스패치
6. 대화 상태 유지하기: 빈/엔티티 동기화
학습 목표
실제 대화라고 생각해봅시다(세션이 어떻게 작동하죠)
세션 ID, 쿠키, 기타 세션에 대한 기초...
이럴 때 나타난 우리의 해결사: URL 재작성
세션이 오래되었네요: 음…그렇다면 어떻게 제거하면 될까?
쿠키는 세션을 사용하기 위해서만 필요하나요? 아니면 다른 데에도 쓰나요?
HttpSession 삶에 있어 주요 순간들.
HttpSessionBindingListener를 벌써 잊은 건 아니죠?
세션 이동
리스너 예제
7. JSP가 되어 보자: JSP 코드 작성하기
학습 목표
page 지시자와 "out"으로 초 간단 JSP 만들기
JSP 표현식, 변수 및 선언
이제 JSP가 만든 서블릿이 등장할 시간이 되었군요
out만이 내장 객체는 아닙니다.
JSP의 초기화와 일생
이와 관련해서, 3가지 지시자에 대한 얘기를 좀더 해보죠.
스크립틀릿이 왜 나쁘다는 거죠? EL 등장이요.
잠깐만... 아직 살펴보지 않은 JSP 요소가 있는데요: 액션
8. 스크립트가 없는 페이지: 스크립트가 없는 JSP
학습 목표
속성이 빈일 때
표준 액션: useBean, getProperty, setProperty
빈 참조에 다형성 기법을 사용할 수 있습니까?
이때 혜성처럼 나타난 속성 param
프로퍼티 변환
표현식 언어(EL)가 답이다!
도트(.) 연산자로 프로퍼티 및 맵 접근하기
[] 연산자는 도트 연산자 보다 막강합니다.
도트 연산자와 [] 연산자에 대한 기타 사항
EL 내장 객체
EL 함수와 널(null) 처리
재사용 가능한 템플릿 조각들 - 2가지 "include"
표준 액션
그녀는 JSTL 태그를 몰랐던 것이다.(미리 보기)
빈 관련 표준 액션 및 include 리뷰
9. 막강한 커스텀 태그: JSTL 작성
학습 목표
스크립팅 없이 루핑 돌리기:
와 태그로 조건문 만들기
과 태그 사용하기
, 컨텐츠를 포함하기 위한 3가지 방법
포함할 컨텐츠 요리하기
으로도 똑같은 일을 할 수 있죠
하나면 하이퍼링크에 관련된 건 모두 다 할 수 있습니다.
나만의 오류 페이지를 만들어보자.
태그. 자바의 try/catch 문...
JSTL에도 없는 태그가 필요하다면?
태그에 주목해주세요.
태그 몸체에 들어 갈 수 있는 것들
태그 핸들러, TLD, JSP
taglib 지시자에 있는 는 그냥 이름입니다. 위치가 아닙니다.
JSP가 하나 이상의 태그 라이브러리를 사용한다면...
10. JSTL만으로 만족스럽지 않을 때: 커스텀 태그 만들기
학습 목표
태그 파일: include처럼 행동하지만, 좀더 개선된 방식...
컨테이너가 태그 파일을 찾는 곳
심플 태그 핸들러
태그 몸체에 표현식이 있다면...
아직도 클래식 태그 핸들러를 배울 이유가 있으니...
태그 핸들러 API
초 간단 클래식 태그 핸들러
클래식 태그 생명주기는 리턴값에 따라 달라집니다.
IterationTag에 몸체를 반복할 수 있는 기능이 들어있다네요.
TagSupport 메소드 디폴트 리턴값
DynamicAttributes 인터페이스
BodyTag에는 두 개의 메소드가 더 있으니...
태그와 태그가 협업해야 할 때가 있나니...
태그 핸들러에서 PageContext API 사용하기
11. 웹 애플리케이션을 배포해보자: 웹 애플리케이션 배포
학습 목표
배포 핵심: 어떤 녀석이 어디에 있어야 하나요?
WAR 파일
서블릿 매핑은 어떻게 동작할까요?
DD에 환영 파일 설정하기
DD에 오류 페이지 설정하기
DD에서 강제로 서블릿 초기화하기
XML에 부합하는 JSP 만들기: JSP 문서
12. 비밀스럽게, 안전하게: 웹 애플리케이션 보안
학습 목표
서블릿 보안의 4요소
HTTP 환경에서 어떻게 인증하는가
보안을 선언적으로 관리하는 이유 톱 10
웹 애플리케이션 보안 관련 규정은 누가 정하나요?
인가: 역할(롤)과 제약
인증: 4가지 방식
4가지 인증 방식
안전하게 데이터 전송하기: HTTPS가 답이다.
데이터 기밀성과 데이터 무결성을 분리하여 선언하기
13. 막강 필터: 랩퍼와 필터
학습 목표
누가 요청을 날렸는지 기록하는 필터를 만들어보자.
필터의 생명주기
필터 선언 및 순서 정하기
Response 출력을 압축하는 응답 필터
랩퍼 기초
실제 압축 필터 코드
압축 랩퍼 코드
14. 엔터프라이즈 디자인 패턴: 패턴과 스트럿츠
학습 목표
하드웨어 소프트웨어 문제 때문에 패턴이 있다.
소프트웨어 디자인 원칙부터 살펴보죠...
원격 모델 컴포넌트를 지원하기 위한 패턴
JNDI와 RMI, 후다닥 살펴보기
중간에 객체를 하나 집어 넣으면 어떨까요?
서비스 로케이터로 비즈니스 델리게이트를 단순화하자
트랜스퍼 오브젝트를 소개할 시간이군요.
비즈니스 티어 패턴
다시 살펴보자 MVC 패턴
맞습니다. 한마디로 말해 스트럿츠(와 프론트 컨트롤러)입니다
BeerAdvisor 애플리케이션을 스트럿츠로 리팩토링해보자
패턴 훑어보기
부록 A. 최종 모의고사