티스토리 뷰
<<객담...>>
지난번에 오라클을 이용한 전자정부프레임워크 샘플페이지 보기를 해보았다.
우히히.. 기뿌다.
즐거운 마음과 뿌듯한 마음.. 이런것도 잠시.
어딘가 허전한 마음.
무엇일까....
포스트를 몇번이고 읽어보고....
어디가 허전할까를 고민해보다가....
알아냈다.
"나는 그냥 따라했을 뿐이다." 라는 허전함.
"이것에다가 뭔가 변화를 줘야겠다."라는 결심을 하다가.....,
이번엔 동일한 샘플에다가 "타일즈"를 적용해 보기로 했다
지난번에 작성한 예제는 전자정부 프레임워크의 문서만으로 쉽게 따라할 수 있으리라.
이번엔 동일한 샘플에다가.. 타일즈를 입혀보기로 한다.
타일즈를 적용하기 위해서는 절차가 많다.
하나라도 빼먹으면.. 당연히 안될거다.
1. 타일즈 라이브러리를 포함시킨다.
타일즈 라이브러리(*.jar)파일은 아파치 사이트에서 쉽게 구할 수 있다.
여러분은 타일즈 자르파일을 가지고 있다는 가정하에 진행하도록 한다.
다운로드한 집파일(*.zip)을 압축해제하고
다음 파일들을 "WEB-INF/lib"폴더에 복사해 넣는다.
(탐색기에서 "복사(Ctrl-C)'를 하고, 이클립스의 패키지익스플로러에서 해당폴더를 선택한 수 "붙여넣기(Ctrl-V)"를 하면 된다)
(창피한 이야기지만.. 각 파일의 기능을 정확히 몰라서 본인은 모든 파일을 포함시켰습니다. ㅡ,.ㅡ)
tiles-api-2.2.2.jar
tiles-core-2.2.2.jar
tiles-jsp-2.2.2.jar
tiles-servlet-2.2.2.jar
tiles-template-2.2.2.jar
2. 타일즈 파일들을 프로젝트에 인식(등록)시킨다.
다음으론 무엇을 해야할까?
정답은 위 빨간색 코드안에 들어 있습니다.
4. 타일즈내부의 처리를 위한 설정을 해야한다.
타일즈가 화면을 어떻게 분할해서 어떤 내용으로 채우라는 설정이 필요하겠죠?
지금까지는 프로젝트 입장에서 타일즈를 설정했다고 할 수 있습니다.
하지만, 타일즈도 사용하는 사람의 취향에 그 활용방법이 천차만별일 것입니다.
그러니, 타일즈내부에서 "어떻게 작동하라...!!"라는 설정이 필요합니다.
위 빨간색 코드중에서 Id가 'tilesConfigurer'인 부분을 보면....타일즈의 환경설정(TilesConfigurer)을 위해 "/WEB-INF/tiles.xml"라고 표현되어 있습니다.
즉, 우리가 다음으로 해야할 일은 타일즈의 환경설정파일인 "/WEB-INF/tiles.xml"를 작성하는 것입니다.
그렇다면, "/WEB-INF/tiles.xml"는 어떻게 작성할까?
다음은 보기입니다.
(일단 따라해보시고.. 뭔가 알듯하면.. 변경을 해보면서 익힐 수 있기 바랍니다)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<definition name="mainTemplate" template="/WEB-INF/views/layout.jsp">
<put-attribute name="title" value="전자정부프레임워크 따라하기" />
<put-attribute name="header" value="/WEB-INF/views/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/views/menu.jsp" />
<put-attribute name="content" value="" />
<put-attribute name="footer" value="/WEB-INF/views/footer.jsp" />
</definition>
<!-- 아래 name을 "/sample/egovSampleList"라고 정합니다.
"/sample/egovSampleLIst"는 컨트롤러가 리턴하는 값입니다.
컨트롤러에서 리턴할 때 맨앞에 "/"가 포함되어 있다는 점을 잊지 마세요. -->
<definition name="/sample/egovSampleList" extends="mainTemplate">
<put-attribute name="title" value="Contact Manager" />
<put-attribute name="header" value="/WEB-INF/views/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/views/menu.jsp" />
<put-attribute name="content" value="/WEB-INF/jsp/egovframework/rte/sample/egovSampleList.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/footer.jsp" />
</definition>
</tiles-definitions>
** 위 내용은 모두 작성해야합니다.
간단히 설명을 하자면,
1) 파일의 맨처음부터 *.dtd선언까지 : 우리가 작성한 tiles.xml파일을 파싱하고 어떤정보들이 있는지 이해하기 위한 dtd를 지정합니다.
2) tiles-definitions 선언부 : 타일즈 환경설정파일에서 사용자가 정의할 내용을 포함하는 섹션입니다. 무조건 있어야겠죠?
3) 사용자가 페이지의 구도를 선언(definition) : 위에서는 두개의 정의를 볼 수 있습니다.
첫번째 정의 : 메인화면의 구도를 정의합니다.
메인화면은 화면의 제목(title)과 상단부(header), 좌측메뉴부(menu), 하단부(footer)가 있습니다. 이는 고정된 내용이 출력되겠지요?
그리고, 사용자가 요청한 변화무쌍한 내용들이 배치될 컨텐츠부(content)가 정의되어 있습니다.
헉, 정의만 하면 모두 화면에 출력되나요?
아니지요~!!
일단 화면의 구성 요소들이 위와 같다는 말이구요. 실제 화면의 분할하는 크기는 "template="/WEB-INF/views/layout.jsp""에서 구체적으로 정의하고 있습니다.
두번째 정의 : 그렇다면 두번째 정의는 무엇일까요?
첫번째 정의에서 "컨텐츠부"는 변화무쌍하다고 했죠?
다른 녀석들은 항상 그내용이 그내용이지만... 컨텐츠는 내용이 달라집니다. 그러기 위해서는 하나의 jsp파일로 처리하기가 힘들겠지요?
그래서 각각 담당하는 jsp를 만들어 지정해야하는 것입니다.
그래서 새로운 페이지의 구도를 정의하는데, "mainTemplate"를 상속받았습니다.
첫번째 정의부의 "content"의 value는 ""인데, 두번째 정의의 "content"의 value는 /WEB-INF/jsp/egovframework/rte/sample/egovSampleList.jsp 입니다.
** 위 두개의 정의를 잘보면 타일즈에서도 상속을 받고 있다는 것을 알 수 있습니다. 그래서 두번째 정의에서 "title"과 "content"를 제외한 나머지(header, menu, footer)는 삭제해도 무방합니다.
자.. 이제 모두 끝난 것일까요?
실행해 볼까요?
아니면.. 어딘가 또 준비를 해야할까요?
힌트는 위 두개의 정의에 담겨 있습니다.
5. 화면의 구체적인 구획정리정보를 설정하자.
위 절차 4.에서는 화면을 구성하는 요소들을 표현했다면, 이제는 화면을 어떤 요소들로.. 어떻게.. 배치할 것인가를 정의해야합니다.
어떤 파일에 작성해야할까?
또다른 xml파일을 작성해야할까?
정답은 위 정의내용에 포함되어 있습니다.
첫번째 정의(mainTemplate)에서 템플릿을 "/WEB-INF/views/layout.jsp"라고 했으니, 당연히 layout.jsp파일을 작성해야합니다.
내용은 다음과 같습니다.
[대상파일 : "/WEB-INF/views/layout.jsp"]
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
<tiles:insertAttribute name="title" ignore="true" />
</title>
<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/sample.css'/>"/>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" style="width:100%;">
<tr>
<td height="30" colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td height="300" style="width:10%;">
<tiles:insertAttribute name="menu" />
</td>
<td width="300">
<tiles:insertAttribute name="content" />
</td>
</tr>
<tr>
<td height="30" colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
</body>
</html>
무척 간단하죠?
간단히 내용을 보자면.. 화면을 분할하여 구획을 나누었습니다. 방법은 <table>태그를 이용하고 있군요.
그리고, 각각의 영역에 "tiles.xml"에서 정의한 이름을 부어했습니다.
템블릿이기 때문에 별다른 일을 하지 않고 있군요.
그냥 화면을 분할하고, 해당 셀(TD)에 이름을 부여한 것밖에 없습니다.
화면을 그려야 할때 타일즈는 각각의 이름에 tiles.xml에서 정의한 각각의 파일(jsp)을 삽입할 것입니다.
이제 전체 화면을 구획정리했으니...
각각의 영역(header, menu, content, footer)에 삽입할 페이지를 만들어야겠죠?
다음은 각 구획을 담당할 파일들입니다.
[대상파일 : "WEB-INF/views/header.jsp"]
<% /*
@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
*/ %>
<center>
<div style='background-color:#FFDDCC;'>
<font size='12px'>
HEADER 헤더
</font>
</div>
</center>
[대상파일 : "WEB-INF/views/menu.jsp"]
<% /*
@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
*/ %>
<center>
<div style='background-color:#CCDDFF;font-weight:bold;height:100%;'>
<font size='12px'>
MENU 메뉴
</font>
</div>
</center>
[대상파일 : "WEB-INF/views/footer.jsp"]
<% /*
@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
*/ %>
<center>
<div style='background-color:#CCFFDD;font-weight:bold'>
<font size='12px'>
FOOTER 푸터
</font>
</div>
</center>
** header.jsp, menu.jsp, footer.jsp각 파일의 상단에 주석처리된 부분이 있습니다. 이는 jsp를 생성하면 이클립스가 자동으로넣어주는 코드인데, 위에서 설명하였듯이 header.jsp, menu.jsp, footer.jsp파일은 layout.jsp파일의 일부로 삽입될 것입니다.
헌데, 문서의 인코딩방식이나 캐릭터셋을 중복지정하면 한글을 바르게 표현하지 못하는 문제가 있더군요.
그래서 주석처리한 것입니다.
물론 삭제해야겠지만 삭제했더라면 제가 이렇게 언급하지 않게되겠죠? ^^
마지막으로 content에 해당하는 페이지(/WEB-INF/jsp/egovframework/rte/sample/egovSampleList.jsp)를 작성해야하는데....
어라? 이녀석은 이미 작성되어 있군요~~ ^^;
그럼, 이제는 무엇을 해야할까요?
6. 컴파일하고 실행하여 우리의 작업결과를 살펴보도록 합시다.
웹 프로젝트에서 "Run As" -> "Maven Build"를 선택하여 메이븐의 컴파일 결과를 지켜봅시다.
다음으로 "Run As" -> "Run on Serve"를 선택하여 우리가 작업한 결과를 반영하여 WAS를 구동해 봅시다.
짜잔~~~
원하는 결과를 얻었기를 바랍니다.
언제나 초보의 애타는 마음을 생각하면 가능한한 자세히 작성하려고 노력했습니다만....
충분한 글이 되었을지.. 조마조마하군요.
잠깐 마무리를 하기 전에 두가지..
첫번째 : 한글이 깨지는 분들은 위에서 언급했듯이.. 삽입되는 각각의 페이지에서 캐릭터 셋이랑 페이지 인코딩 방식을 모두 삭제 또는 주석처리하십시요.
전자정부 프레임웤은 기본 UTF-8로 설정되어 있으나 변경하신 분들은 모두 utf-8로 설정할 필요도 있겠군요
두번째 : 위 마지막 화면에서 "등록"버튼을 클릭하면 어찌될까요? 왜 그렇게 될까요?
"등록"버튼을 클릭했을 때 다음 화면이 무난하게 처리되도록 프로그램을 작성해보십시요.
부지런히 공부해서 다음 포스트를 준비해보도록 하겠습니다.
'Web Development > 전자정부프레임워크' 카테고리의 다른 글
프로젝트 진행 중 고민 (0) | 2016.08.12 |
---|
- Total
- Today
- Yesterday
- jstl foreach
- JSP 세션
- 전자정부프레임워크 tiles
- java 폴더구조 구하기
- Kotlin
- POI EXCEL
- coroutine
- jstl split
- POE Excel 만들기
- java calendar
- java 설치
- jstl 커스텀 태그
- Database#transaction
- java 특정문자 갯수구하기
- 코루틴
- github image 첨부시 주의할점
- MyBatis 팁
- mybatis Merge
- java 압축 풀기
- spring property
- java 설정
- spring ExcelView
- JSTL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |