JSP 15. 페이지 모듈화 & composite view pattern

zhyun·2020년 12월 8일
0

JspSpring

목록 보기
20/39

  • 방탄소년단만 모델2
    bts서블릿이 존재(BTSServlet)
    근데 ModulizationServlet으로 일단 보냄
    bts서블릿에서 버퍼를 플러쉬하지 않은 상태에서 forward를 include로 바꿨는데 코드를 바꾸지 않고 하는 방법 해볼거임

  • 나머지는 모델1
    기존에는 해당 jsp로 바로 넘어감
    수정 후, ModulizationServlet.java에서 includepath 찾은 후 layout.jsp로 forward되는 방식


JSP:액션태그를 이용한 페이지모듈화

  • include 방식의 종류
  • 하나의 페이지를 여러개로 분리
  • 액션태그를 이용해 요청을 분기할 때 include 형태를 사용하면, 여러 응답 페이지에서 중복되는 공통 랜더링 영역을 모듈화하여 중복코드 발생시키지 않을 수 있음

예시

  • (ex)다음카페 레이아웃
  • 벤더 정보를 제공하는 footer나 인증 정보 입력을 위한 로그인폼 등 레이아웃 상에서 공통적으로 사용되는 분할 영역이 있는 경우, 이 페이지를 구성하는 jsp자체를 하나의 페이지 모듈로 만들어서 템플릿 페이지 내include방식을 사용하여 페이지 모듈화를 구현
    • 페이지를 모듈화한 경우 각 모듈간의 데이터를 공유해야 하는 상황이 발생 => scope를 통해 데이터 공유 상황을 해결할 수 있다.

동적 include

  • 시점 : Runtime
  • 대상 : 실행 결과를 출력 버퍼에 include
  • 목적 : 특정 페이지가 중복되어 랜더링 되는 경우 하나의 jsp객체를 재활용하기 위해 사용
  • 방식
    <jsp:include path=""/> or
    요청분기방식 include(RequestDispatcher.include())

정적 include

  • 시점 : 소스 코드 컴파일 단계
  • 대상 : 소스 코드(code fragment) 자체를 include
  • 목적 : 특정 변수나 메소드 즉 소스 자체가 중복되는 경우
    중복코드를 제거하기 위해 사용
  • 방식
    <%@ include file=""%>(Directiv) or
    web.xml의 jsp-config 엘리먼트를 사용한 코드 조각 일괄 include 설정

include방식을 통해 서버사이드 페이지 모듈화를 구현함으로써 중복코드 및 공통 랜더링 영역에 대한 처리가 가능하지만, 최근에는 model2 구조가 일반화됨에 따라 페이지 모듈화를 위해 기존의 include 방식보다 composite view pattern이나 Decorating view pattern등의 원리로 동작은 tiles나 sitemesh 등 여러가지 presentation framework 들이 사용되는 추세다.


2020.12.08 화요일

kr.or.ddit.vo.MenuVO 수정

  • 요기에 menuURI 추가
    • ServiceKind Enum에서 모델1은 menuPath(module.do)
      모델2는 menuURI(자신의 서블릿)

login폴더 views밑으로 옮김

웰컴페이지 작동 방식

kr.or.ddit.listener.CompositeConfigInitializer

Create Listener 과정


  • 왼쪽 대분류
    • 생명주기가 제한 'jsp기본객체'
    • Servlet context, HTTP session, Servlet Request
  • 왼쪽이 사용할 수 있는 이벤트들
    • 공통 : changes to attributes
    • servlet context lifecycle
      태어난 시점에 properties 읽기
    • httpsession lifecycle
      방문자수 카운팅
    • request lifecycle
      요청처리 소요시간 쳌!
      리스너는 이벤트핸들러


하나하나 찾아다니면서 자원을 찾을필요가 없다.

배포작업



tiles

  • tiles 버전 3점대

classic layout page structure

Apache Tiles 홈페이지
원체 쉽게 사용할 수 있는 프레임워크

1. Create a template

  1. 템플릿 만들기
    This template has five attributes
    : title (of string type), header, menu, body and footer.

/webStudy02_Maven/webapp/WEB-INF/views/template.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<tiles:insertAttribute name="preScript" />
</head>
<body>
<div id="topMenu">
	<tiles:insertAttribute name="topMenu"/>
</div>
<div id="leftMenu">
	<tiles:insertAttribute name="leftMenu"/>
</div>
<div id="contents">
	<tiles:insertAttribute name="contents"/>
</div>
<div id="footer">
	<tiles:insertAttribute name="footer"/>
</div>
</body>
</html>
<!-- tiles템플릿 1. 템플릿 만든다. template.jsp 2.definition 만든다  -->
  • 디렉티브 <%@ taglib>
    • 태그 파일에서 사용할 태그 라이브러리를 명시할때 사용
    • 문법은 JSP페이지와 완전히 동일하다.
    • 즉, 파일태그 내에서 또 다른 커스텀 태그를 사용할 수 있다는 의미이기도 하다.

2. Create the composing pages

  • 각각 해당하는 jsp(페이지 만들기)
  • /webStudy02_Maven/webapp/includee/footer.jsp, leftMenu.jsp, preScript.jsp, topMenu.jsp

3. Create a definition

Definition : 페이지

Attribute : definition 내의 개별 타입들

  • 기본적으로 정의파일 /WEB-INF/tiles.xml

DTD Tiles 등록과정
window->Preferences -> xml-> xml Catalog -> User Spectcified Entries -> Add


Location에서 ""빼야했는데 캡쳐 잘못 햇음


edit에 들어가서 수정

Create XML File 과정에서
Create XML file from a DTD file 선택 후 Next
Select XML Catalog entry 선택하면
등록해놓은 tiles.apache Key가 있음
선택 후 완료
xml 파일 create 완료




타일즈에서 사용하는 커스텀태그 사용할 수 있다
-- tiles-template


profile
HI :)

0개의 댓글