티스토리 뷰
앞서 jsp to freemarker 전환에 대해 문법 외의 부분을 알아보았다.
이번에는 문법적인 측면은 어떤 부분이 다른지 살펴보자.
주석
jsp
<%--주석입니다--%>
freemarker
<#--주석입니다-->
tag library 선언
jsp
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
freemarker
<#assign tiles=JspTaglibs["http://tiles.apache.org/tags-tiles"]>
<#assign spring=JspTaglibs["http://www.springframework.org/tags"]>
jstl tag 같은 경우는 freemarker에 내장되어 있는 기능으로 사용하면 된다. tiles나 spring 같은 경우는 위와 같이 JspTaglibs라는것을 사용해서 선언할 수 있다.
page include
jsp
<%@ include file="/WEB-INF/jsp/include/pageImport.jsp"%>
freemarker
<#include "/WEB-INF/freemarker/include/pageImport.ftl">
contextPath 가져오기
jsp
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
freemarker
<#assign contextPath='${rc.contextPath}'>
contextPath를 가지고 오기 위해서는 jsp에서는 pageContext라는것을 썼다. 하지만 freemarker에서는 이와 같은 기능이 지원되지 않는다. (내가 못찾은건지..) 이것에 대한 대안은 전환 1탄에서 다룬 부분 중 tilesViewResolver 설정하는 부분이 있는데 이곳에서 urlBasedViewResolver.setRequestContextAttribute("rc") 라고 선언을 해 놓은것이 있다. 여기에 선언한 request context에 대한 값을 위와 같이 rc.contextPath 와 같은 방식으로 꺼내어 사용할 수 있다.
그리고 c:set 와 같은 변수를 정의하는 tag는 #assign으로 대체할 수 있다.
tag 사용법
jsp
<spring:eval var="basePath" expression="@environment.getProperty('base.path')" />
<tiles:insertAttribute name="contents" ignore="true" />
freemarker
<@spring.eval var="baseBase" expression="@environment.getProperty('base.path')" />
<@tiles.insertAttribute name="contents" ignore=true />
tag 는 사용법이 거의 비슷하여 일괄 치환이 가능할 정도이다. 아래에는 예외적인 것들을 기술했다.
그 밖의 것
위의 특징적인 것들을 빼고 나머지는 다른 분이 작성한 글을 참조하자. (사실 하나하나 쓰기 힘들다!)
jsp | freemarker |
<c:out value="${variable}" /> | ${variable} |
<spring:message code="messages.properties.entry"/> | <@spring.message 'messages.properties.entry'/> |
<c:url value="/relative/url"/> | <@spring.url '/relative/url'/> |
<c:if test="${items.recentUpdate}" > <span><fmt:message key="pls.browse.new"/></span> </c:if> |
<#if item.recentUpdate > <span><@spring.message "pls.browse.new"/></span> </#if> |
<c:forEach items="${dir}" var="item"> <a href="<c:url value="/browse/${item.absoluteFileName}"/>"> </c:forEach> |
<#list dir as item> a href="<@spring.url "/browse/${item.absoluteFileName}"/>"> </#list> |
<c:if test="${empty files && empty dir}"> | <#if (files?size > 0) || (dir?size > 0)> |
<li> <label for="contentFolder"> <fmt:message key="pls.configure.folder"/> </label> <form:errors path="contentFolder" cssClass="errors"/> </li> <li> <form:input path="contentFolder" size="30" maxlength="80"/> </li> |
<li> <@spring.bind "settings.contentFolder"/> <label for="contentFolder"> <@spring.message 'pls.configure.folder'/> </label> <@spring.showErrors ' ', 'errors'/> </li> <li> <@spring.formInput 'settings.contentFolder', 'size="30" maxlength="80"'/> </li> |
<form:form modelAttribute="profile" method="POST"> <form:errors cssClass="errors"/> | <@spring.bind "profile"/> <@spring.showErrors ' ', 'errors'/> |
<spring:theme var="css" code="css"/> <link rel="stylesheet" type="text/css" href="<c:url value="${css}/style.css"/>"/> |
<#assign css> <@spring.theme "css"/> </#assign> <link rel="stylesheet" type="text/css" href="<@spring.url '${css}/style.css'/>"/> |
출처 : https://maruhgar.blogspot.com/2011/01/converting-from-jsp-to-freemarker.html
끝!