Tiles Framework와 정규화에 대하여 알아보았다.
↗ Page1에서 Page2로 이동할 때 기존의 Layout은 그대로 두고
Body부분만 바뀐다는 설명을 보여주는 이미지이다.
사실 JSP에서 <jsp:include>로 저런 Layout은 충분히 구현가능한데
굳이 Tile Framework가 왜 필요할까?
그 이유는 유지보수와 코드간결화가 아닐까 싶다.
위의 이미지를 예를 들어 설명하자면
ex) Page1 (Tiles Framework 미적용)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Page 1</title>
</head>
<body>
<jsp:include page="Header"/>
<jsp:include page="Menu"/>
<a href="Page2">Link to Page2</a>
Body 1
<jsp:include page="Footer"/>
</body>
</html>
| cs |
ex) Page2 (Tiles Framework 미적용)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Body2</title>
</head>
<body>
<jsp:include page="Header"/>
<jsp:include page="Menu"/>
Body2
<jsp:include page="Footer"/>
</body>
</html>
| cs |
ex) Page1 (Tiles Framework 적용)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<a href="Page2">Link to Page2</a>
Body 1
| cs |
ex) Page2 (Tiles Framework 적용)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Body 2
| cs |
위와 같이 적용하려면 당연히 세팅은 필수이다!!
ex) spring 설정 xml & Tiles 설정 xml
----------- spring setting xml -----------
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles-*.xml</value>
</list>
</property>
</bean>
* Tiles ViewResolver 설정 *
<bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="0" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
<property name="order" value="1"></property>
</bean>
----------- Tiles Setting xml -----------
<tiles-definitions>
<definition name="home" template="/WEB-INF/views/templates/layout.jsp">
<put-attribute name="title" value="kosta" />
<put-attribute name="header" value="/WEB-INF/views/templates/header.jsp" />
<put-attribute name="left" value="/WEB-INF/views/templates/left.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/templates/footer.jsp" />
<put-attribute name="main" value="/WEB-INF/views/home.jsp" />
</definition>
* 상속받아 변경부분만 재정의한다 *
* {디렉토리명}/{view이름} *
<definition name="*/*" extends="home">
<put-attribute name="main" value="/WEB-INF/views/{1}/{2}.jsp" />
<put-attribute name="title" value="{2}" />
</definition>
* {디렉토리명}/{디렉토리명}/{view이름} *
<definition name="member/admin/*" extends="home">
<put-attribute name="header" value="/WEB-INF/views/templates/admin/header.jsp" />
<put-attribute name="main" value="/WEB-INF/views/member/admin/{1}.jsp" />
<put-attribute name="title" value="{1}" />
</definition>
</tiles-definitions>
| cs |
ex) Controller
@Controller
public class TilesController {
* @PathVariable : 요청 url 정보를 변수로 할당 받는다
* 요청 url 과 일치하는 url 매핑 정보가 있으면(별도의 메서드가 있으면)
그 메서드가 실행되고 없으면 @PathVariable 적용 메서드가 실행된다
@RequestMapping("{viewName}.do")
public String showView(@PathVariable String viewName){
System.out.println("@PathVariable:"+viewName);
return viewName;
}
@RequestMapping("{dirName}/{viewName}.do")
public String showView(@PathVariable String dirName,@PathVariable String viewName){
System.out.println("@PathVariable:"+dirName+"/"+viewName);
return dirName+"/"+viewName;
}
@RequestMapping("member/admin/{viewName}.do")
public String showAdminLoginForm(@PathVariable String viewName){
System.out.println("@PathVariable showAdminLoginForm");
return "member/admin/"+viewName;
}
}
| cs |
ex) /WEB-INF/views/templates/layout.jsp
익숙하지 않아서 그런지 설정이 번거롭고
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html>
<html>
<head>
* title이 null인 경우는 무시된다 *
<title><tiles:insertAttribute name="title" ignore="true" /></title>
</head>
<body>
<div id="container">
<div id="header"><tiles:insertAttribute name="header" /></div>
<div id="left"><tiles:insertAttribute name="left" /></div>
<div id="main"><tiles:insertAttribute name="main" /></div>
<div id="footer"><tiles:insertAttribute name="footer" /></div>
</div>
</body>
</html>
| cs |
Controller에서 Return시킬때 기존의 Return방식과 혼동되는 부분이 매우 많다.
하지만 계속 사용하면서 익숙해질 필요가 있을정도로 유용한 Freamework이다!!
하지만 계속 사용하면서 익숙해질 필요가 있을정도로 유용한 Freamework이다!!
http://gerardnico.com |
관계형 데이터베이스의 설계에서 중복을 최소화하여
데이터를 구조화하는 프로세스를 정규화라고 한다.
제 1 정규화
복수의 속성값을 갖는 속성을 분리
제 2 정규화
주 식별자에 종속되지 않는 속성을 분리, 부분 종속 속성을 분리
제 3 정규화
속성에 종속적인 속성을 제거, 이전 종속 속성의 분리
데이터베이스는 점점 어려워진다.
일단 정규화는 제 5 정규화까지 있으며 (제 6 정규화까지 있다는 말이 있어 검색 중)
제 3 정규화까지만 완료되어도 어느 정도 정규화를 마쳤다고 본다고 한다.
기존의 DB를 쪼개고 나누던 방식에 정규화를 도입하여 조금 더 정밀하게
데이터베이스의 모델링을 할 수 있도록 도와준다.
결국은 이 모든 것이 데이터베이스의 무결성을 보장하는 것이 아닐까 싶다!
0 개의 댓글:
댓글 쓰기