Loading...
Spring Framework Reference Documentation 7.0.2의 XSLT Views의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
XSLT는 XML을 위한 transformation language이며 web 애플리케이션 내에서 view 기술로서 인기가 있습니다. XSLT는 애플리케이션이 자연스럽게 XML을 다루거나 model이 쉽게 XML로 변환될 수 있는 경우 view 기술로서 좋은 선택이 될 수 있습니다.
다음 section은 Spring Web MVC 애플리케이션에서 XML document를 model data로 생성하고 이를 XSLT로 transformation하는 방법을 보여 줍니다.
이 example은 Controller에서 word list를 생성하고 이를 model map에 추가하는 사소한 Spring 애플리케이션입니다. 이 map은 우리의 XSLT view의 view name과 함께 반환됩니다.
Spring Web MVC의 Controller 인터페이스에 대한 자세한 내용은 Annotated Controllers를 참조하십시오. XSLT controller는 word list를 transformation을 위한 simple XML document로 변환합니다.
설정은 simple Spring web 애플리케이션에 대한 standard입니다. MVC 설정은 XsltViewResolver bean과 일반적인 MVC 어노테이션 설정을 정의해야 합니다.
다음 example은 이를 수행하는 방법을 보여 줍니다.
1@EnableWebMvc 2@ComponentScan 3@Configuration 4public class WebConfig implements WebMvcConfigurer { 5 6 @Bean 7 public XsltViewResolver xsltViewResolver() { 8 XsltViewResolver viewResolver = new XsltViewResolver(); 9 viewResolver.setPrefix("/WEB-INF/xsl/"); 10 viewResolver.setSuffix(".xslt"); 11 return viewResolver; 12 } 13}
1@EnableWebMvc 2@ComponentScan 3@Configuration 4class WebConfig : WebMvcConfigurer { 5 6 @Bean 7 fun xsltViewResolver() = XsltViewResolver().apply { 8 setPrefix("/WEB-INF/xsl/") 9 setSuffix(".xslt") 10 } 11}
또한 word-generation logic을 캡슐화하는 Controller가 필요합니다.
Controller logic은 @Controller class에 캡슐화되어 있으며, handler 메서드는 다음과 같이 정의됩니다.
1@Controller 2public class XsltController { 3 4 @RequestMapping("/") 5 public String home(Model model) throws Exception { 6 Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 7 Element root = document.createElement("wordList"); 8 9 List<String> words = Arrays.asList("Hello", "Spring", "Framework"); 10 for (String word : words) { 11 Element wordNode = document.createElement("word"); 12 Text textNode = document.createTextNode(word); 13 wordNode.appendChild(textNode); 14 root.appendChild(wordNode); 15 } 16 17 model.addAttribute("wordList", root); 18 return "home"; 19 } 20}
1import org.springframework.ui.set 2 3@Controller 4class XsltController { 5 6 @RequestMapping("/") 7 fun home(model: Model): String { 8 val document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() 9 val root = document.createElement("wordList") 10 11 val words = listOf("Hello", "Spring", "Framework") 12 for (word in words) { 13 val wordNode = document.createElement("word") 14 val textNode = document.createTextNode(word) 15 wordNode.appendChild(textNode) 16 root.appendChild(wordNode) 17 } 18 19 model["wordList"] = root 20 return "home" 21 } 22}
지금까지 우리는 DOM document를 생성하고 이를 Model map에 추가했을 뿐입니다. 또한 XML file을 Resource로 load하여 custom DOM document 대신 사용할 수도 있습니다.
object graph를 자동으로 'domify'하는 software package들이 존재하지만, Spring 내에서는 model로부터 DOM을 원하는 방식으로 생성할 수 있는 완전한 flexibility를 가집니다. 이는 DOMification process를 관리하는 tool을 사용할 때 발생할 수 있는, XML transformation이 model data 구조에서 너무 큰 역할을 하게 되는 위험을 방지합니다.
마지막으로, XsltViewResolver는 “home” XSLT template file을 resolve하고 DOM document를 이에 merge하여 우리의 view를 생성합니다. XsltViewResolver 설정에 표시된 것처럼, XSLT template는 war file의 WEB-INF/xsl directory에 존재하며 xslt file extension으로 끝납니다.
다음 example은 XSLT transform을 보여 줍니다.
1<?xml version="1.0" encoding="utf-8"?> 2<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 4 <xsl:output method="html" omit-xml-declaration="yes"/> 5 6 <xsl:template match="/"> 7 <html> 8 <head><title>Hello!</title></head> 9 <body> 10 <h1>My First Words</h1> 11 <ul> 12 <xsl:apply-templates/> 13 </ul> 14 </body> 15 </html> 16 </xsl:template> 17 18 <xsl:template match="word"> 19 <li><xsl:value-of select="."/></li> 20 </xsl:template> 21 22</xsl:stylesheet>
앞의 transform은 다음 HTML로 render됩니다.
1<html> 2 <head> 3 <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4 <title>Hello!</title> 5 </head> 6 <body> 7 <h1>My First Words</h1> 8 <ul> 9 <li>Hello</li> 10 <li>Spring</li> 11 <li>Framework</li> 12 </ul> 13 </body> 14</html>
XML Marshalling
MVC Config