[java web dev, spring, freemaker]

freemarker (개념, jsp와 차이, 문법, spring과 연동 설정, 예제)  

참조문서 : https://freemarker.apache.org/docs/index.html

1. freemarker란?

템플릿 엔진이다. 자바 객체에서 데이터를 생성해서 템플릿에 넣어주면 freemarker에서 템플릿에 맞게 변환하여 HTML 파일을 생성한다. 다른언어도 쓸 수 있지만, JVM 위에서 돌아가므로 주로 자바 서블릿에서 많이 쓴다. freemarker는 HTML 출력만을 위한 엔진은 아니고 텍스트라면 그 어떠한 것도 가능하다. 어떠한 포맷이라도 텍스트에서 텍스트로 변환해서 출력하기 때문이다.freemarker는 웹기반 프레임워크가 아니고 완전한 POJO기반 템플릿 엔진이다. .java + .ftl = .html 이다. 비슷한 템플릿 엔진으로는 velocity 가 있다.

장점 : JSP의 가장 큰 단점을 극복

JSP를 기반으로 EL, JSTL을 사용해도 view를 mvc구조로 아름답게 짤 수 있지만, Java EE에 종속적이라는 단점이 있다.

2. 문법

자세한 문법은 잘 정리된 문서를 보자

기본

  • FTL tag : <# >

  • 주석 : <#-- comment -->

  • <#list [Object code에서 key값 ] as [별칭할 값]>

  • 조건문 : <#if>

  • for 문

      <#list  1..10  as i > 
          ${i}
      <#assign i=i+1?int>
    
  • 변수 재정의 : <#setting [변수1]=[변수2]> , <#assign x=0>

  • 변수 선언, 할당 : <#assign x=0>

    경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
    어린이용이며, 설치가 필요없는 브라우저 게임입니다.
    https://s1004games.com

  • int형으로 변수 선언 : <#assign x=0 ? int>

  • x값을 출력 : ${x}

3. freemarker 설정

freemarkerConfig

  • templateLoaderPath : 프리마커 템플릿 경로 지정
  • defaultEncoding
  • freemarkerSettings : 프리마커 세부 설정을 지정

FreeMarkerViewResolver

  • contentType : 기본 컨텐츠타입을 지정
  • cache : 캐시 사용 여부
  • prefix : 뷰 페이지 경로를 지정
  • suffix : 뷰 페이지 확장자명을 입력. 입력하지 않으면 확장자까지 컨트롤러에서 해줘야함

설정 예제

pom.xml

<!-- freemarker -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker-gae</artifactId>
    <version>2.3.23</version>
</dependency>

applicationContext.xml

<!-- FreeMarker configuration -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/freemarker"/>
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="freemarkerSettings">
        <map>
            <entry key="template_update_delay" value="60000"/>
            <entry key="auto_flush" value="false"/>
            <entry key="default_encoding" value="UTF-8"/>
            <entry key="whitespace_stripping" value="true"/>
        </map>
    </property>
</bean>

dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="order" value="2" />
    <property name="cache" value="true" />
    <property name="suffix" value=".ftl" />
    <property name="contentType" value="text/html; charset=UTF-8" />
    <property name="exposeSpringMacroHelpers" value="true" />
</bean>

4. hello world

/WEB-INF/freemarker/hello.ftl

<#ftl encoding="utf-8"/>

<html>
<head>
    <title>네이바 프리마카</title>
</head>
<body>
    <h1>컨트롤러의 메세지: ${message}</h1>
</body>
</html>

HelloController.java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public ModelAndView hello(){
        String message = "프리마커를 해보자~";
        System.out.println("콘솔추울력");

        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello");
        mv.addObject("message", message);
        return mv;
    }
}

 



출처: https://sjh836.tistory.com/132 [빨간색코딩]

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
186 [Java Web programming] Spring boot(백엔드)와 React.js(프론트엔드)의 만남 - 프론트엔드 졸리운_곰 2021.08.29 98
185 [java][spring][mybatis] [MyBatis] resultType에 넣을 수 있는 값 정리 졸리운_곰 2021.08.17 303
184 [Java Spring web programming][자바 웹 개발] 10+ Free Open Source Projects Using Spring Boot file 졸리운_곰 2021.08.12 17
183 [java 웹 프로그래밍] Spring boot - Thymeleaf 기본 문법 졸리운_곰 2021.08.11 27
182 [Java 웹 프로그래밍] Tutorial: Thymeleaf + Spring file 졸리운_곰 2021.08.10 15
181 [java][spring boot][gradle] GitHub에서 스프링 부트 & Gradle 프로젝트 Import 하기! file 졸리운_곰 2021.08.05 74
180 [java, spring] Get HTTP POST Body in Spring Boot with @RequestBody 졸리운_곰 2021.06.18 15
179 [Java, jsp, jstl] [JSTL] Functions Tag - fn:contains() 사용하기 졸리운_곰 2021.06.09 38
178 [Java, jsp, jstl] [JSTL] List 갯수(size) 구하기 졸리운_곰 2021.06.02 161
177 [java, jsp, jstl] JSTL에서 변수두개사용하기 : jsp jstl list<> 두개를 졸리운_곰 2021.06.02 149
176 [Java Web, JSTL] 반복문 <c:forEach>, <c:forTokens> 졸리운_곰 2021.05.27 20
175 [Java Web] 조건문 <c:if>, <c:choose>, <c:when>, <c:otherwise> 졸리운_곰 2021.05.26 112
174 [java, web dev] forEach를 이용해서 JSTL로 출력하기 졸리운_곰 2021.05.24 70
173 [Java, Web dev] JSTL문법 <c:forEach> c:tag를 이용한 리스트 출력 file 졸리운_곰 2021.05.24 73
172 [Java][Web][Spring] vo 여러개 전달하기. LIST<VO> vo를 list 로 넘기기 / 받기 졸리운_곰 2021.05.20 1865
» [java web dev, spring, freemaker] freemarker (개념, jsp와 차이, 문법, spring과 연동 설정, 예제) file 졸리운_곰 2021.05.17 31
170 [java web spring] [Spring] web.xml - Filter url 제외시키기 졸리운_곰 2021.05.14 142
169 [Java Web Srping mvc] Spring MVC - home.jsp의 동작원리 file 졸리운_곰 2021.05.14 37
168 [java, web, jsp] Servlet/JSP에서 Ajax 사용 file 졸리운_곰 2021.05.13 437
167 [java][JAVA WEB] [JSP] JSTL 사용 방법 - 주요 태그 문법 정리 . file 졸리운_곰 2021.04.22 13
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED