cat tag


sitemesh + freemarker 기본 셋팅 Study

sitemesh는 기본적으로 jsp, freemarker, velocity 등 여러 템플릿 엔진이나 파일에 적용되어서 쓰이는데 이를 제대로 
사용하기 위해서는 별도의 설정이 필요하다. freemarker 기본 셋팅을 적용(sitemesh 2.4.2)


web.xml
<!-- sitemesh와 freemarker를 같이 사용하기 위한 설정 -->

<servlet>
<servlet-name>sitemesh-freemarker</servlet-name>
<servlet-class>
com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet
</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>


velocity는 써보지 않아서 모르겠고 jsp와 ftl은 같이 사용하기 위한 방법이 약간 다르다(freemarker 기준)

<!-- deco.ftl -->
<#assign decorator=JspTaglibs["http://www.opensymphony.com/sitemesh/decorator"]>
<#assign page=JspTaglibs["http://www.opensymphony.com/sitemesh/page"]>
<html>
<head>
<title><@decorator.title default="Home"/></title>
</head>
<body>
Board Test<br/>
<@decorator.body/><br/>
<a href="*.*">start page</a>
</body>
</html>
<!-- @decorator.title이나 @decorator.body에 내용이 삽입되어져서 유저에게 보여짐 -->

sitemesh 기본 설정 Study

sitemesh는 웹 어플리케이션 특성상 비슷한 구조의 웹페이지가 여럿 있을 수 있는데 이 같은 구조를 일일이 하드코딩하면 번거롭고 요구사항이나 특정 웹 페이지의 내용이 약간이라도 바뀌게 될 경우 모든 웹 페이지를 수정해줘야 하는 유지보수의 짜증남을 겪을 수 있는데 이같은 일을 줄이기 위해 sitemesh라는 놈을 사용하게 된다. jsp의 tiles와 비슷한 놈이다. 기본적인 설정파일이 가득가득 들어차 있는 WEB-INF에 설정파일을 작성


sitemesh.xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
<!-- decorators.xml 파일의 위치를 정의, 이하 ${decorators-file}에 쓰임 -->
<excludes file="${decorators-file}"/>
<page-parsers>
<parser content-type="text/html" 
      class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
</page-parsers>
<decorator-mappers>
<mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
<param name="property.1" value="meta.decorator" />
<param name="property.2" value="decorator" />
</mapper>
<!-- Mapper for localization -->
<mapper class="com.opensymphony.module.sitemesh.mapper.LanguageDecoratorMapper">
<param name="match.en" value="en" />
<param name="match.zh" value="zh" />
</mapper>
<!-- Mapper for browser compatibility -->
<mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
<param name="match.MSIE" value="ie" />
<param name="match.Mozilla/" value="ns" />
</mapper>
<mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
<param name="decorator" value="printable" />
<param name="parameter.name" value="printable" />
<param name="parameter.value" value="true" />
</mapper>
<mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
<param name="decorator.parameter" value="decorator" />
<param name="parameter.name" value="confirm" />
<param name="parameter.value" value="true" />
</mapper>
<mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
<param name="config" value="${decorators-file}" />
</mapper>
</decorator-mappers>
</sitemesh>
<!-- sitemesh.xml은 siteMesh에게 데코레이션에 사용될 적합한 데코레이션 파일을 선정해 주는 역할을 담당 -->



decorators.xml
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/WEB-INF/decorators">
<decorator name="introFtl" page="deco.ftl">
<pattern>/-</pattern>
</decorator>
</decorators>
<!-- 데코레이션 파일과 url pattern을 설정 -->
<!-- 데코레이션 파일은 /WEB-INF/decorators 폴더 밑에 존재(sitemesh.xml에 정의) -->
<!-- 어떤 요청이 발생해도 deco.ftl 이라는 데코레이터 삽입 -->



web.xml에 필터 추가
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<!-- 모든 요청이 들어오면 sitemesh 필터링 -->
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/-</url-pattern>
</filter-mapping>

Maven Project 기본구조 Study
































@Autowired 어노테이션 기본 설정 Spring Framework

@Autowired 이라는 단어를 그대로 풀이하자면 자동으로 와이어링을 해주겠다는 것이다.

이는 XML(ApplicationContext)에 따로 빈을 작성해서 DI해주는 작업을 하는 대신에 DI받고자 하는 객체나 메소드에 Autowired 어노테이션을 명시적으로 작성한다. Autowired 어노테이션을 객체나 메소드의 앞에 명시적으로 작성했다면 해당 객체가 DI를 받기 위해 setter 메소드를 작성해서 사용할 필요가 없다. DI를 받기 위해 존재해야 하는 것이 setter 메소드라는 존재인데 이는 XML에서 DI를 해서 빈을 넘겨주면 *.java 파일에서 빈을 받기 위해 생성자나 setter 메소드가 필요한 것인데 Autowired 어노테이션이 이 작업을 하지 않아도 된다고 알려주는 것이다.

단, Autowired 어노테이션을 사용하기 위해 XML에 별도의 설정이 필요하다.
XML(ApplicationContext)에 <context:annotation-config/> 작성


--Before--

public class BoardController {
private BoardService boardService;
public void setBoardService(BoardService boardService) {
this.boardService = boardService;
}

public BoardService getBoardService() {
return boardService;
}
...
}

<bean id="boardController" class="board.controller.BoardController">
<property name="boardService" ref="boardServiceImpl" />
</bean>
프로퍼티에 boardServiceImpl로 등록이 되어 있는데 이는 빈으로 따로 작성



--After--

public class BoardController {
@Autowired
private BoardService boardService;
...
}

<context:annotation-config/>    
<bean id="boardController" class="board.controller.BoardController"/>

DI를 받으려고 하는 bean도 작성
작성해주지 않으면 DI받으려고 할때 bean을 찾지 못한다고 에러메시지 출력
<bean id="boardServiceImpl" class="board.service.BoardServiceImpl"/>


FreeMarker 잡담 끄적끄적

음 스프링에서 뷰 리졸버가 제공되는지 모르고 몇시간동안 뻘짓했당 ㅇㅅㅇ
스프링 좋다 ㅇㅅㅇ
어렵긴 하지만 ㅋㅋㅋ

1 2 3 4 5