2020-12-08

jsbak·2020년 12월 8일
0

action tag

Composite View Pattern

composite의 의미는 '혼합','혼합의','합성물'이런 의미를 지닌다.
따라서 Composite View Pattern은 뭔가가 합쳐진 형태라는 것을 생각해 볼 수 있다.
래이 아웃 코드의 중복을 피하기 위한 방법론
모듈화된 웹페이지에서 각 모듈에 해당하는 페이지의 내용이 다르기 때문에 각 요청에 대한 응답페이지 내에서 레이아웃을 형성하는 코드의 중복이 불가피파고, 이를 해결하기 위한 방법으로 Composite View 패턴이 제시되었다.
레이아웃을 구성하는 정보를 담고 있는 템플릿을 생성하여 이용
Composite View 패턴 구현 라이브러리 Tiles, SiteMesh등(Layout Framework / Layout Engine 등으로 불림)

https://2xx195.tistory.com/244
컴포지트 뷰패턴?
참고2: https://2xx195.tistory.com/m/244

apache tiles검색?
이것을 사용하는 것이
retired 종료되었다 . attic page 다락방으로 옮겨 놨다.

컴포지트 패턴 -> 여러개가 하나로 묶어서 나타난다.

https://tiles.apache.org/framework/tutorial/pattern.html

이걸 지원하는 제일 대표하는 프레임워크가 Tiles works

모델2의 구조를 바꿧다.
forward -> include, doget도 바꿈

오늘 목적
기존의 모델2를 그대로 나눠면서 모듈화된 페이지를 사용할 것인가. forward를 이용

롬벅? 롬복?

String view = "WEB-INF/views/layout.jsp";
		req.setAttribute("includePath", "WEB-INF/views/login/loginForm.jsp");
		req.getRequestDispatcher(view).forward(req, resp);

중복을 제거 저 코드의 중복이 모든 서블릿에서 일어난다.

index.composite (.composite)우리 프레임워크에서만 사용할 예정

req.getServletPath()
Returns the part of this request's URL that callsthe servlet.
서블릿을 사용할떄 URL의 일부?

리스너 언제 사용?
어떤 언어를 막론하고 리스너가 있으면
이벤트 핸들러임.

이벤트 종류와 해당 메서드

공통점 생명주기가 있다. Lifecycle
그래서 각 객체가 언제 태어나고? 언제 죽는냐 라는 이벤트들이 이런게 있다라는 거

context event
이런 Lifecycle에 방문자 수? 관련 이런 것들을 처리할 수 있다.

request event
어떤 요청이 처리되는 과정에서의 소요시간 ?
언제 타이머를 누를까 요청이 들어왔을때
언제 타이머를 끌까 응답데이터가 나갈때

또 다른 공통점
Changes to attributes
같은 이름의 어트리뷰트가 다른 값으로 변경될 때
서로다른 스코프에서 속성이 변경되면 이걸 사용할 수도 있다.

클래스로더가 힙 메모리에 올려준다.
하나의 어플리케이션 안에는 클래스 패스가 여러개 이다.

체크드 입센션(컴파일 예외) 예외를 적극적으로 처리하냐, 아니면 VM이 가져가냐
언 체크드 (널포인터) 예외가 있더라도 처리가 되지 않는 예외 (이 최상위가 RuntimeException)
언체크드를 쓰면 호출자에게 넘어가고 최종적으로는 VM으로 넘어감.

예외처리에 대해서 보강한댄다.


tiles - servlet만 있어도 되지만.
tiles - template -> 커스텀태그 사용가능하게 해준다.

  1. 템플릿
  2. tiles에서는 화면 하나하나를 데피니션
  3. 타일 시공자? 어떤 디자인으로 배치할지 생각. 거푸집을 생각(템플릿)
    이 한세트가 데피니션(한 타일 세트, 5조각, 1조각(어트리 뷰트)
    1개 템플릿
    2개 데피니션
    4개 이상의 어트리뷰트(타일조각하나가 어트리뷰트하나)

<definition name="myapp.homepage" template="/layouts/classic.jsp">
  <put-attribute name="header" value="/tiles/banner.jsp" />
  <put-attribute name="menu" value="/tiles/common_menu.jsp" />
  <put-attribute name="body" value="/tiles/home_body.jsp" />
  <put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>

우리가 제일 먼저 만들어야하는 것 위의 xml과 에 name에 존재할 녀석
로그인, 인증 bts 데피니션이 3개 이상 있어야한다.

커스텀 태그를 사용하려면 반드시 라이브러리가 필요하다.
<%@ taglib %>

참고 : https://tiles.apache.org/framework/tutorial/basic/pages.html

  1. 템플릿을 만듬
  2. 구멍을 뚫어서 페이지를 만들어낸다.( 데피니션을 만들어 낸다)


WEB-INF 밑에 xml파일 생성

상속을 한다는데

부모 데피니션의 이름을 어떻게 할거냐

어떻게 그릴거냐
참고 : https://tiles.apache.org/framework/tutorial/configuration.html
AbstractTilesListener를 상속받은
SimpleTilesListener 이녀석을 등록해야한다.
web.xml 리스너에org.apache.tiles.web.startup.simple.SimpleTilesListener 등록

org.apache.tiles.web.util.TilesDispatchServlet도
등록 기존의 Composite관련 매핑에 이걸로 바꿈

tiles dispatcher servlet이 어떻게 동작하는지 알아야한다.
tiles dispatcher servlet 열고
doget의 ApplicationContext applicationContext = org.apache.tiles.request.servlet.ServletUtil 라인에 브레이크 포인트

과제

profile
끄적끄적 쓰는곳

0개의 댓글