5. Development Using Patterns

1. Why Use Patterns?
Best Practice니까..
재사용 하려고..
의사소통을 위해..

2. Introducting the J2EE Patterns Catalog
http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html
Presentation tier :: 데이터를 보여주는 것을 책임지는 계층
Business tier :: 비즈니스 처리를 책임지는 계층
Integration tier :: resource 계층과의 연결을 책임지는 계층

3. Looking at Presentation Design Patterns
Decorating Filter Pattern :: request를 처리하기 전에 filter를 거치도록 함.
Front Controller Pattern :: filter를 거쳐온 request를 단일 서블릿에서 처리 함.
Dispatcher View Pattern :: 처리된 결과를 보여줄 JSP를 찾아줌.
View Helper Pattern :: 결과를 보여줄 때 커스텀 태그과 JavaBeans를 적용
p105쪽 그림

4. Understanding MVC
MVC 아키텍처를 적용함으로써 애플리케이션 데이터와 그 데이터를 보여주는 것을 분리함.
분리함으로 써 뷰가 보다 가벼워 짐(lightweight), 쉽게 변경할 수 있슴, 재사용 편리해짐(pluggable and transportable across platform)
p106쪽 그림

5. MVC 예제
모델 만들기(JavaBean) -> View 만들기(JSP) -> 특정 URL을 특정 컨트롤러(servlet)에 바인딩(web.xml) -> 컨트롤러 구현(servlet)

느낀점
– web.xml에 Main 서블릿 등록하는 모습이 Spring의 dispatcher Sevlet과 거의 비슷
– 마지막에 만든 servlet 코드가 너무 방대하다. 역할을 더 나눠야 할 것 같다.
– “컨트롤러 : 화면 = 1 : 다” 요런 관계인데 이러면 정말 서브릿이 무한대로 커지는 거 아닌가?
– Single Entry Point를 유지하면서도 다수의 컨트롤러를 등록하는 방법을 찾아야겠다.

4. Role Separation with Custom Tags

Using Custom Tags
– Sevlet Container가 custom tag를 다루는 과정
1. 페이지 처리 도중에 custom tag를 만나면 제어권을 해당 페이지에서 태크 핸들러에게 넘깁니다. 태그 핸들러에서 필요한 처리를 하고나서 다시 페이지로 제어권을 넘깁니다.
2. Servlet Container는 이런 태그 핸들러 들의 객체를 생성하여 풀에서 관리합니다.
– 태그 핸들러를 taglib 지시자를 사용하여 jsp에 포함시킬 수 있습니다.
ex) <%@ taglib prefix=”c” uri=”http://java.sun.com/jstl/core_rt” %>
– taglib의 uri는 web.xml에 정의되어 있으며 web.xml에서는 해당 uri를 특정 TLD 파일과 매칭시킵니다.
– TLD 파일에는 태그 핸들러 클레스의 위치와 해당 태그에서 사용할 수 있는 속성들의 정보를 가지고 있습니다.
– 태그 핸들러는 자바 클레스 입니다.
1. 태그 만들기 :: TagSupport 클레스 상속
2. Body가 있는 태그 만들기 :: BodyTagSupport 클레스 상속
– 태그 만들기 예제
참조 : http://www.javastudy.co.kr/docs/lec_javaweb/jsp/chapter5.pdf

Introducing Simple Tag
– JSP2.0 에 새로 추가된 기능
– WEB-INF/tag 밑에 태그를 만들어서 사용하면 됩니다.
– 사용 예)<%@ taglib tagdir=”/WEB-INF/tags” prefix=”tags” %>
– 심플 태그 만들기 예제
참조 : http://whiteship.tistory.com/470

3. Role Separation with JavaBeans

어떻게 하면 잘 돌아가는 것(function well) 뿐만 아니라 인터페이스 까지 볼 수 있는(appealing interface) 애플리케이션을 만들 수 있을까?
– 컨텐츠 생성 과 컨텐츠 표현 계층을 분리하라.
– 이렇게 하면 화면 디자이너가 애플리케이션의 코드와 상관없이 인터페이스만 보고 화면을 개발할 수 있다.
– 애플리케이션 코드를 화면에서 숨길수록 더 깔끔한 표현 계층을 만들 수 있다.

JavaBeans
– Serializable 인터페이스 구현
– default 생성자
– private 속성들
– public getter, setter들

Using JavaBeans
– <jsp:useBean id=”objectName” scope=”page” calss=”class.path” />
– <jsp:getProperty name=”objectName” property=”propertyName” />
– <jsp:setProperty name=”simpleBean” property=”propertyName” value=”propertyValue” />

Dealing with Large Sets of Data
– 조금씩 그때그때 가져오기
– 왕창 가져와 놓고 조금씩 보여주기 => 캐쉬 사용

Standardizing Form Handling
– validation 과 error reporting
– 검증과정
    – 1. 입력되는 데이터를 임의로 저장한다.
    – 2. 입력된 데이터를 검증하여 에러가 나면 에러를 객체에 저장한다.
    – 3. 2번 과정을 무사히 마치면 데이터베이스에 커밋할 것으로 체크한다.
– 표현과정
    – 1. request의 파라미터로 커밋 될 것인지 확인(submit이라는 파라미터가 있는지 확인)한다.
    – 2. 없으면 에러가 있거나 아직 데이터를 입력하지 않은 상태(폼을 처음 로딩했을 때)니까 폼을 보여준다.(에러가 있으면 에러도 표시)

2. Using JSP

Handling Errors
– 에러페이지 만들기 :: <%@ page isErrorPage=”true” %> ${param.from}   //myError.jsp
– 에러페이지로 포워딩 하기 :: <%@ page errorPage=”/myError.jsp?from=custom.jsp” %> // custom.jsp
cm229.jsp
Including Other Files
– Compile Time :: <%@ include file=”myFile.jsp” %>
– Runtime :: <%@ include file=”myFile.jsp” flush=true” %>

dm213.htmlcm230.html
Processing Form Data
– param 사용 :: ${param.속성이름}
– paramValus 사용 :: ${paramValues.엘리먼트의 name}

cm234.jspdm215.html
Controlling Page Navigation with JSP
– <jsp:include>
– <jsp:forward>

Maintaining State
– Application Data vs Presentation Data
– Session 만들기 :: <%@ page session=”true”%>
– Session 스콥 변수 만들기 :: <c:set var=”firstName” value=”Christina” scope=”session” />
– Session 스콥 변수 지우기 :: <c:remove var=”firstName” scope=”session” />

cm233.jspcm232.jspdm214.jspcm231.html
Initializing and Cleaning Up Jsp Pages
– HttpJspPage 클래스를 상속하는 클래스를 만든다.
– jspInit() 메소드 안에 초기화 관련 코드를 넣어서 오버라이딩 한다.
– jspDestroy() 메소드 안에 청소 관련 코드를 넣어서 오버라이딩 한다.
– service() 메소드에 초기화 한 datasource를 session에 넣어주고 _jspService(request, response) 메소드를 호출해 준다.
– JSP가 여기서 만든 클레스를 상속하도록 설정 :: <%@ page extends=”jspBook.util.JspSuper” %>

dm212.jspdm216.java
느낀점
소스 쳐 보는게 벌써부터 귀찮아 지고 있다.
– session을 JSP 상에서 만들려면 jstl을 사용해야 되는 군하..
– DB connection 코드를 빼 내는 것이 보안상 굉장히 좋은 일이군하..
– param 이랑 paramValues 라는 객체가 있었구나. sessionScope 이라는 것도 있네.