<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>anarch&#45784;&#51032; &#45432;&#53944;</title>
    <link>http://anarch.springnote.com/pages</link>
    <description>anarch&#45784;&#51032; &#45432;&#53944;</description>
    <language>ko-KR</language>
    <item>
      <title>SView : S(cala|imple) View for Spring MVC = {</title>
      <description>&lt;h3&gt;SView : S(cala|imple) View for Spring MVC&amp;nbsp;&lt;/h3&gt;
&lt;h4&gt;&#46308;&#50612;&#44032;&#45716; &#47568;&lt;/h4&gt;
&lt;p&gt;smalltalk&#48512;&#53552; &#49884;&#51089;&#46108; MVC &#54056;&#53556;&#51008; SoC(Separation of Concerns, &#44288;&#49900; &#48516;&#47532;)&#51060;&#46972;&#45716; &#44288;&#51216;&#50640;&#49436; &#51025;&#50857; &#54532;&#47196;&#44536;&#47016;&#51032; &#48373;&#51105;&#46020;&#47484; &#44288;&#47532; &#54624;&#49688; &#51080;&#45716; &#50500;&#53412;&#53581;&#52432; &#54056;&#53556;&#51004;&#47196; &#51064;&#44592;&#44032; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; &#50937;&#50640;&#49436;&#45716; MVC &#54056;&#53556;&#51012; &#44396;&#54788;&#54620; &#47566;&#51008; &#54532;&#47112;&#51076;&#50892;&#53356;&#44032; &#51080;&#45716;&#45936;, &#45796;&#47480; &#45824;&#48512;&#48516;&#51032; &#50937; &#54532;&#47112;&#51076;&#50892;&#53356;&#50752; &#47560;&#52268;&#44032;&#51648;&#47196; Spring WebMVC&#45716; &#50668;&#47084; &#48624;/&#54532;&#47532;&#51232;&#53580;&#51060;&#49496; &#44592;&#49696;&#51012; &#53685;&#54633;&#54616;&#50668; &#49324;&#50857;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Scala&#45716;&amp;nbsp; JavaVM&#51060;&#45208; .NET CLR&#50948;&#50640;&#49436; &#46041;&#51089;&#54616;&#45716; &#44061;&#52404;&#51648;&#54693; &#54532;&#47196;&#44536;&#47000;&#48141;&#44284; &#54632;&#49688;&#54805; &#54532;&#47196;&#44536;&#47000;&#48141;&#51012; &#54844;&#54633;&#54620; multi-paradigm &#50616;&#50612;&#51077;&#45768;&#45796;.&amp;nbsp; &#50668;&#47084;&#44032;&#51648; &#55141;&#48120;&#47196;&#50868; &#53945;&#51669;&#51060; &#51080;&#51648;&#47564;, &#44061;&#52404;&#51648;&#54693; &#44592;&#48152;&#51032; &#54056;&#53556; &#47588;&#52845;&#44284; &#50616;&#50612; &#49888;&#53469;&#49828;&#52264;&#50896;&#50640;&#49436; &#51648;&#50896;&#54616;&#45716; XML Processing&#51008; XML &#52376;&#47532;&#50640; &#50857;&#51060;&#54620; &#53945;&#51669;&#51060; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#50948;&#51032; &#51060;&#47084;&#54620; &#53945;&#51669;&#46308;&#51012; &#51060;&#50857;&#54616;&#50668; &amp;nbsp;SpringMVC&#51032; View&#51012; Scala&#51032; XML Processing&#51012; &#51060;&#50857;&#54644;&#49436; &#44396;&#54788;&#54644;&#48372;&#50520;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#44288;&#47144; &#49548;&#49828;&#45716; &lt;a href="http://github.com/anarcher/sview/tree/master"&gt;http://github.com/anarcher/sview/tree/master&lt;/a&gt; &#50640; &#51080;&#51004;&#47728;, git&#51012; &#51060;&#50857;&#54644;&#49436; &#48155;&#51004;&#49892;&#49688; &#51080;&#49845;&#45768;&#45796;. ( &lt;code&gt;git clone git://github.com/anarcher/sview.git&lt;/code&gt; )&lt;/p&gt;
&lt;h4&gt;SpringMVC&#51032; View,ViewResolver&lt;/h4&gt;
&lt;p&gt;&#45824;&#44060;&#51032; MVC &#54532;&#47112;&#51076;&#50892;&#53356;&#44032; &#44536;&#47084;&#54616;&#46319;&#51060; Spring WebMVC&#46020; View&#51012; &#49440;&#53469;&#54616;&#45716; &#44592;&#45733;&#51012; &#51228;&#44277;&#54633;&#45768;&#45796;. &#51060; &#48512;&#48516;&#50640; &#45824;&#54620; &#51473;&#50836;&#54620; &#46160;&#44060;&#51032; &#51064;&#53552;&#54168;&#51060;&#49828;&#44032; &#51080;&#45716;&#45936;, org.springframework.web.servlet.View&#50752; org.springframework.web.servlet.ViewResolver&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;ViewResolver&#51008; &#47568; &#44536;&#45824;&#47196; viewName &#44284; &#49892;&#51228; View&#51012; &#44208;&#51221;&#54644; &#51452;&#45716; &#44061;&#52404;&#51077;&#45768;&#45796;. View&#45716; &#45336;&#50612;&#50728; Request&#51012; &#54644;&#45817; View &#44396;&#54788;&#52404;&#50640;&#44172; &#50948;&#51076;&#54616;&#50668; &#52376;&#47532;&#54616;&#45716; &#44061;&#52404;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; ViewResolver&#45716; &#45824;&#44060; Ordered &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#44396;&#54788;&#54616;&#50668; &#50668;&#47084; ViewResolver&#51012;&amp;nbsp; &#46321;&#47197;&#54616;&#50668; &amp;nbsp;&#49324;&#50857; &#54624; &#49688; &#51080;&#44172; &#44396;&#54788;&#54633;&#45768;&#45796;. (Chain of responsibility)&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;lt;bean id="sviewBeanNameViewResolver" class="sview.SViewBeanNameViewResolver"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="order" value="1" /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="prettyPrint" value="true" /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="sviewFactoryBeanName" value="sviewSpringBeanFactory" /&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;bean id="sviewSpringBeanFactory" class="sview.SViewSpringBeanFactory"&amp;gt;&amp;lt;/bean&amp;gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="viewClass"&amp;gt;&amp;lt;value&amp;gt;org.springframework.web.servlet.view.JstlView&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="prefix"&amp;gt;&amp;lt;value&amp;gt;/WEB-INF/views/&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="suffix"&amp;gt;&amp;lt;value&amp;gt;.jsp&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ViewResolver&#51032; &#44396;&#54788;&#49345;&#49549;&#51012; &#54616;&#47140;&#47732;&amp;nbsp; View resolveViewName(String viewName,Locale locale)&#51060;&#46972;&#45716; &#47700;&#49548;&#46300;&#47484; &#44396;&#54788;&#54644;&#50556; &#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51593; &#51204;&#45804;&#48155;&#51008; ViewName&#51004;&#47196; View&#51012; &#44208;&#51221;&#54644; &#45804;&#46972;&#45716; &#48512;&#48516;&#51060;&#46972;&#44256; &#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;public class SViewBeanNameViewResolver extends WebApplicationObjectSupport implements ViewResolver,Ordered {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private final static String DELIMITER = "sview:";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private int order = Integer.MAX_VALUE;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private String sviewFactoryBeanName = "sviewSpringBeanFactory";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private boolean isPrettyPrint = true;&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setOrder(int order) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.order = order;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getOrder() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return order;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSviewFactoryBeanName(String sviewFactoryBeanName) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.sviewFactoryBeanName = sviewFactoryBeanName;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setPrettyPrint(boolean isPrettyPrint) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.isPrettyPrint = isPrettyPrint;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public View resolveViewName(String viewName,Locale locale) throws Exception {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(viewName.indexOf(DELIMITER) &amp;lt; 0) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sviewName = viewName.substring(viewName.indexOf(DELIMITER)+6);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebApplicationContext ctx = super.getWebApplicationContext();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SViewFactory sviewFactory = (SViewFactory) ctx.getBean(this.sviewFactoryBeanName);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewAdapter view = new ViewAdapter();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; view.setSViewName(sviewName);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; view.setSViewFactory(sviewFactory);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; view.setPrettyPrint(isPrettyPrint);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return view;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&#50948;&#51032; &#53076;&#46300;&#45716; ViewResolver&#51032; &#44396;&#54788;&#53364;&#47000;&#49828;&#51004;&#47196;, viewName&#51473; DELIMITER&#51004;&#47196; &#49884;&#51089;&#46104;&#45716; viewName&#51064;&#51648;&#47484; &#44160;&#52636;&#54616;&#44256;, &#49828;&#54532;&#47553; &#52968;&#53581;&#49828;&#53944;&#50640;&#49436; &#54644;&#45817; &#51060;&#47492;&#51004;&#47196; &#46321;&#47197;&#46108; sviewFactory&#51012; &#50619;&#50612; &#50741;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;ViewAdapter &#45716; View &#51064;&#53552;&#54168;&#51060;&#49828;&#51032; &#44396;&#54788;&#53364;&#47000;&#49828;&#51060;&#44256; &#51204;&#45804;&#48155;&#51008; sviewFactory&#51012; &#44032;&#51648;&#44256; &#54644;&#45817; sview&#51012; &#50619;&#50612;&#49436;, &#47004;&#45908;&#47553;&#54616;&#45716;(sviewRenderer)&#54616;&#45716; &#52293;&#51076;&#51060; &#51080;&#49845;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Scala&#51032; XML Processing&lt;/h4&gt;
&lt;p&gt;Scala&#51032; XML Processing&#51008; xml&#51012; &#47928;&#48277; &#49888;&#53469;&#49828;&#52376;&#47100; &#49324;&#50857;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;. &#53945;&#55176; xml&#51012; &#53076;&#46300;&#49345;&#50640; &#51089;&#49457;&#54616;&#47732; scala &#52980;&#54028;&#51068;&#47084;&#44032; xml &#49888;&#53469;&#49828;&#47484; scala.xml&#50640; &#51080;&#45716; &#44061;&#52404;&#47196; &#44368;&#52404;&#54644;&#51469;&#45768;&#45796;. &#51221;&#54869;&#54620; &#48708;&#44368;&#45716; &#50500;&#45768;&#51648;&#47564;, &#50864;&#47532;&#44032; &#47928;&#51088;&#50676;&#51012; &#48320;&#49688;&#50640; &#54624;&#45817; &#54624;&#46412;, String s = "hello" &#44284; String s = new String("hello")&#50752; &#44057;&#51008; &#44163; &#52376;&#47100;, scala&#50640;&#49436;&#45716; val xml =&amp;lt;xml&amp;gt;hello&amp;lt;/xml&amp;gt;&#51060; val xml = Elem(null, "xml", Null, TopScope,Text("hello"))&#50752; &#44057;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; &#45236;&#51109;&#46108; &#54364;&#54788;(embedded expresions)&#51012; &#49324;&#50857;&#54616;&#47732;&amp;nbsp; &#48324;&#46020;&#51032; &#53596;&#54540;&#47551; &#50644;&#51652;&#51012; &#49324;&#50857;&#54616;&#51648; &#50506;&#50500;&#46020; &#46112; &#51221;&#46020;&#47196; XQuery&#51012; &#49324;&#50857;&#54616;&#45716; &#46319;&#54620; xml &#52376;&#47532;&#44032;&amp;nbsp; &#50857;&#51060;&#54644; &#51656;&#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;nbsp;val date = &amp;lt;date&amp;gt;{ df.format(new java.util.Date()) }&amp;lt;/date&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Console.println(date)&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Hello World&lt;/h4&gt;
&lt;p&gt;sview&#51012; &#51060;&#50857;&#54620; Hello World&#51012; &#52636;&#47141;&#54616;&#45716; &#44036;&#45800;&#54620; &#54532;&#47196;&#44536;&#47016;&#51012; &#47564;&#46308;&#50612; &#48372;&#44192;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;Spring2.5 &#51032; AnnotationBased Controller&#50752; DI&#51012; &#49324;&#50857;&#54633;&#45768;&#45796;. &#50864;&#49440; SpringMVC&#51032; View,ViewResolver&#50640; &#45208;&#50724;&#45716; &#49444;&#51221;&#51012; springmvc-context.xml&#50640; &#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#44536;&#47532;&#44256; MVC&#51032; Controller&#44284; View&#51012; &#51089;&#49457;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;@Controller&lt;br /&gt;
public class IndexController&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @RequestMapping("/index.sview")&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public String indexScala(ModelMap models) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Model model = new Model();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.setName("HELLO WORLD");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; models.addAttribute("model",model);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "sview:index:sampleLayout";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;IndexController.java&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;@Component&lt;br /&gt;
@Scope("prototype")&lt;br /&gt;
class Index(b:ViewBinding) extends SViewContent(b){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def head()&amp;nbsp; = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt; this is index &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def content() = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val m : Model = b.getModels.get("model").asInstanceOf[Model]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val df : java.text.DateFormat = java.text.DateFormat.getDateInstance()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { head }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt; this is index List ! &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt; { m.getName } &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt; today is { df.format(new java.util.Date()) } &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;index.scala&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IndexController&#51032; indexScala&#50640;&#49436; &#47532;&#53556;&#54616;&#45716;&amp;nbsp; viewName&#51060; "sview:index:sampleLayout"&#51077;&#45768;&#45796;. &#50526;&#51032; prefix&#45716; sviewResolver&#50640;&#49436; &#44160;&#52636;&#54616;&#45716; &#50857;&#46020;&#47196; &#50416;&#51060;&#44256;, index:sampleLayout&#51008; &#44033;&#44033;&amp;nbsp; SView&#51032; &#51060;&#47492;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;sampleLayout.scala&#45716; SiteMesh&#52376;&#47100;&amp;nbsp; index&#51032; html&#51032; head&#50752; body&#51012; &#51088;&#49888;&#51032; head&#50752; body&#51004;&#47196; &#52628;&#44032;&#54616;&#50668; &#52636;&#47141;&#54616;&#44172; &#46121;&#45768;&#45796;. &#44036;&#45800;&#54620; &#47112;&#51060;&#50500;&#50883; &#44592;&#45733;&#51060;&#46972;&#44256; &#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;@Component&lt;br /&gt;
@Scope("prototype")&lt;br /&gt;
class SampleLayout(b:ViewBinding,v:SView) extends SViewComposite(b,v) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def content() = {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;html&amp;gt;&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; &amp;lt;head&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; {&amp;nbsp; v.content \\ "head" \\ "_" }&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; &amp;lt;body&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; { v.content \\ "body" \\ "_" }&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style="margin-left: 4em;"&gt;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; }&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;sampleLayout.scala&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="&#44536;&#47548;_3.png" class="attachment" src="/pages/1574342/attachments/688366" alt="&#44536;&#47548;_3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&#45824;&#47029;&#51201;&#51064; &#44396;&#49457; &#50836;&#49548;&lt;/h4&gt;
&lt;p&gt;&lt;img class="attachment" title="sview-pattern-dia.jpg" src="/pages/1574342/attachments/688268" alt="sview-pattern-dia.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;SView&amp;nbsp;&lt;/h5&gt;
&lt;p&gt;SView&#45716;&amp;nbsp; Scala&#51032; trait&#51077;&#45768;&#45796;. &#51088;&#48148;&#51032; Interface&#50640; &#54644;&#45817;&#54633;&#45768;&#45796;. SView&#50640;&#45716; &#45796;&#51020;&#44284; &#44057;&#51008; &#47700;&#49548;&#46300;&#44032; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;trait SView&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def doctype() : String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def contenttype() : String&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def content() : Elem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def render(render : SViewRenderer) : Unit&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;SView&#51008; View&#50640;&#49436; &#54596;&#50836;&#54620; &#54665;&#46041;&#51012; &#51221;&#51032;&#54633;&#45768;&#45796;. &#51060;&#51473; &#44592;&#48376;&#51201;&#51064; &#51221;&#48372;&#47484; &#51648;&#50896;&#54624;&#49688; &#51080;&#45716; &#44163;&#51008;&amp;nbsp; &#44396;&#54788; &#49345;&#49549;&#51004;&#47196; &#51228;&#44277;&#54616;&#44172; &#46121;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;abstract class AbstractSView extends SView {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def contenttype() : String = {"text/html"}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def doctype() : String = {""}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def render(render : SViewRenderer) : Unit = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; render.setContentType(contenttype())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; render.setDocType(doctype())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; render.setContent(content())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;SView,SViewContent,ViewComposite : Composite , case classes&lt;/h5&gt;
&lt;p&gt;SView,AbstractSView&#51012; &#49345;&#49549;&#48155;&#45716; &#53364;&#47000;&#49828;&#50640;&#45716; SViewContent&#50752; SViewComposite&#44032; &#51080;&#49845;&#45768;&#45796;. &#51060; &#46160; &#53364;&#47000;&#49828;&#45716; Scala&#51032; &#52992;&#51060;&#49828; &#53364;&#47000;&#49828;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;abstract case class SViewContent(binding : ViewBinding) extends AbstractSView {}&lt;br /&gt;
abstract case class SViewComposite(binding : ViewBinding , view : SView) extends AbstractSView {}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&#50612;&#46500; &#54056;&#53556;&#47588;&#52845;&#51012; &#54616;&#44592; &#50948;&#54644;&#49436; case class&#51004;&#47196; &#47564;&#46304; &#44148; &#50500;&#45768;&#50632;&#49845;&#45768;&#45796;.(&#52376;&#51020;&#50640;&#45716; &#54056;&#53556; &#47588;&#52845;&#51004;&#47196; Render&#51032; &#52293;&#51076;&#51012; &#45796;&#47476;&#44172; &#44396;&#49457;&#54616;&#47140;&#44256;&amp;nbsp; &#44536;&#47020;&#49845;&#45768;&#45796;.)&lt;/p&gt;
&lt;p&gt;&#52992;&#51060;&#49828; &#53364;&#47000;&#49828;&#45716; &#44061;&#52404; &#53440;&#51077;&#51012; &#54056;&#53556;&#51004;&#47196; &#48516;&#54644;(decomposition)&#54616;&#44592; &#46412;&#47928;&#50640; erlang&#51032; &#50528;&#47532;&#54000;(arity)&#52376;&#47100; &#54056;&#53556; &#47588;&#52845;&#50640; &#47588;&#52845;&#48320;&#49688;&#47196; &#50416;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#44536;&#47000;&#49436; &#54616;&#50948; &#44396;&#54788; &#53364;&#47000;&#49828;&#46308;&#51032; &#49373;&#49457;&#51088;&#50640; &#45824;&#54620; &#51228;&#54620;&#51012; &#51460;&#49688; &#51080;&#45716; &#51109;&#51216;&#51012; &#51060;&#50857;&#54664;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;SViewComposite&#45716; &#50948;&#51032; &#47112;&#51060;&#50500;&#50883;&#52376;&#47100; &#46608; &#45796;&#47480; SView&#51012; &#51064;&#51088;&#47196; &#50619;&#50612;&#49436; &#51088;&#44592; &#51088;&#49888;&#51032; content&#50640; &#52628;&#44032; &#54624;&#49688; &#51080;&#49845;&#45768;&#45796;. &#51593; &#44277;&#53685;&#51201;&#51064;&amp;nbsp; SView&#51012; &#49324;&#50857;&#54616;&#44592;&#46412;&#47928;&#50640; &#51204;&#52404;/&#48512;&#48516;&#51060;&#46972;&#45716; &#44396;&#51312;&#47484; &#49789;&#44172; &#44396;&#49457;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.(Compositie&#54056;&#53556;) Client&#44032; &#48372;&#44592;&#50640; Decorator&#54056;&#53556;&#52376;&#47100; &#54616;&#45208;&#51032; &#51064;&#53552;&#54168;&#51060;&#49828;&#51012; &#44032;&#51648;&#44256; &#45796;&#47480; &#44592;&#45733;&#51012; &#54616;&#45716; &#44163; &#52376;&#47100;, &#54252;&#54632;&#48155;&#51008; SView&#51032; &#45236;&#50857;&#51012; &#51088;&#44592; &#51088;&#49888;&#51032; content&#50640; &#52628;&#44032;&#54616;&#44592; &#46412;&#47928;&#50640; Decorator&#54056;&#53556;&#51032; &#49892;&#52404;&#54868;&#46972;&#44256;&#46020; &#49373;&#44033;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;h5&gt;SViewFactory,SViewSpringBeanFactory : AbstractFactory , ConcreteFactory&lt;/h5&gt;
&lt;p&gt;&amp;nbsp;SViewFactory&#45716; SView&#51012; &#49373;&#49457;&#54616;&#45716; &#52293;&#51076;&#51060; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;public interface SViewFactory {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; public SView getSView(String viewName,ViewBinding viewBinding);&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&#50668;&#44592;&#49436; ViewBinding&#51008; &#44396;&#54788;&#54056;&#53556;&#50640;&#49436; &#51060;&#50556;&#44592;&#54616;&#45716; &#54028;&#46972;&#48120;&#53552; &#44061;&#52404;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#50896;&#47000; View &#51064;&#53552;&#54168;&#51060;&#49828;&#45716; HttpServletRequest,HttpServletResponse&#50752; Model&#51012; &#51064;&#51088;&#47196; &#48155;&#45716; &#47700;&#49548;&#46300;&#44032; &#51080;&#49845;&#45768;&#45796;. ViewBinding&#51008; &#51060; &#51064;&#49688;&#47484; &#54028;&#46972;&#48120;&#53552;&#44061;&#52404;&#47196; &#54633;&#49457;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;SViewSpringBeanFactory&#51008; SViewFactory&#51032; &#51064;&#53552;&#54168;&#51060;&#49828; &#49345;&#49549;&#51012; &#54616;&#50668; SpringBeanContext&#50640;&#49436;&amp;nbsp;viewName&#51004;&#47196; SView&#51012; &#50619;&#50612;&#50741;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;public class SViewSpringBeanFactory extends WebApplicationObjectSupport implements SViewFactory {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private final String DEFAULT_VIEW_DELIMITER= ":";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public SView getSView(String viewName,ViewBinding viewBinding) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String[] str = viewName.split(DEFAULT_VIEW_DELIMITER);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sviewName = null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String scompositeViewName = null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(str.length &amp;gt;= 1 &amp;amp;&amp;amp; StringUtils.hasText(str[0])) sviewName = str[0];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(str.length &amp;gt;= 2 &amp;amp;&amp;amp; StringUtils.hasText(str[1])) scompositeViewName = str[1];&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebApplicationContext ctx = super.getWebApplicationContext();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SView sview = (SView) ctx.getBean(sviewName,new Object[]{viewBinding});&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(StringUtils.hasText(scompositeViewName)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SView sviewcomposite = (SView) ctx.getBean(scompositeViewName,&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new Object[]{viewBinding,sview});&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sviewcomposite;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sview;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;ViewAdapter : Adapter&lt;/h5&gt;
&lt;p&gt;SView&#51012; &#49345;&#49549;&#54620; &#44061;&#52404;&#46308;&#51008; &#51060;&#48120; &#49345;&#49549;&#54664;&#51004;&#48064;&#47196; View &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#49345;&#49549;&#54616;&#51648; &#50506;&#45716; &#54620; ViewResolver&#50640; &#52628;&#44032;&#54624;&#49688; &#50630;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#47932;&#47200; SView&#44032; View&#51012; extends&#54644;&#46020; &#46104;&#51648;&#47564;. ViewAdapter&#51012; &#49324;&#50857;&#54632;&#51004;&#47196;&#50024;, &#44592;&#51316;&#51032; &#53364;&#47000;&#49828;(SView)&#50640; &#45824;&#54620; &#48320;&#44221;&#51012; &#54616;&#51648; &#50506;&#44256;,&amp;nbsp;&#51204;&#54784; &#45796;&#47480; &#53440;&#51077;&#51032; &#53364;&#47000;&#49828;(View)&#52376;&#47100; &#49324;&#50857;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; &#51060;&#48512;&#48516;&#51008; &#49828;&#54532;&#47553; &#54532;&#47112;&#51076;&#50892;&#53356;&#51032; View Interface&#51032; render&#51032; Map model&#51060; &#51228;&#45320;&#47533; &#53440;&#51077; &#54028;&#46972;&#48120;&#53552;&#44032; &#46104;&#50612; &#50506;&#50500;&#49436;, Scala&#50640;&#49436; &#51064;&#53552;&#54168;&#51060;&#49828; &#49345;&#49549;&#51012; &#54616;&#51648; &#47803;&#54644;,&amp;nbsp;&#51204;&#54784; &#45796;&#47480; &#53440;&#51077;&#51064; View&#51064;&#52377;&#54616;&#45716; &#44061;&#52404;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;public class ViewAdapter implements View {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private final static String DEFAULT_CONTENT_TYPE = "text/html";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private String sviewName;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private SViewFactory sviewFactory;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private boolean isPrettyPrint = true;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private String contentType;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public ViewAdapter() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSViewName(String sviewName) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.sviewName = sviewName;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSViewFactory(SViewFactory sviewFactory) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.sviewFactory = sviewFactory;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setPrettyPrint(boolean isPrettyPrint) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.isPrettyPrint = isPrettyPrint;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getContentType() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return contentType;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void render(Map model, HttpServletRequest request,HttpServletResponse response)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;throws Exception {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewBinding viewBinding = new ViewBinding((Map&amp;lt;String,Object&amp;gt;) model,request,response);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SView sview = sviewFactory.getSView(sviewName,viewBinding);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.contentType = sview.contenttype();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SViewWriteRenderer renderer = new SViewWriteRenderer();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sview.render(renderer);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.setContentType(this.contentType);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintWriter out = response.getWriter();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; renderer.print(out,isPrettyPrint);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out.close();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;SViewRenderer , SViewWriteRenderer : Abstract Builder, Concrete Builder&lt;/h5&gt;
&lt;p&gt;&#44277;&#53685;&#51201;&#51064; &#50672;&#49328;&#51012; &#51221;&#51032;&#54620; AbstractSView&#51032; build()&#51032; &#54028;&#46972;&#48120;&#53552;&#47196; &#51204;&#45804;&#46104;&#45716; SViewRenderer&#45716; &#52636;&#47141;&#50640; &#54596;&#50836;&#54620; &#51221;&#48372;&#50640; &#45824;&#54620; &#47700;&#49548;&#46300;&#47564;&#51012; &#44032;&#51648;&#44256; &#51080;&#49845;&#45768;&#45796;. &#51593; Director&#51064; SView&#45716; Renderer&#44032; &#50612;&#46523;&#44172; &#54364;&#54788;&#54624;&#51648;&#50640; &#45824;&#54616;&#50668; &#50508;&#51648; &#47803;&#54633;&#45768;&#45796;.&amp;nbsp; SViewRenderer&#51032; &#44396;&#52404; &#53364;&#47000;&#49828;&#51064; SViewWriteRenderer&#45716; HttpServletResponse&#50640;&#49436; &#51204;&#45804; &#48155;&#45716; PrintWriter&#51012; &#51060;&#50857;&#54644;&#49436; &#54364;&#54788;&#54633;&#45768;&#45796;. &#47564;&#51068; &lt;code&gt;ServletOutputStream&lt;/code&gt;&#51060;&#45208; &#44592;&#53440; &#45796;&#47480; &#48169;&#49885;&#51004;&#47196;&#51032; &#54364;&#54788;&#51012; &#48148;&#44984;&#45908;&#46972;&#46020; &#48320;&#54868;&#45716; ViewAdpater&#50640;&#49436; &#45796;&#47480; &#48169;&#49885;&#51032; &#54364;&#54788;&#51012; &#54616;&#45716; Renderer&#51004;&#47196; &#44368;&#52404;&#47196; &#44397;&#54620;&#46121;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;trait SViewRenderer {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def setDocType(docType : String)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def setContentType(contentType : String)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def setContent(content : Elem)&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;public class SViewWriteRenderer implements SViewRenderer {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private String docType = "";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private String contentType = "";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private Elem content = null;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setDocType(String docType) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.docType = docType;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getContentType() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.contentType;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setContentType(String contentType) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.contentType = contentType;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setContent(Elem content) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.content = content;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void print(PrintWriter writer,boolean isprettyprint) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String result = null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isprettyprint == true) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrettyPrinter pp = new PrettyPrinter(120,4);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = pp.format(content);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = content.toString();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.print(docType);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.print(result);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&#47610;&#45716; &#47568;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&#51089;&#49457;&#54616;&#44256; &#45208;&#49436; &#54841;&#49884; &#51060;&#50752; &#48708;&#49847;&#54620; &#49373;&#44033;&#51012; &#54620; &#49324;&#46988;&#51060; &#51080;&#45716;&#51648; &#50508;&#50500;&#48372;&#45768;&#44620;&amp;nbsp; Object-Oriented Pattern Matching &#45436;&#47928;&#51012; &#51089;&#49457;&#54620; burak emir &#51032;&amp;nbsp; scalaservlet &#51060; &#51080;&#50632;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://burak.emir.googlepages.com/"&gt;http://burak.emir.googlepages.com&lt;/a&gt; &lt;a href="http://burak.emir.googlepages.com/scalaservlet.html"&gt;http://burak.emir.googlepages.com/scalaservlet.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&#44536;&#47532;&#44256; scala&#51032; &#50937; &#54532;&#47112;&#51076;&#50892;&#53356;&#51064; lift&#51032; SHtml&#50640;&#49436;&#46020; &#45796;&#51020;&#44284; &#44057;&#51060; &#49324;&#50857;&#54633;&#45768;&#45796;.&amp;nbsp; &lt;a href="http://github.com/dpp/liftweb/tree/master/lift/src/main/scala/net/liftweb/http/SHtml.scala"&gt;http://github.com/dpp/liftweb/tree/master/lift/src/main/scala/net/liftweb/http/SHtml.scala&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;XML/HTML&#51032; &#44033; &#45432;&#46300;&#47560;&#45796; &#44061;&#52404;&#47484; &#49373;&#49457;&#54616;&#44592; &#46412;&#47928;&#50640; &#51068;&#48152;&#51201;&#51064; JSP&#48372;&#45796; &#48708;&#50857; &#48156;&#49373;&#51060; &#47566;&#51008; &#46319; &#54633;&#45768;&#45796;. &#49892;&#51228; &#54596;&#46300;&#50640;&#49436; &#51201;&#50857;&#54616;&#47140;&#47732;, &#52880;&#49772;&#51204;&#47029;&#51060;&#46972;&#46304;&#44032; Scala&#51032; XML Processing&#47568;&#44256; &amp;nbsp; &#45796;&#47480; DSL&#51060;&#45208; Template &#50644;&#51652;&#51012; &#44396;&#49457;&#54624; &#54596;&#50836;&#46020; &#51080;&#45796;&#44256; &#49373;&#44033;&#54633;&#45768;&#45796;. SViewSpringBeanFactory&#50640;&#49436; sviewName&#50640; &#54644;&#45817;&#54616;&#45716; SView &#44061;&#52404;&#47484; &#50619;&#51648; &#47803;&#54664;&#51012; &#44221;&#50864;&#50640; &#51328;&#45908; &#47749;&#54869;&#54620; Exception(SViewNotFoundException &#46321;&#46321;)&#51012; &#48156;&#49373;&#54620;&#45796;&#45912;&#44032; &#54616;&#45716; &#48512;&#48516;&#44284; &#49457;&#45733;&#50640; &#45824;&#54620; &#48512;&#48516;&#51008; &#45796;&#49884; &#54620;&#48264; &#44256;&#47140;&#54644;&#48380;&#47564; &#54616;&#45796;&#44256; &#49373;&#44033;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#52376;&#51020; &#49373;&#44033;&#51008; &#51088;&#48148;&#50640;&#49436;&#51032;&amp;nbsp; &#46041;&#51201; &#49828;&#53356;&#47549;&#53944; &#50616;&#50612;&#51032; &#54952;&#44284;&#51201;&#51064; &#49324;&#50857;&#50640; &#51201;&#54633;&#54620; &#47112;&#51060;&#50612;&#44032; View&#44032; &#50500;&#45776;&#44620;&#54644;&#49436; View&#50640; &#45824;&#54620; &#44032;&#48333;&#44256; &#49772;&#50868; &#50616;&#50612;&#47484; &#52286;&#45796;&#44032; &#50668;&#44592;&#44620;&#51648; &#50772;&#49845;&#45768;&#45796;. :-) &#50937; &#54532;&#47196;&#44536;&#47000;&#48141;&#50640;&#49436; &#53945;&#55176; &#51088;&#48148; &#50937; &#54532;&#47196;&#44536;&#47000;&#48141;&#50640;&#49436; Html&#44284; &#45936;&#51060;&#53552;&#47484; &#48148;&#51064;&#46377; &#54616;&#45716; &#48169;&#48277;&#51008; &#47566;&#51648;&#47564;. &#54952;&#44284;&#51201;&#51004;&#47196;&amp;nbsp; &#44288;&#47532; &#44032;&#45733;&#54620; (&#53945;&#55176; &#53580;&#49828;&#53944; &#44032;&#45733;&#54620;) &#48624; &#44592;&#49696;&#51008; &#47566;&#51648; &#50506;&#50500; &#48372;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51648;&#44552;&#44620;&#51648; &#51069;&#50612; &#51452;&#49492;&#49436; &#44048;&#49324;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&#52280;&#44256;&#51088;&#47308;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/servlet/View.html"&gt;http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/servlet/View.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/servlet/ViewResolver.html"&gt;http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/servlet/ViewResolver.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.scala-lang.org/intro/xml.html"&gt;http://www.scala-lang.org/intro/xml.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://burak.emir.googlepages.com/scalaxbook.docbk.html"&gt;http://burak.emir.googlepages.com/scalaxbook.docbk.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
</description>
      <pubDate>Wed, 06 Aug 2008 10:38:40 +0900</pubDate>
      <link>http://anarch.springnote.com/pages/1574342</link>
      <guid>http://anarch.springnote.com/pages/1574342</guid>
    </item>
    <item>
      <title>WebWork&#51032; PageController Pattern&#50752; SiteMesh &#49324;&#50857; </title>
      <description>&lt;p&gt;&#51060;&#48264; &#54532;&#47196;&#51229;&#53944;&#45716; &#51060;&#47088;&#51200;&#47088; &#51060;&#50976;&#47196; &#54644;&#49436; Framework Stack&#51012; SiteMesh+WebWork+Spring+SqlMap&#51004;&#47196; &#44396;&#49457;&#54616;&#44172; &#46104;&#50632;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;Struts1&#51012; &#49324;&#50857;&#54624;&#46412; Webwork&#50640; &#45824;&#54620; &#44288;&#49900;&#51060; &#51080;&#50632;&#51648;&#47564;,Webwork&#51004;&#47196; &#49324;&#51060;&#53944;&#47484; &#48716;&#46377;&#54620; &#44221;&#54744;&#51060; &#51204;&#47924;&#54620; &#51200;&#47196;&#50024;&#45716; Struts1/SpringMVC &#49828;&#53440;&#51068;&#44284; &#51328; (&#47566;&#51060;) &#45796;&#47480; Webwork&#51060; &#49888;&#44592;&#54664;&#50632;&#49845;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; Webwork&#51008; PageController &#51060;&#46972;&#45716; &#54056;&#53556;&#51012; &#49324;&#50857;&#54624;&#49688; &#51080;&#45716;&#45936;&#50836;. &#44036;&#45800;&#54616;&#44172; &#47568;&#54644;, &#45824;&#44060;&#51032; WebMVC&#45716; Controller/Action&#51060; &#51473;&#50521; &#51665;&#44428;&#51201;&#51064; &#51228;&#50612;&#47484; &#50948;&#54644; View &#47112;&#51060;&#50612;&#44032; &#47004;&#45908;&#47553; &#46104;&#44592; &#51204;&#50640; &#51228;&#50612;&#47484; &#54616;&#51648;&#47564;. PageController &#54056;&#53556;&#51008; View&#50640;&#49436; &#53945;&#51221; Action&#51012; &#54840;&#52636; &#54624;&#49688; &#51080;&#45716;. &#51593; &#54168;&#51060;&#51648;&#51032; &#53945;&#51221; &#45436;&#47532;&#51201;&#51064; &#45800;&#50948;&#47484; &#51116;&#49324;&#50857;&#54616;&#44144;&#45208; &#54028;&#54000;&#49492;&#45789; &#54616;&#45716;&amp;nbsp;&amp;nbsp;&#51339;&#51008; &#48169;&#48277;&#51060; &#51080;&#49845;&#45768;&#45796;. &#49324;&#50857;&#48277;&#46020; &#47588;&#50864; &#44036;&#45800;&#54620;&#45936;&#50836;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;lt;div&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;ww:action name="noticeList" namespace="/tiles" executeResult="true" /&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;/div&amp;gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="mvc4.JPG" class="attachment" src="/pages/1308286/attachments/561814" alt="mvc4.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SiteMesh&#50752; &#54632;&#44760; &#51088;&#48148;&#50640;&#49436; &#47566;&#51060; &#49324;&#50857;&#54616;&#45716; Tiles(&#50896;&#47000; Struts&#51032; &#49436;&#48652; &#54532;&#47196;&#51229;&#53944;&#51060;&#50632;&#51648;&#47564;,Top Project&#51004;&#47196; &#49849;&#44201;&#46104;&#50632;&#49845;&#45768;&#45796;.)&#46020; &amp;nbsp; &#48708;&#49847;&#54620; &#44163;&#51012; &#44032;&#51648;&#44256; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; SpringFramework&#50752; &#54632;&#44760; Tiles &#49324;&#50857;&#54620;&#45796;&#47732;,&lt;/p&gt;
&lt;p&gt;org.springframework.web.servlet.view.tiles.ComponentControllerSupport&#51012; &#44396;&#54788;&#49345;&#49549;&#54644;&#49436; &#49789;&#44172; &#44396;&#49457;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;FrontController&#50640; &#48708;&#54644;, &#47751;&#44032;&#51648; &#49373;&#44033;&#54644;&#50556; &#54616;&#45716; &#48512;&#48516;&#51060; &#51080;&#49845;&#45768;&#45796;. &#50864;&#49440; &#51228;&#50612;&#51032; &#49440;&#54980;&#44032; &#48148;&#45068;&#44592; &amp;nbsp;&#46412;&#47928;&#50640;, Action&#50640; &#45824;&#54620; &#51228;&#50612;&#44032; &#49789;&#51648; &#50506;&#49845;&#45768;&#45796;. &#44032;&#47161;. X,Y,Z&#50640;&#49436; &#46041;&#51068;&#54620; &#53244;&#47532;&#47484; &#48156;&#49373;&#54620;&#45796;&#47732; &#54620; &#54168;&#51060;&#51648;&#47484; &#47004;&#45908;&#47553; &#54616;&#44592; &#50948;&#54644; &#46041;&#51068;&#54620; &#45936;&#51060;&#53552;&#47484; &#50619;&#44592; &#50948;&#54644; &#50424;&#47784;&#50630;&#45716; &#53300;&#47532;&#47484; &#45216;&#47532;&#44172; &#46121;&#45768;&#45796;. &#47932;&#47200; 1&#52488;&#52880;&#49772;&#44057;&#51008; &#44163;&#46321;&#51004;&#47196; &#54644;&#44208;&#51060; &#44032;&#45733;&#54633;&#45768;&#45796;&#47564;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#47932;&#47200; &#54620; &#54168;&#51060;&#51648;&#50640;&#49436; &#50668;&#47084; &#46021;&#47549;&#51201;&#51064; Action&#51060; &#51316;&#51116;&#54616;&#50668; &#54168;&#51060;&#51648;&#51032; &#44033; &#50836;&#49548;&#47484; &#51116;&#49324;&#50857;&#54616;&#45716; &#51068;&#46020; &#51080;&#51648;&#47564;, Sitemesh&#50752; &#44057;&#51008; &#54168;&#51060;&#51648; &#47112;&#51060;&#50500;&#50883;/&#45936;&#51060;&#53076;&#47112;&#51060;&#49496;&#51012; &#44396;&#49457;&#54616;&#45716; &#46972;&#51060;&#48652;&#47084;&#47532;&#47484; &#49324;&#50857;&#54624; &#44221;&#50864; &#48373;&#51105;&#54620; &#47112;&#51060;&#50500;&#50883;&#51060; &#50500;&#45772; &#44221;&#50864;, &#50500;&#51649;&#44620;&#51648;&#45716; &#53356;&#44172; &#49324;&#50857;&#54616;&#51648; &#50506;&#51012; &#46319; &#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#44536;&#47000;&#49436; &#51060;&#48264;&#50640; &#45796;&#49884; &#47112;&#51060;&#50500;&#50883;&#51012; &#51105;&#51012;&#46412; SiteMesh&#51032; Decorator&#47560;&#45796; Action&#51012; &#54616;&#45208;&#47564; &#46160;&#45716; &#48169;&#49885;&#51008; &#50612;&#46500;&#44032; &#49373;&#44033;&#54644;&#48420;&#49845;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="webwork-sitemesh-dia.png" class="attachment" src="/pages/1308286/attachments/563764" alt="webwork-sitemesh-dia.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#51593; SiteMesh/Decorator&#50640;&#49436; &#54840;&#52636;&#54616;&#45716; Webwork/Action&#51060; Result&#51012; &#44032;&#51648;&#44256; &#51080;&#51648; &#50506;&#44256;. &#45800;&#51648; &#54644;&#45817;&#54616;&#45716; &#51089;&#50629;&#51012; &#54620; &#54980; &#54868;&#47732;&#50640; &#48148;&#51064;&#46377;&#54624; &#44061;&#52404;&#47484; ServletRequest&#51032; &#49549;&#49457;(attribute)&#50640; &#45812;&#44592;&#47564; &#54616;&#44256; Decortator&#50640;&#49436; &#44536; &#51221;&#48372;&#47484; &#52636;&#47141;&#54616;&#45716; &#44163;&#51077;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#51593; &#51228;&#50612;&#44032; &#46160;&#44400;&#45936;&#51032; Action&#51004;&#47196;&#47564; &#45208;&#45572;&#50612; &#51648;&#45716; &#44163;&#51077;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;ww:action&amp;gt; &#53468;&#44536;&#50640;&#49436; result&#51012; &#49892;&#54665;&#54616;&#51648; &#50506;&#44592; &#50948;&#54644;&#49436; (executeResult="true"&#51004;&#47196;&#54644;&#46020; Action&#51032; execute()&#47700;&#49548;&#46300;&#51032; &#47532;&#53556;&#51060; NONE&#51060;&#44592; &#46412;&#47928;&#50640; view&#44032; &#48372;&#51060;&#51648; &#50506;&#49845;&#45768;&#45796;. )&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;lt;html&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;head&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;ww:action name="noticeList" namespace="/tiles" executeResult="false" /&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;/head&amp;gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;body&amp;gt;&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;lt;c:out value="${tileNotice}" /&amp;gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;public class NoticeTileAction extends ActionSupport {&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public String execute() throws Exception {&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;ServletActionContext().getRequest().setAttribute("tileNotice","hello world!");&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;return NONE;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Courier; font-size: 11px; line-height: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: courier; font-size: 12px; line-height: 24px; white-space: normal;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#49324;&#49892; &#48324;&#44144; &#50500;&#45772;&#45936;. &#44544;&#47564; &#44600;&#50612;&#51648;&#44256; &#44536;&#47548;&#47564; &#49373;&#44220;&#44400;&#50836;. :-) &#47932;&#47200; SiteMesh&#44032; &#50630;&#51060;&#46020; &#49324;&#50857;&#54624;&#49688; &#51080;&#45716; &#48169;&#48277;&#51077;&#45768;&#45796;. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#51221;&#47532;&#46020; &#50504;&#46104;&#50612; &#51080;&#44256; &#46160;&#49436;&#46020; &#50630;&#45716; &#44544; &#51069;&#50612; &#51452;&#49492;&#49436; &#44048;&#49324;&#54633;&#45768;&#45796;. (...)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&#44288;&#47144; &#47553;&#53356;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.opensymphony.com/webwork/wikidocs/action.html"&gt;http://www.opensymphony.com/webwork/wikidocs/action.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Webwork In Action&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Sun, 08 Jun 2008 03:12:52 +0900</pubDate>
      <link>http://anarch.springnote.com/pages/1308286</link>
      <guid>http://anarch.springnote.com/pages/1308286</guid>
    </item>
    <item>
      <title>Tabla - &#44036;&#45800;&#54620; &#53468;&#44536; &#44592;&#48152; &#53596;&#54540;&#47551; &#50976;&#54008;&#47532;&#54000; </title>
      <description>&lt;p&gt;Tabla&#45716; &#44036;&#45800;&#54620; &#53468;&#44536; &#44592;&#48152;&#51032; &#53596;&#54540;&#47551; &#50976;&#54008;&#47532;&#54000;&#51077;&#45768;&#45796;. &amp;nbsp;&#52968;&#53584;&#52768;&#51032; &#53945;&#51221;&#48512;&#48516;&#51012; &#47560;&#53356;&#50629;&#51012; &#51060;&#50857;&#54616;&#50668; &#52968;&#53584;&#52768;&#51032; &#45236;&#50857;&#51012; &#44032;&#44277;&#54616;&#44592; &#50948;&#54644;&#49436; &#51089;&#49457;&#54664;&#50632;&#49845;&#45768;&#45796;. :-)&lt;/p&gt;
&lt;h3&gt;&#44036;&#45800;&#54620; &#50696;&#51228;&lt;/h3&gt;
&lt;ol class="code"&gt;
&lt;li&gt;Tags tags = new Tags();&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tags.addTag(new NamedTag() {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; public String execute(ParseTag pt,TagContext tc) {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "hello world!";&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; public String tagName() { return "t:hello"; }&amp;nbsp;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;};&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Parser p = new Parser(tags);&lt;/li&gt;
&lt;li&gt;String result = p.parse("&amp;lt;t:hello /&amp;gt;");&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;gt;&amp;gt; hello world!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#53364;&#47000;&#49828;&#46308;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;1. Tag - &#53468;&#44536;&#51032; &#51064;&#53552;&#54168;&#51060;&#49828;. &amp;nbsp;&#53468;&#44536;&#51032; &#54665;&#46041;&#51012; &#51221;&#51032;&#54633;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;2. NamedTag - &#53468;&#44536;(Tag)&#51032; &#51064;&#53552;&#54168;&#51060;&#49828; &#49345;&#49549;. &amp;nbsp;&#53468;&#44536;&#51060;&#47492;(tagName)&#51012; &#46321;&#47197;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;3. Tags - &#53468;&#44536;&#46308;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;4. TagBinding - &#54028;&#49905;&#46108; &#52968;&#53584;&#52768;(Parse)&#50752; Tag&#51012; &#48148;&#51064;&#46377;(Binding)&#54616;&#45716; &#52293;&#51076;&#51060; &#51080;&#49845;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;5. TagContext - &#50808;&#48512; &#54872;&#44221;&#51060;&#45208; &#53468;&#44536; &#44036;&#51032; &#47928;&#47589;&#51201;&#51004;&#47196; &#44050;&#51012; &#51204;&#45804;&#54624;&#46412; &#49324;&#50857;&#46121;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;6. Parse - &#54028;&#49905;&#46108; &#52968;&#53584;&#52768;(Parse)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;7. ParseTag &amp;nbsp;- &#54028;&#49905;&#46108; &#52968;&#53584;&#52768;&#51473; &#53468;&#44536; &#51221;&#48372;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;8. Parser - &#54028;&#49436;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;9. ParseFailureException - &#54028;&#49905; &#49892;&#54056; &#50696;&#50808; &#49345;&#54889;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;10. utils.ParseTagRemover - &#53468;&#44536; &#49884;&#44536;&#45768;&#52376; &#51228;&#44144;&#51088; &#50976;&#54008;&#47532;&#54000;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#53468;&#44536; &#51221;&#51032; &#54616;&#44592;&lt;/h3&gt;
&lt;p&gt;&#53468;&#44536;&#47484; &#51221;&#51032;&#54616;&#45716; &#44148; &#47588;&#50864; &#49789;&#49845;&#45768;&#45796;. Tag,NamedTag&#51012; &#44396;&#54788;&#54616;&#47732; &#46121;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;Tag t = new Tag() {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; public String execute(ParseTag pt,TagContext tc) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return pt.getContent();&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; }&lt;/li&gt;
&lt;li&gt;};&lt;/li&gt;
&lt;li&gt;Tags tags = new Tags();&amp;nbsp;&lt;/li&gt;
&lt;li&gt;tags.addTag("t:*",t);&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&#50948;&#51032; &#53076;&#46300;&#45716; t:&#51004;&#47196; &#49884;&#51089;&#54616;&#45716; &#47784;&#46304; &#53468;&#44536;&#50640; &#48152;&#51025;&#54616;&#44172; &#46121;&#45768;&#45796;. &#47932;&#47200; &amp;nbsp;ParseTag.getTagName()&#51004;&#47196;&#45716; &#51221;&#54869;&#54620; &#53468;&#44536; &#51060;&#47492;&#51012; &#50619;&#51012;&#49688; &#51080;&#49845;&#45768;&#45796;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#54028;&#49905;&#46108; &#52968;&#53584;&#52768;&#51032; &#53468;&#44536;&#51221;&#48372; - ParseTag&lt;/h3&gt;
&lt;p&gt;&#47784;&#46304; &#53468;&#44536;&#45716; ParseTag&#50752; TagContext&#51060;&#46972;&#45716; &#54028;&#46972;&#48120;&#53552; &#44061;&#52404;&#47484; &#50619;&#44172; &#46121;&#45768;&#45796;. ParseTag&#51008; Parser&#44032; &#54028;&#49905;&#54620; &#52968;&#53584;&#52768;&#51473;&#50640; &#54788;&#51116; &#53468;&#44536;&#50640; &#54644;&#45817;&#54616;&#45716; &#50689;&#50669;&#51012; ParseTag&#50640; &#45812;&#50500;&#49436; &#51204;&#45804;&#54616;&#44172; &#46121;&#45768;&#45796;. &amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;class NewsDataTag implements NamedTag {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;public NewsDataTag(NewsDataService newsDataService) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.newsDataService = newsDataService;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;}&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;public String execute(ParseTag pt,TagContext tc) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;String size = pt.getTagAttrMap("size");&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; String category = pt.getTagAttrMap("category");&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; List&amp;lt;NewsData&amp;gt; newsData = newsDataService.findBy(size,category);&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return newsData.toBuildHtml();&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;}&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#53468;&#44536;&#51032; &#44544;&#47196;&#48268; &#50689;&#50669;? - TagContext&lt;/h3&gt;
&lt;p&gt;&#53468;&#44536;&#50752; &#53468;&#44536;(&#51473;&#52393;&#46108; &#53468;&#44536; &#46321;&#46321;)&#45208; &#53468;&#44536;&#47484; &#49892;&#54665;&#51473;&#51004;&#47196; &#44050;&#51012; &#51204;&#45804;&#54624;&#46412;&#44032; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;tags.add("t:container",new Tag() {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;public String execute(ParseTag pt,TagContext tc) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(Item item : items) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tc.addLocalAttribute("itemTitle",item.getTitle());&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tc.addLocalAttribute("itemUrl",item.getUrl());&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result.append(pt.getContent());&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tc.clearLocalAttibutes();&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return result.toString();&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/li&gt;
&lt;li&gt;});&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;tags.add("t:itemTitle",new Tag() {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; public String execute(ParseTag pt,TagContext tc) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String itemTitle = (String) tc.getLocalAttribute("itemTitle");&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(itemTitle != null) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return itemTitle;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return pt.getContent();&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;/li&gt;
&lt;li&gt;});&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;items: a,b,c&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;lt;t:containter &amp;gt;&amp;lt;t:itemTitle /&amp;gt;,&amp;lt;/t:container&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;gt;&amp;gt; a,b,c,&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#44592;&#53440;&lt;/h3&gt;
&lt;p&gt;&#47952; &#44536;&#47532; &#51096; &#47564;&#46308;&#50632;&#45796;&#44144; &#44536;&#47088;&#44148; &#50500;&#45768;&#51648;&#47564;. &#44536;&#47532;&#44256; &#47564;&#46304;&#51648; &#47751;&#45804;&#51060; &#51648;&#45208;&#49436; &#44536;&#45797; &#47672;&#47532;&#49549;&#50640; &#45224;&#50500; &#51080;&#45716; &#44163;&#51060; &#48324;&#47336; &#50630;&#44596; &#54616;&#45348;&#50836;. &#51328;&#45908; &#49688;&#51221;&#54624;&#44163;&#51008; &#47566;&#51008; &#46319; &#54633;&#45768;&#45796;&#47564;. :-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="/pages/1307938/attachments/561764" title="tabla-0.0.2-sources.jar" class="attachment"&gt;tabla-0.0.2-sources.jar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/pages/1307938/attachments/561764" title="tabla-0.0.2-sources.jar" class="attachment"&gt;&lt;/a&gt;&lt;a href="/pages/1307938/attachments/561766" title="tabla-0.0.2.jar" class="attachment"&gt;tabla-0.0.2.jar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Sat, 07 Jun 2008 02:19:02 +0900</pubDate>
      <link>http://anarch.springnote.com/pages/1307938</link>
      <guid>http://anarch.springnote.com/pages/1307938</guid>
    </item>
    <item>
      <title>&#49828;&#54532;&#47553;&#47196;&#44536; &#49324;&#51060;&#46300;&#48148;</title>
      <description>&lt;p&gt;&lt;img title="me-20080322-small.png" class="attachment" src="/pages/1060282/attachments/453248" alt="me-20080322-small.png" style="margin: 0pt 1em 0pt 0pt; float: left;" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: &#46027;&#50880;; font-size: medium;"&gt;&#38737;&#22825;&#63771;&#27969;&lt;/span&gt;-&lt;span style="font-size: medium;"&gt;&#23391;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;{{Recent Posts}}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-left: 1em;"&gt;&lt;a href="http://www.springnote.com/"&gt;&lt;img title="images/developer/springnote_2_120x60_1.jpg" src="http://www.springnote.com/images/developer/springnote_2_120x60_1.jpg" alt="images/developer/springnote_2_120x60_1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin-left: 1em;"&gt;&lt;a href="http://me2day.net/anarch"&gt;&lt;img class="attachment" title="me2banner_88_31_a.png" src="/pages/1060282/attachments/453258" alt="me2banner_88_31_a.png" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Sat, 12 Apr 2008 01:41:59 +0900</pubDate>
      <link>http://anarch.springnote.com/pages/1060282</link>
      <guid>http://anarch.springnote.com/pages/1060282</guid>
    </item>
    <item>
      <title>PHPSpec: PHP5 BDD Framework </title>
      <description>&lt;p&gt;&lt;a href="/pages/477606/attachments/211651" title="PHPSpec-20070918.zip" class="attachment"&gt;PHPSpec-20070918.zip&lt;/a&gt;&amp;nbsp;&#51200;&#48264;&#51452; &#47336;&#48708; &#49464;&#48120;&#45208; &#50640;&#49436; &#44053;&#44508;&#50689;&#45784;&#51032; BDD with JSSpec&#51012; &#46307;&#44256; &#51060;&#48264;&#50640; &#54616;&#45716; &#54532;&#47196;&#51229;&#53944;&#50640; &#50424;&#49688; &#50630;&#51012;&#44620; &#54644;&#49436; &#54616;&#45208; &#45824;&#52649; &#47564;&#46308;&#44256; &#51080;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060;&#48264; &#54532;&#47196;&#51229;&#53944;&#45716; PHP&#51064;&#45936;. &#44396;&#44544;&#47553;&#51012; &#54644;&#46020; PHP&#51004;&#47196; &#46108; BDD &#51221;&#48372;&#47484; &#54616;&#45208;&#46020; &#50619;&#51012;&#49688;&#44032; &#50630;&#50632;&#45796;.&lt;/p&gt;
&lt;p&gt;&#47952; &#45824;&#45800;&#54620;&#44163;&#46020; &#50500;&#45768;&#44256; &#51060;&#51228; &#47956;&#44032; &#46028;&#50500;&#44032;&#45716; &#49688;&#51456;&#51060;&#46972;&#49436; (&#44536;&#47532;&#44256; &#45212; PHP&#47484; &#44536;&#45796;&#51648; &#51339;&#50500;&#54616;&#51648; &#50506;&#45716;&#45796;. T_T)&lt;/p&gt;
&lt;p&gt;&lt;img class="attachment" title="capturedata5327672.png" src="/pages/477606/attachments/210389" alt="capturedata5327672.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class="attachment" title="capturedata2189591(1).png" src="/pages/477606/attachments/210396" alt="capturedata2189591(1).png" /&gt;&lt;/p&gt;
&lt;p&gt;&#52376;&#51020;&#50640; &#45320;&#47924; &#49444;&#44228;&#54620;&#45796;&#44256; &#51060;&#44163;&#51200;&#44163; &#45320;&#47924; &#52280;&#44256;&#54620;&#46319; &#54616;&#44592;&#46020; &#54616;&#44256;.. PHP&#51032; &#47672;&#52240; &#53945;&#51669;&#46308;&#51012; &#51228;&#45824;&#47196; &#49332;&#47532;&#51648; &#47803;&#54620;&#44144; &#44057;&#45796;. (&#44536;&#47088;&#44172; &#51080;&#45796;&#47732;.)&lt;/p&gt;
&lt;p&gt;&#44060;&#51064;&#51201;&#51004;&#47196; &#50864;&#49440; &#49324;&#50857;&#54644;&#48372;&#44256; &#51221;&#47532;&#47484; &#54644;&#50556;&#44192;&#45796;.&lt;/p&gt;
&lt;p&gt;&#44540;&#45936;. &#47928;&#51228;&#45716; &#50500;&#51649; &lt;strong&gt;BDD&#44032;&lt;/strong&gt; &#47956;&#51648; &#47784;&#47480;&#45796;&#45716;&#44144;!!!! (OTL.)&lt;/p&gt;
&lt;p&gt;&lt;a href="/pages/477606/attachments/210400" class="attachment" title="phpspec-20070915.tar.gz"&gt;&lt;/a&gt;&lt;a href="/pages/477606/attachments/211651" title="PHPSpec-20070918.zip" class="attachment"&gt;PHPSpec-20070918.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Tue, 18 Sep 2007 00:40:08 +0900</pubDate>
      <link>http://anarch.springnote.com/pages/477606</link>
      <guid>http://anarch.springnote.com/pages/477606</guid>
    </item>
    <item>
      <title>JSP 2.0&#51032; tagFile &#49324;&#50857;&#54616;&#44592; </title>
      <description>&lt;p&gt;&#52376;&#51020; JSP&#51004;&#47196; &#51089;&#50629;&#54624;&#46412;&#45716; PHP&#45208; &#45796;&#47480; &#49828;&#53356;&#47549;&#53944; &#50616;&#50612; &#52376;&#47100; &amp;nbsp;HTML &#49324;&#51060;&#49324;&#51060;&#50640; scriptlet&#51012; &#52628;&#44032;&#54664;&#50632;&#45796;. JSTL&#51060;&#45208; EL&#51060; &#51452;&#44032;&#46104;&#50612;&#49436; JSTL&#51060;&#45208; EL&#51004;&#47196; &#44396;&#49457;&#54616;&#44172; &#46104;&#50632;&#51648;&#47564;, JSTL&#51060;&#45208; EL&#51004;&#47196;&#45716; &#48512;&#51313;&#54620; &#48512;&#48516;&#51012; CustomTag&#51004;&#47196; &#47564;&#46308; &#54596;&#50836;&#44032; &#51333;&#51333; &#51080;&#45796;. &amp;nbsp;&#44536;&#47088;&#45936; Custom Tag&#51012; &#47564;&#46300;&#45716; &#44148; &#49373;&#44033;&#50808;&#47196; &#49436;&#48660;&#47551; &#53076;&#46300; &#51089;&#49457;&#54616;&#45716;&#44144;&#46993; &#48324; &#45796;&#47484;&#44144; &#44057;&#51008; &#51089;&#50629;&#51064; &#44221;&#50864;&#44032; &#47566;&#50500;&#49436; &#51221;&#47568; &#49324;&#50857;&#51060; &#47566;&#51008; &#53468;&#44536; &#50500;&#45768;&#46972;&#47732; &#48176;&#48372;&#45796; &#48176;&#44861;&#51060; &#45908; &#52964;&#51648;&#45716; &#44221;&#50864;&#44032; &#51080;&#45716; &#46319; &#54616;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51328; &#45734;&#44172; &#50508;&#50520;&#51648;&#47564;, JSP 2.0 &#50640;&#45716; TagFile&#51060;&#46972;&#45716; &#48512;&#48516;&#51060; &#52628;&#44032;&#46104;&#50632;&#45716;&#45936;. CustomTag&#51012; &#47564;&#46300;&#45716; &#48169;&#49885;&#51012; JSP &#54028;&#51068; &#47564;&#46308;&#45716; &#44163; &#52376;&#47100; &#47564;&#46308;&#47732; &#46104;&#45716;&amp;nbsp;&amp;nbsp;&#47588;&#50864; &#44036;&#45800;&#54620; &#48169;&#48277;&#51060;&#46972;&#49436; &#47751;&#44032;&#51648; &#47564;&#46308;&#50612;&#49436; &#49324;&#50857;&#54616;&#44256; &#51080;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;br class="khtml-block-placeholder" /&gt;&lt;/p&gt;
&lt;ol class="code" id=""&gt;
&lt;li&gt;
&lt;p style="margin: 0px; font-family: Monaco; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 174, 255);"&gt;&lt;span style="color: rgb(255, 125, 82);"&gt;&amp;lt;%@&lt;/span&gt; &lt;span style="color: rgb(125, 254, 254);"&gt;taglib&lt;/span&gt; &lt;span style="color: rgb(255, 129, 241);"&gt;prefix&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;=&lt;/span&gt;"html" &lt;span style="color: rgb(255, 129, 241);"&gt;tagdir&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;=&lt;/span&gt;"/WEB-INF/tags/html" &lt;span style="color: rgb(255, 125, 82);"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px; font-family: Monaco; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 174, 255);"&gt;&amp;lt;html:remove var="content" value="${data.content}" /&amp;gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;tag&#45716; /WEB-INF/tags/html/remove.tag&lt;/span&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="color: rgb(0, 51, 102);"&gt;&amp;lt;%@ tag body-content="empty" import="StringUtils" %&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&amp;gt;&lt;br /&gt;
&amp;lt;%@ attribute name="value" required="true" %&amp;gt;&lt;br /&gt;
&amp;lt;%@ attribute name="var"&amp;nbsp;&amp;nbsp; required="true" rtexprvalue="false" type="java.lang.String"&amp;nbsp; %&amp;gt;&lt;br /&gt;
&amp;lt;%@ variable name-from-attribute="var" alias="varName" scope="AT_END" %&amp;gt;&lt;br /&gt;
&amp;lt;%&amp;nbsp;&amp;nbsp;&lt;br /&gt;
String result = StringUtils.removeHtml(value);&lt;br /&gt;
jspContext.setAttribute("varName", result);&lt;br /&gt;
%&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; font-family: Monaco; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(255, 125, 82);"&gt;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; font-family: Monaco; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(255, 125, 82);"&gt;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; font-family: Monaco; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(255, 125, 82);"&gt;&lt;br class="khtml-block-placeholder" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;tag&#51032; body-content&#51008; empty&#51060;&#44256; jstl core &#53468;&#44536;&#47484; &#50416;&#47728;&amp;nbsp; &#53468;&#44536;&#51032; attribute&#51004;&#47196;&#45716; value,var &#51060;&#46972;&#45716; &#44050;&#51012; &#48155;&#51004;&#47728;, tag &#48150;&#51004;&#47196; var attribute&#51032; &#51060;&#47492;&#51004;&#47196; &#48320;&#49688;&#47484; &#49440;&#50616;&#54620;&#45796;&#45716; &#51060;&#50556;&#44592;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;c:url var="link" .. &amp;gt; &#52376;&#47100; &#53468;&#44536; &#50504;&#50640;&#49436; &#48320;&#49688;&#47484; &#54624;&#45817;&#54644;&#49436; &#45336;&#44592;&#45716; &#48277;&#51012; &#52286;&#45716;&#44172; &#49373;&#44033;&#50808;&#47196; &#50724;&#47000;&#44152;&#47160;&#45796;... &#50724;&#45720; &#50500;&#52840;&#50640;&#49436;&#45208; &#54644;&#44208;. =_=&lt;/p&gt;
&lt;p&gt;&amp;lt;%@ variable .. &#51032; alias &#51032; &#44050;&#51004;&#47196; jspContext.setAttribute&#50640; &#45347;&#50612;&#51452;&#45768;&#44620; &#54644;&#44208;.&lt;/p&gt;
&lt;p&gt;&#44036;&#45800;&#54620; ui &#52968;&#54252;&#45324;&#53944;&#46308;&#51008; tagFiles&#51004;&#47196; &#44396;&#49457;&#54624;&#49688; &#51080;&#51012; &#46319; &#54616;&#45796;. (&#51652;&#51089; &#50508;&#50520;&#51004;&#47732; &#51339;&#50520;&#51012; &#44163;&#51012;. =_=)&lt;/p&gt;
&lt;p&gt;&lt;br class="khtml-block-placeholder" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&#52280;&#44256; : &lt;a href="/pages/399930/attachments/166924" title="BergmanJSP2.0TagFiles.pdf" class="attachment"&gt;BergmanJSP2.0TagFiles.pdf&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Sat, 04 Aug 2007 12:34:12 +0900</pubDate>
      <link>http://anarch.springnote.com/pages/399930</link>
      <guid>http://anarch.springnote.com/pages/399930</guid>
    </item>
  </channel>
</rss>
