<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "document-v13.dtd">
<document>
  <header>
    <title>Spring MVC</title>
    <abstract>Spring MVC&#12501;&#12524;&#12540;&#12512;&#12527;&#12540;&#12463;&#12434;&#20351;&#12387;&#12383;&#12289;&#12454;&#12455;&#12502;&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12398;&#27083;&#31689;&#12398;&#25163;&#38918;&#12398;&#12513;&#12514;&#26360;&#12365;&#12391;&#12377;&#12290;</abstract>
  </header>
  <body>
    <section>
      <title>&#22823;&#38609;&#25226;&#12394;&#27969;&#12428;</title>
      <ol>
        <li>web.xml&#12391;DispatcherServlet&#12398;&#35373;&#23450;(&#26368;&#21021;&#12384;&#12369;)</li>
        <li>controller&#12398;&#20316;&#25104;(Struts&#12395;&#12369;&#12427;Action)</li>
        <li>controller&#12398;&#12510;&#12483;&#12500;&#12531;&#12464;&#12398;&#35373;&#23450;(&#12393;&#12398;URL&#12364;&#12393;&#12398;controller&#12434;&#21033;&#29992;&#12377;&#12427;&#12363;&#12434;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12395;&#26360;&#12365;&#36796;&#12416;&#12290;&#23455;&#38555;&#12395;&#12399;&#33394;&#12293;&#12394;&#35373;&#23450;&#12398;&#20181;&#26041;&#12364;&#12354;&#12427;&#12364;&#12289;&#20170;&#22238;&#12399;&#12487;&#12501;&#12457;&#12523;&#12488;)</li>
        <li>ViewResolver&#12398;&#20316;&#25104;&#12290;&#12371;&#12428;&#12399;&#12354;&#12427;controller&#12363;&#12425;&#12289;jsp&#12420;&#12425;velocity&#12395;&#36983;&#31227;&#12373;&#12379;&#12427;&#38555;&#12395;&#21442;&#29031;&#12377;&#12427;&#12290;&#20170;&#22238;&#12399;&#12487;&#12501;&#12457;&#12523;&#12488;&#12290;</li>
        <li>velocity&#12501;&#12449;&#12452;&#12523;&#12398;&#20316;&#25104;&#12290;</li>
      </ol>
      <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
     </section>
    <section>
      <title>&#12356;&#12388;&#12418;&#12398;Hello World</title>
      <section>
        <title>DispatcherServlet&#12398;&#35373;&#23450;</title>
        <ol>
          <li>web.xml&#12395;&#20197;&#19979;&#12398;servlet&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;&#29694;&#22312;xdoclet&#12434;&#20351;&#12387;&#12390;web.xml&#12434;&#26360;&#12365;&#20986;&#12375;&#12390;&#12356;&#12427;&#12398;&#12391;&#12289;&#23455;&#38555;&#12395;&#12399;<em>src/merge</em>&#12395;&#12354;&#12427;
              <em>servlets.xml</em>&#12398;&#20013;&#12395;&#26360;&#12365;&#36796;&#12416;&#12371;&#12392;&#12395;&#12394;&#12427;&#12290; <source xml:space="preserve"><![CDATA[
  <servlet>
    <servlet-name>webcms</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>]]></source>
          </li>
          <li>&#21516;&#27096;&#12395;&#19978;&#35352;&#12398;servlet&#12398;mapping&#12434;web.xml&#12395;&#26360;&#12365;&#36796;&#12416;&#12290;&#12501;&#12449;&#12452;&#12523;&#21517;&#12399;<em>src/merge</em>&#12398;<em>servlet-mappings.xml</em>&#12290; <source xml:space="preserve"><![CDATA[
  <servlet-mapping>
    <servlet-name>webcms</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>]]></source>
          </li>
        </ol>
        <p>&#12371;&#12398;DispatcherServlet&#12399;struts&#12395;&#12362;&#12369;&#12427;&#12289;ActionServlet&#12395;&#12354;&#12383;&#12427;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>ContextLoaderListener&#12398;web.xml&#12408;&#12398;&#30331;&#37682;&#12290;</title>
        <p>&#12371;&#12428;&#12399;&#12289;Spring&#12398;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12434;&#35501;&#12415;&#36796;&#12414;&#12379;&#12427;&#12383;&#12417;&#12398;&#12418;&#12398;&#12290;&#12381;&#12398;&#12501;&#12449;&#12452;&#12523;&#21517;&#12399;webcms-servlet.xml&#12392;&#12394;&#12426;&#12289;&#12371;&#12371;&#12398;webcms&#12399;&#12289;servlet-name&#12395;&#12354;&#12383;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<listener>
    <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>]]></source>
 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>controller&#12398;&#20316;&#25104;</title>
        <p>Spring&#12395;&#12362;&#12369;&#12427;controller&#12399;struts&#12395;&#12369;&#12427;Action&#12395;&#12354;&#12383;&#12427;(MVC&#12398;C-controller)&#12290;</p>
        <p>&#36969;&#24403;&#12394;&#12497;&#12483;&#12465;&#12540;&#12472;&#12391;(&#12371;&#12371;&#12391;&#12399;<em>com.chikkun.webcms.test</em>)HelloWorldController&#12434;&#20316;&#25104;&#12377;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/13
 *
 */
package com.chikkun.webcms.test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldController implements Controller {

  public ModelAndView handleRequest(HttpServletRequest request,
      HttpServletResponse response) throws Exception {
    return new ModelAndView("hello.htm", "message", greeting);
  }

  /**
   * <code>greeting</code> ]]>&#12398;&#25384;&#25334;&#12398;&#12486;&#12461;&#12473;&#12488;
<![CDATA[   */
  public String greeting;

  /**
   * @param greetig
   */
  public void setGreeting(String g) {
    this.greeting = g;
  }

  /**
   * @param args
   */

}]]></source>
 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      
      <section>
        <title>controller(HelloWorldController)&#12398;&#30331;&#37682;</title>
        <p>&#19978;&#35352;&#12398;WEB-INF/webcms-servlet.xml&#12395;&#27425;&#12398;&#35373;&#23450;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;&#23455;&#38555;&#12395;&#12399;src/webapps/WEB-INF/webcms-servlet.xml&#12395;&#26360;&#12365;&#36796;&#12435;&#12391;&#12362;&#12369;&#12400;&#12289;maven&#12364;war&#12501;&#12449;&#12452;&#12523;&#12408;&#12392;&#22266;&#12417;&#12427;&#12392;&#12365;&#12395;&#12467;&#12500;&#12540;&#12375;&#12390;&#12367;&#12428;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<bean name="/hello.htm" class="com.chikkun.webcms.test.HelloWorldController">
    <property name="greeting">
        <!-- ]]>&#26085;&#26412;&#35486;&#12399;&#25991;&#23383;&#21270;&#12369;&#12385;&#12419;&#12358;&#12424;&#65374;<![CDATA[ -->
        <value>Hello, Spring MVC!</value>
    </property>
</bean>]]></source>
 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>view resolver&#12398;&#35373;&#23450;</title>
        <p>&#12487;&#12501;&#12457;&#12523;&#12488;&#12391;&#12399;JSP&#12394;&#12398;&#12391;&#12289;velocity&#12434;&#20351;&#12356;&#12383;&#12363;&#12387;&#12383;&#12425;&#12289;&#23569;&#12293;&#22810;&#12417;&#12395;webcms-servlet.xml&#12395;&#26360;&#12365;&#36796;&#12414;&#12394;&#12367;&#12390;&#12399;&#12394;&#12425;&#12394;&#12356;&#12290;</p>
        <p>webcms-servlet.xml&#12395;&#12399;view resolver&#12398;&#20182;&#12395;&#12289;velocityConfigurer&#12418;&#30331;&#37682;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12427;(jsp&#12398;&#22580;&#21512;&#12399;&#12356;&#12425;&#12394;&#12356;)&#12290;</p>
        <p>&#25991;&#23383;&#21270;&#12369;&#12395;&#30456;&#24403;&#33510;&#21172;&#12375;&#12383;&#12369;&#12428;&#12393;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#25351;&#23450;&#12375;&#12390;&#12362;&#12369;&#12400;&#12289;&#20170;&#12398;&#12392;&#12371;&#12429;&#25991;&#23383;&#21270;&#12369;&#12399;&#20986;&#12390;&#12356;&#12394;&#12356;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
    <bean id="velocityConfig"
        class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <property name="resourceLoaderPath">
            <value>WEB-INF/vm/</value>
        </property>
        <property name="configLocation">
            <value>/WEB-INF/velocity.properties</value>
        </property>
    </bean>
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
        <property name="contentType">
            <value>text/html; charset=Shift_JIS</value>
        </property>
        <property name="cache">
            <value>false</value>
        </property>
        <property name="suffix">
            <value>.vm</value>
        </property>
        <property name="exposeSpringMacroHelpers">
            <value>true</value>
        </property>
        <property name="toolboxConfigLocation">
            <value>/WEB-INF/toolbox.xml</value>
        </property> 
    </bean>
        ]]></source>
        <p>&#26368;&#32066;&#30340;&#12395;webcms-servlet.xml&#12399;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#12394;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
   "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean name="/hello.htm" class="com.chikkun.webcms.test.HelloWorldController">
        <property name="greeting">
            <value>Hello, Spring MVC!</value>
        </property>
    </bean>
    <bean id="velocityConfig"
        class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <property name="resourceLoaderPath">
            <value>WEB-INF/vm/</value>
        </property>
        <property name="configLocation">
            <value>/WEB-INF/velocity.properties</value>
        </property>
    </bean>
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
        <property name="contentType">
            <value>text/html; charset=Shift_JIS</value>
        </property>
        <property name="cache">
            <value>false</value>
        </property>
        <property name="suffix">
            <value>.vm</value>
        </property>
        <property name="exposeSpringMacroHelpers">
            <value>true</value>
        </property>
        <property name="toolboxConfigLocation">
            <value>/WEB-INF/toolbox.xml</value>
        </property> 
    </bean>
</beans>
        ]]></source>
        <p>&#20309;&#12363;&#12392;&#25991;&#23383;&#21270;&#12369;&#12434;&#36215;&#12371;&#12375;&#12390;&#12375;&#12414;&#12387;&#12383;&#12290;&#33394;&#12293;&#22238;&#36991;&#12377;&#12427;&#21162;&#21147;&#12434;&#12375;&#12390;&#12415;&#12414;&#12375;&#12383;&#12364;&#12289;&#39364;&#30446;&#12391;&#12375;&#12383;&#12290;&#35504;&#12363;&#25945;&#12360;&#12390;!!</p>
        <p>
          <em>&#24460;&#26085;&#35527;</em>&#33394;&#12293;&#25991;&#23383;&#21270;&#12369;&#12395;&#33510;&#21172;&#12375;&#12383;&#12369;&#12428;&#12393;&#12289;&#26368;&#32066;&#30340;&#12395;&#12399;&#12289;&#20309;&#12392;&#12363;&#12358;&#12414;&#12367;&#12356;&#12387;&#12383;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
            <value>text/html; charset=Shift_JIS</value>
        ]]></source>
        <p>&#12364;&#33391;&#12363;&#12387;&#12383;&#12415;&#12383;&#12356;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>velocity&#12501;&#12449;&#12452;&#12523;(hello.vm)&#12398;&#20316;&#25104;</title>
        <p>helloWorldcontroller&#12398;&#36983;&#31227;&#20808;&#12391;&#12354;&#12427;hello.vm&#12398;&#20316;&#25104;</p>
        <p>
          <em>return new ModelAndView("hello.htm", "message",
            greeting);</em>&#12398;&#26368;&#21021;&#12398;<em>hello.htm</em>&#12364;hello.vm&#12395;&#12394;&#12427;&#12398;&#12391;&#12289;<em>WEB-INF/vm/hello.vm</em>&#12434;
          &#20316;&#25104;&#12377;&#12427;(&#23455;&#38555;&#12395;&#12399;&#12371;&#12398;&#25351;&#23450;&#12398;&#20181;&#26041;&#12399;&#12289;&#19978;&#35352;&#12398;ViewResolver&#12398;&#35373;&#23450;&#12398;&#20181;&#26041;&#12391;&#33394;&#12293;&#12391;&#12365;&#12427;&#12364;&#12289;&#12392;&#12426;&#12354;&#12360;&#12378;&#12487;&#12501;&#12457;&#12523;&#12488;&#12391;)&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<title>Spring MVC test1</title>
</head> 
<html>
<body>
$message
</body>
</html>
                ]]></source>
                 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
    </section>
    <section>
      <title>&#21069;&#22238;&#12398;&#33853;&#12385;&#31298;&#25342;&#12356;</title>
      <figure src="flow.jpg" alt="&#27969;&#12428;"/>
      <p>&#19978;&#35352;&#12398;&#22259;&#12398;&#12424;&#12358;&#12395;</p>
      <ol>
        <li>http://localhost:8080/webcms/hello.htm&#12364;&#12522;&#12463;&#12456;&#12473;&#12488;&#12373;&#12428;&#12427;&#12392;&#12289;&#12414;&#12378;&#12399;DispatcherServlet&#12364;&#21628;&#12403;&#20986;&#12373;&#12428;</li>
        <li>&#21628;&#12403;&#20986;&#12373;&#12428;&#12383;DispatcherServlet&#12399;&#12289;BeanNameHandleMapping(&#12487;&#12501;&#12457;&#12523;&#12488;)&#12363;&#12425;&#12289;controller&#12434;&#35211;&#12388;&#12369;&#20986;&#12375;&#12414;&#12377;&#12290;&#12371;&#12398;BeanNameHandleMapping&#20197;&#22806;&#12395; <ul>
            <li>SimpleUrlHandlerMapping</li>
            <li>CommonsPathMapHandlerMapping</li>
          </ul> &#12364;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;&#12371;&#12398;&#12358;&#12385;&#12398;1&#30058;&#30446;&#12398;SimpleUrlHandlerMapping&#12434;&#20170;&#22238;&#20351;&#12358;&#20104;&#23450;&#12391;&#12377;&#12290; </li>
        <li>&#19978;&#35352;&#12398;mapping&#12395;&#12424;&#12426;&#12289;DispatcherServle&#12399;&#20316;&#25104;&#12375;&#12383;HelloWorldController&#12395;&#20966;&#29702;&#12434;&#22996;&#35698;&#12375;&#12414;&#12377;&#12290;</li>
        <li>&#22996;&#35698;&#12373;&#12428;&#12383;HelloWorldController&#12364;&#20966;&#29702;&#12434;&#23455;&#34892;&#12375;&#12289;ModelAndView&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12434;&#36820;&#12375;&#12414;&#12377;&#12290;&#12371;&#12398;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12395;&#12399;&#12289; return new
          ModelAndView("hello.htm", "message", greeting);&#12392;&#12354;&#12427;&#12424;&#12358;&#12395;
          ModelAndView("bean&#12398;&#21517;&#21069;-&gt;view&#12398;&#21517;&#21069;","&#22793;&#25968;&#12398;&#21517;&#21069;",&#12514;&#12487;&#12523;&#12398;&#21517;&#21069;);&#12392;&#12394;&#12426;&#12414;&#12377;&#12290;&#12418;&#12358;&#23569;&#12375;&#35443;&#12375;&#12367;&#35211;&#12427;&#12392;&#12289; <ul>
            <li>BeanNameHandleMapping&#12399;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;webcms-servlet.xml&#12395;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#23450;&#32681;&#12373;&#12428;&#12390;&#12356;&#12414;&#12375;&#12383;&#12290; <source xml:space="preserve"><![CDATA[
    <bean name="/hello.htm" class="com.chikkun.webcms.test.HelloWorldController">
        <property name="greeting">
            <value>Hello, Spring MVC!</value>
        </property>
    </bean>
                            ]]></source>
              &#12371;&#12428;&#12399;http://localhost:8080/webcms/hello.htm&#12364;&#12522;&#12463;&#12456;&#12473;&#12488;&#12373;&#12428;&#12427;&#12392;&#12289;com.chikkun.webcms.test.HelloWorldController&#12364;
              &#21628;&#12403;&#20986;&#12373;&#12428;&#12427;&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;&#12377;&#12364;&#12289;&#21516;&#26178;&#12395;&#12289;hello.vm&#12364;&#26368;&#24460;&#12395;&#34920;&#31034;&#12373;&#12428;&#12427;&#12371;&#12392;&#12434;&#24847;&#21619;&#12375;&#12414;&#12377;(BeanNameHandleMapping&#12434;&#21033;&#29992;&#12375;&#12383;&#22580;&#21512;&#12395;&#12399;)&#12290;&#12371;&#12428;&#12364;
              "bean&#12398;&#21517;&#21069;-&gt;view&#12398;&#21517;&#21069;"&#12398;&#24847;&#21619;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290; </li>
            <li>&#12414;&#12383;&#12289;&#19978;&#35352;&#12398;webcms-servlet.xml&#12398;&#23450;&#32681;&#12391; <source xml:space="preserve"><![CDATA[
        <property name="greeting">
            <value>Hello, Spring MVC!</value>
        </property>
                            ]]></source>
              &#12399;&#12289;&#21628;&#12403;&#20986;&#12373;&#12428;&#12427;com.chikkun.webcms.test.HelloWorldController&#12398;greeting&#12392;&#12356;&#12358;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12395;&#12300;Hello, Spring
              MVC!&#12301;&#12364;&#20195;&#20837;&#12373;&#12428;&#12427;
              &#12371;&#12392;&#12434;&#24847;&#21619;&#12375;&#12414;&#12377;&#12290;greeting&#12392;&#12356;&#12358;&#22793;&#25968;&#12398;&#20516;&#12434;velocity&#12398;hello.vm&#12398;&#20013;&#12391;&#12399;message&#12392;&#12356;&#12358;&#22793;&#25968;&#12391;&#21442;&#29031;&#12391;&#12365;&#12427;&#12392;&#35328;&#12358;&#12371;&#12392;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#12385;&#12394;&#12415;&#12395;hello.vm&#12398;
              &#20013;&#21619;&#12399; <source xml:space="preserve"><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<title>Spring MVC test1</title>
</head> 
<html>
<body>
$message
<!--]]>&#19978;&#35352;&#65281;&#65281;<![CDATA[-->
</body>
</html>
                            ]]></source>
              &#12371;&#12428;&#12364;ModelAndView("bean&#12398;&#21517;&#21069;-&gt;view&#12398;&#21517;&#21069;","&#22793;&#25968;&#12398;&#21517;&#21069;",&#12514;&#12487;&#12523;&#12398;&#21517;&#21069;)&#12398;&#24460;&#21322;2&#12388;&#12398;&#24341;&#25968;&#12398;&#24847;&#21619;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;
              &#12385;&#12394;&#12415;&#12395;&#12289;&#12514;&#12487;&#12523;&#12392;&#12356;&#12358;&#12398;&#12399;controller&#12392;view&#12392;&#12398;&#38291;&#12398;&#20516;&#12398;&#21463;&#12369;&#28193;&#12375;&#12434;&#12377;&#12427;bean&#12391;&#12289;form&#12392;controller&#12392;&#12398;&#38291;&#12398;&#20516;&#12398;&#21463;&#12369;&#28193;&#12375;&#12434;&#12377;&#12427;bean&#12434;
              command&#12392;&#35328;&#12356;&#12414;&#12377;&#12290;&#12371;&#12428;&#12364;&#32080;&#27083;&#12431;&#12363;&#12426;&#12389;&#12425;&#12356;&#12398;&#12391;&#12289;&#12375;&#12387;&#12363;&#12426;&#35226;&#12360;&#12390;&#12362;&#12367;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290; </li>
          </ul>
        </li>
        <li>ViewResolver&#12399;jsp&#12364;&#27161;&#28310;&#12391;&#12289;&#20170;&#12402;&#12392;&#12388;velocity&#12398;&#22580;&#21512;&#12399;&#12393;&#12358;&#12394;&#12398;&#12363;&#12392;&#12356;&#12358;&#12392;&#12371;&#12429;&#12364;&#12431;&#12363;&#12425;&#12394;&#12356;&#12398;&#12391;&#12377;&#12364;&#12289; jsp&#12398;&#22580;&#21512;&#12395;&#12399; <ul>
            <li>ResourcebundleViewResolver</li>
            <li>InternalResourceViewResolver</li>
          </ul>
          &#12394;&#12393;&#12364;&#12354;&#12426;&#12289;VelocityViewResolver&#12399;&#19978;&#35352;&#12398;InternalResourceViewResolver&#12395;&#30456;&#24403;&#12377;&#12427;&#12381;&#12358;&#12391;&#12377;&#12290;&#12383;&#12384;&#12371;&#12428;&#12384;&#12392;bean&#21517;(URL&#21517;)&#12392;velocity&#12398;&#21517;&#21069;&#12364;1:1&#12395;&#12394;&#12426;&#12289;
          bean&#21517;&#12434;&#22793;&#26356;&#12377;&#12427;&#12392;&#12365;&#12420;&#12289;view(velocity&#12501;&#12449;&#12452;&#12523;)&#12434;&#20860;&#29992;&#12377;&#12427;&#22580;&#21512;&#12395;&#12399;&#19981;&#20415;&#12394;&#12398;&#12391;&#12289;&#12418;&#12358;&#23569;&#12293;&#35519;&#12409;&#12427;&#24517;&#35201;&#12364;&#12354;&#12427;&#12424;&#12358;&#12391;&#12377;&#12290; </li>
      </ol>
      <figure src="controller.jpg" alt="&#12467;&#12531;&#12488;&#12525;&#12540;&#12521;&#12540;&#12398;&#31278;&#39006;&#12392;&#32153;&#25215;&#38306;&#20418;"/>
      <p>controller&#12399;&#19978;&#35352;&#12398;&#12424;&#12358;&#12395;&#33394;&#12293;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;&#12392;&#12426;&#12354;&#12360;&#12378;&#27425;&#12398;4&#12388;&#12364;&#20351;&#12360;&#12428;&#12400;&#33391;&#12356;&#12392;&#24605;&#12358;&#12290;</p>
      <ol>
        <li>AbstractController(&#21336;&#12395;&#12506;&#12540;&#12472;&#12434;&#35211;&#12379;&#12383;&#12356;&#12392;&#12365;&#12394;&#12393;)</li>
        <li>MultiActionController(&#35079;&#25968;&#12398;&#12522;&#12463;&#12456;&#12473;&#12488;&#12395;&#23550;&#12375;&#12390;&#12289;&#12381;&#12428;&#12382;&#12428;&#12395;&#23550;&#24540;&#12375;&#12383;&#12522;&#12463;&#12456;&#12473;&#12488;&#12398;&#20966;&#29702;&#12434;1&#12388;&#12395;&#23455;&#35013;&#12377;&#12427;&#22580;&#21512;&#12289;struts&#12398;
          DispatchAction&#12354;&#12383;&#12426;&#12395;&#36817;&#12356;&#12398;&#12363;&#12418;)</li>
        <li>SimpleFormController(&#12501;&#12457;&#12540;&#12512;&#12363;&#12425;&#12487;&#12540;&#12479;&#12434;&#21463;&#12369;&#21462;&#12387;&#12383;&#12426;&#12289;validate&#12375;&#12383;&#12426;&#12377;&#12427;&#22580;&#21512;)</li>
        <li>AbstractWizardFormController(wizard&#12398;&#12424;&#12358;&#12395;&#12289;&#12356;&#12367;&#12388;&#12418;&#12398;&#19968;&#36899;&#12398;&#20316;&#26989;&#12364;&#24517;&#35201;&#12394;&#22580;&#21512;&#12395;&#12381;&#12398;&#12501;&#12525;&#12540;&#12434;&#21046;&#24481;&#12375;&#12383;&#12356;&#22580;&#21512;)</li>
      </ol>
      <p>&#20170;&#22238;&#12399;3&#30058;&#30446;&#12398;SimpleFormController&#12434;&#21033;&#29992;&#12375;&#12390;&#12415;&#12414;&#12377;&#12290;</p>
    </section>
    <section>
      <title>&#12501;&#12457;&#12540;&#12512;&#12487;&#12540;&#12479;&#12398;&#36865;&#20449;&#12392;validation</title>
      <p>&#12518;&#12540;&#12470;&#12540;&#21517;&#12392;&#12497;&#12473;&#12527;&#12540;&#12489;&#12434;&#20837;&#21147;&#12377;&#12427;&#12501;&#12457;&#12540;&#12512;&#12363;&#12425;&#12289;&#36865;&#20449;&#12508;&#12479;&#12531;&#12434;&#12463;&#12522;&#12483;&#12463;&#12377;&#12427;&#12392;&#12289;&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;&#12375;&#12289;DB&#12395;&#30331;&#37682;&#12375;&#12289;&#12381;&#12375;&#12390;&#27425;&#12398;&#12506;&#12540;&#12472;&#12391;&#12381;&#12428;&#12425;&#12434;&#34920;&#31034;&#12377;&#12427;&#12424;&#12358;&#12394;&#31777;&#21336;&#12394;&#12418;&#12398;&#12434;&#20316;&#25104;&#12377;&#12427;&#12290;</p>
      <p>&#12383;&#12384;&#12375;&#12289;&#12518;&#12540;&#12470;&#12540;&#21517;&#12289;&#12497;&#12473;&#12527;&#12540;&#12489;&#12399;&#24517;&#12378;&#20837;&#21147;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12289;&#12518;&#12540;&#12470;&#12540;&#21517;&#12399;&#21322;&#35282;&#33521;&#25968;&#12391;4&#25991;&#23383;&#20197;&#19978;10&#25991;&#23383;&#20197;&#19979;&#12289;&#12497;&#12473;&#12527;&#12540;&#12489;&#12399;&#24517;&#12378;&#21322;&#35282;&#12450;&#12523;&#12501;&#12449;&#12505;&#12483;&#12488;&#12392;&#21322;&#35282;&#25968;&#23383;&#12434;&#28151;&#12380;&#12390;&#12289;5&#25991;&#23383;&#20197;&#19978;20&#25991;&#23383;&#20197;&#19979;&#12392;&#12377;&#12427;&#12290;</p>
      <p>&#12418;&#12375;&#19978;&#35352;&#12395;&#21453;&#12375;&#12383;&#22580;&#21512;&#12399;&#20803;&#12398;&#12501;&#12457;&#12540;&#12512;&#12395;&#25147;&#12375;&#12289;&#12381;&#12371;&#12395;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12434;&#34920;&#31034;&#12373;&#12379;&#12427;&#12290;</p>
      <p>&#12384;&#12356;&#12383;&#12356;&#12398;&#27969;&#12428;&#12399;&#27425;&#12398;&#12424;&#12358;&#12290;</p>
      <ol>
        <li>
          <link href="#inputVm">html&#12398;&#12501;&#12457;&#12540;&#12512;input.vm&#12398;&#20316;&#25104;&#12290;</link>
        </li>
        <li>
          <link href="#inputSuccess">&#26360;&#12367;&#20966;&#29702;&#12364;&#25104;&#21151;&#12375;&#12383;&#22580;&#21512;&#12398;&#32330;&#32173;&#20808;&#12398;inputSuccess.vm&#12398;&#20316;&#25104;&#12290;</link>
        </li>
        <li>
          <link href="#command">form&#12363;&#12425;&#21463;&#12369;&#21462;&#12387;&#12383;&#12487;&#12540;&#12479;&#12434;&#20445;&#25345;&#12377;&#12427;Bean&#12398;&#20316;&#25104;(Spring&#12391;&#12399;&#12467;&#12510;&#12531;&#12489;&#12392;&#21628;&#12406;)</link>
        </li>
        <li>&#23455;&#38555;&#12358;&#12414;&#12367;&#12356;&#12367;&#12363;&#12431;&#12363;&#12425;&#12394;&#12356;&#12364;&#12289;&#19978;&#35352;&#12398;Bean&#33258;&#20307;&#12434;Hibernate&#12398;&#27704;&#32154;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12395;&#12377;&#12427;&#12383;&#12417;&#12395;&#12289;&#19978;&#35352;&#12398;&#12467;&#12510;&#12531;&#12489;&#12395;<link href="#command">Xdoclet&#12398;&#12479;&#12464;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;</link>
          <link href="http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html">Xdoclet&#12398;Spring&#29992;&#12398;&#12479;&#12464;</link>&#12434;&#21442;&#29031;&#12290;</li>
        <li>
          <link href="#hcfg">hibernate.cfg.xml&#12398;&#12510;&#12483;&#12500;&#12531;&#12464;&#12395;&#19978;&#35352;&#12398;&#12463;&#12521;&#12473;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;</link>
        </li>
        <li>
          <link href="#ant">Ant&#12391;&#23455;&#38555;&#12398;&#12486;&#12540;&#12502;&#12523;&#12364;&#20986;&#26469;&#12427;&#12363;&#12393;&#12358;&#12363;&#12434;&#30906;&#35469;&#12377;&#12427;&#12290;</link>
        </li>
        <li>
          <link href="#springCommand">&#19978;&#35352;&#21516;&#27096;&#12289;
          webcms-servlet.xml&#12395;bean&#12398;&#35373;&#23450;&#12434;&#26360;&#12365;&#36796;&#12416;&#12383;&#12417;&#12398;&#12289;Xdoclet&#12398;&#12479;&#12464;&#12434;&#26360;&#12365;&#36796;&#12416;</link>&#12290;&#21516;&#26178;&#12395;&#12289;Ant&#12398;build.xml&#12395;&#12418;&#12381;&#12398;&#35373;&#23450;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290; <link href="http://xdoclet.sourceforge.net/xdoclet/tags/spring-tags.html#@spring_property__0____">Xdoclet&#12398;Spring&#29992;&#12398;&#12479;&#12464;</link>&#12434;&#21442;&#29031;&#12290;</li>
        <li>
          <link href="#ant">ant schemaexport&#12391;DB&#12398;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;&#12290;</link>
        </li>
        <li>
          <link href="#dao">Hibernate &#12398;DAO&#12434;&#20316;&#25104;&#12290;&#20170;&#22238;&#12399;&#20445;&#23384;&#12392;&#21066;&#38500;&#12398;&#12415;&#12290;</link>
        </li>
        <li>
          <link href="#springDAO">Spring&#12398;&#35373;&#23450;&#12395;&#12289;DAO&#31561;&#12398;&#35373;&#23450;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;</link>
        </li>
        <li>
          <link href="#dataTest">DatabaseTestCase(Junit&#12398;&#25313;&#24373;&#29256;)</link>&#12391;&#12486;&#12473;&#12488;&#12290;</li>
        <li>
          <link href="#business">&#12499;&#12472;&#12493;&#12473;&#12525;&#12472;&#12483;&#12463;(&#12487;&#12540;&#12479;&#12434;&#20445;&#23384;&#12377;&#12427;)&#12463;&#12521;&#12473;UserAndPassEnroll&#12398;&#20316;&#25104;</link>
        </li>
        <li>
          <link href="#controller">Spring MVC&#12398;Controller&#12434;&#20316;&#25104;(SimpleformController)&#12290;</link>
        </li>
        <li>
          <link href="#springValidator">&#19978;&#35352;&#12398;form&#12395;&#23550;&#12377;&#12427;Validator&#12398;&#20316;&#25104;(Commons&#12391;&#12399;&#12394;&#12356;)&#12290;</link>
        </li>
        <li>
          <link href="#commonsValidator">&#19978;&#35352;&#12391;&#21033;&#29992;&#12377;&#12427;&#12289;Commmons
          Validator(Spring&#12391;&#12399;&#12394;&#12356;)&#12398;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12434;&#20316;&#25104;&#12290;</link>&#12371;&#12428;&#12418;Xdocletw&#12434;&#20351;&#12387;&#12390;&#12415;&#12424;&#12358;&#12290; <link href="http://xdoclet.sourceforge.net/xdoclet/tags/spring-tags.html#@spring_property__0____">Xdoclet&#12398;Spring&#29992;&#12398;&#12479;&#12464;</link>&#12434;&#21442;&#29031;&#12290;</li>
        <li>
          <link href="#controllerSetting">webcms-servlet.xml&#12395;Controller&#12398;bean&#12398;&#20316;&#25104;&#12290;&#12371;&#12420;&#12388;&#12418;Xdoclet&#12391;&#33258;&#21205;&#12391;&#12290;</link>
        </li>
        <li>
          <link href="#junitSpring">&#19978;&#35352;&#12434;Junit&#12391;&#12486;&#12473;&#12488;&#12290;</link>
        </li>
        <li>
          <link href="#confirm">tomcat&#12434;&#31435;&#12385;&#19978;&#12370;&#12390;&#12289;&#26368;&#32066;&#30906;&#35469;&#12290;</link>
        </li>
      </ol>
      <section>
        <title>form&#12398;&#20316;&#25104;</title>
        <anchor id="inputVm"/>
        <p>&#12372;&#12367;&#31777;&#21336;&#12394;WEB-INF/vm/input.vm</p>
        <source xml:space="preserve"><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<TITLE>]]>&#12518;&#12540;&#12470;&#12540;&#21517;&#12392;&#12497;&#12473;&#12527;&#12540;&#12489;&#20837;&#21147;<![CDATA[</TITLE>
</HEAD>
<BODY>
<FORM  action="userAndPass.htm" name="user" method="post">
#springBind("command.user")
<font color="red">${status.errorMessage}</font>
<br/>

]]>&#12518;&#12540;&#12470;&#12540;&#21517;<![CDATA[<INPUT size="20" type="text" maxlength="10" name="user" value="$!status.value">
<br/>
#springBind("command.pass")
<font color="red">${status.errorMessage}</font>
<br/>
]]>&#12497;&#12473;&#12527;&#12540;&#12489;<![CDATA[<INPUT size="20" type="password" maxlength="20" name="pass" value="$!status.value">
<INPUT type="submit" name="button" value="]]>&#36865;&#20449;<![CDATA[">
</FORM>
</BODY>
</HTML>
                ]]></source>
        <p>Velocity&#12395;&#12388;&#12356;&#12390;&#12399;&#31777;&#21336;&#12395;&#35302;&#12428;&#12427;&#12392;&#12289;&#26412;&#26469;JSP&#12398;&#22580;&#21512;Spring&#12479;&#12464;&#12364;&#29992;&#24847;&#12373;&#12428;&#12390;&#12356;&#12427;&#12398;&#12384;&#12364;&#12289;Velocity&#12391;&#12399;
            <code>#springBind("command.pass")</code>&#12391;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12394;&#12427;&#12290;&#12371;&#12371;&#12398;command&#12392;&#12399;&#12289;&#24460;&#36848;&#12377;&#12427;Controller&#12395;&#12362;&#12369;&#12427;
            <code>return new ModelAndView(getSuccessView(), "command", command);</code>&#12398;&#12289;2&#30058;&#30446;&#12398;&#24341;&#25968;&#12395;&#19968;&#33268;&#12377;&#12427;
          (&#26412;&#24403;&#12395;&#12289;&#12385;&#12423;&#12356;&#33258;&#20449;&#12364;&#12394;&#12356;)&#12290;&#12381;&#12428;&#12391;pass&#12399;command&#12398;&#20013;&#12398;&#12501;&#12451;&#12540;&#12523;&#12489;&#21517;&#12290;</p>
        <p>&#12371;&#12358;&#12375;&#12390;&#12362;&#12367;&#12392;&#12289;status.errorMessage&#12420;status.value&#12391;&#20516;&#12434;&#21462;&#12426;&#20986;&#12379;&#12427;&#12290;<em>status</em>&#12399;&#22266;&#23450;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>&#12501;&#12457;&#12540;&#12512;&#36865;&#20449;&#24460;&#12398;WEB-INF/vm/inputSuccess.vm</title>
        <anchor id="inputSuccess"/>
        <p>&#12371;&#12428;&#12418;&#12289;&#26997;&#31777;&#21336;&#12395;</p>
        <source xml:space="preserve"><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>]]>&#12518;&#12540;&#12470;&#12540;&#21517;&#12392;&#12497;&#12473;&#12527;&#12540;&#12489;&#20837;&#21147;&#24460;<![CDATA[</TITLE>
</HEAD>
<BODY>
#springBind("command.user")
]]>&#12518;&#12540;&#12470;&#12540;&#21517;<![CDATA[:${status.value}
<br/>
#springBind("command.pass")
]]>&#12497;&#12473;&#12527;&#12540;&#12489;<![CDATA[:${status.value}
</BODY>
</HTML>
                ]]></source>
                 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>form&#12398;&#20516;&#12434;&#20445;&#25345;&#12377;&#12427;&#12463;&#12521;&#12473;&#12289;UserAndPassCommand.class&#12434;&#20316;&#25104;</title>
        <anchor id="command"/>
        <p>&#12371;&#12428;&#12399;&#12289;struts&#12398;ActionForm&#12395;&#12354;&#12383;&#12427;&#12418;&#12398;&#12384;&#12364;&#12289;POJO&#12391;&#12354;&#12427;&#12392;&#12371;&#12429;&#12364;&#22823;&#12365;&#12367;&#30064;&#12394;&#12427;&#12290;&#20170;&#22238;&#12399;&#21336;&#12395;2&#12388;&#12398;
          &#12501;&#12451;&#12540;&#12523;&#12489;&#12364;&#12354;&#12427;&#12384;&#12369;&#12394;&#12398;&#12391;&#12289;&#12518;&#12540;&#12470;&#12540;&#21517;&#12392;&#12497;&#12473;&#12527;&#12540;&#12489;&#12398;&#12501;&#12451;&#12540;&#12523;&#12489;&#12392;getter&#12392;setter&#12384;&#12369;&#12398;&#12463;&#12521;&#12473;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/14
 *
 */
package com.chikkun.webcms.test;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;

/**
 * @author Chiku Kazuro
 */
public class UserAndPassCommand {

  public Integer id;
  
  /**
   * <code>user</code>]]>&#12399;&#12518;&#12540;&#12470;&#12540;&#21517;&#12290;
<![CDATA[   */
  public String user;

  /**
   * <code>pass</code> ]]>&#12399;&#12497;&#12473;&#12527;&#12540;&#12489;&#12290;
<![CDATA[   */
  public String pass;


  /**
   * ]]>&#12487;&#12501;&#12457;&#12523;&#12488;&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;&#12540;
<![CDATA[   */
  public UserAndPassCommand() {
    super();
  }

  /**
   * ]]>&#12362;&#12394;&#12376;&#12415;<![CDATA[equals()]]>&#12513;&#12477;&#12483;&#12489;&#12290;
<![CDATA[   * @see java.lang.Object#equals(java.lang.Object)
   */
  public boolean equals(final Object other) {
    if (!(other instanceof UserAndPassCommand))
      return false;
    UserAndPassCommand castOther = (UserAndPassCommand) other;
    return new EqualsBuilder().append(id, castOther.id).append(user,
        castOther.user).append(pass, castOther.pass).isEquals();
  }


  /**
   * ]]>&#12362;&#12394;&#12376;&#12415;<![CDATA[hashCode
   * @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder().append(id).append(user).append(pass)
        .toHashCode();
  }

  /**
   * ]]>&#12362;&#12394;&#12376;&#12415;<![CDATA[toString()]]>&#12290;<![CDATA[id]]>&#12392;<![CDATA[user]]>&#12392;<![CDATA[pass]]>&#20840;&#37096;&#12434;&#34920;&#31034;&#12290;
<![CDATA[   * @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this).append("id", id).append("user", user)
        .append("pass", pass).toString();
  }

  
  /**
   * @return ID
   */
  public Integer getId() {
    return this.id;
  }

  /**
   * @param id
   */\
  public void setId(Integer id) {
    this.id = id;
  }

  /**
   * @return ]]>&#12497;&#12473;&#12527;&#12540;&#12489;
<![CDATA[   */
  public String getPass() {
    return this.pass;
  }

  /**
   * @param p
   */
  public void setPass(String p) {
    this.pass = p;
  }

  /**
   * @return user]]>&#21517;
<![CDATA[   */
  public String getUser() {
    return this.user;
  }

  /**
   * @param ]]>&#12518;&#12540;&#12470;&#12540;&#21517;
<![CDATA[   */
  public void setUser(String u) {
    this.user = u;
  }
}
                ]]></source>
                 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>Hibernate&#12398;Xdoclet&#12479;&#12464;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;</title>
        <anchor id="hibernate"/>
        <p>&#12486;&#12540;&#12502;&#12523;&#21517;&#12399;&#12289;&#12463;&#12521;&#12473;&#12398;&#23450;&#32681;&#12398;&#19978;&#12289;&#12501;&#12451;&#12540;&#12523;&#12489;&#12398;&#22411;&#12420;&#12501;&#12451;&#12540;&#12523;&#12489;&#21517;&#12399;getter&#12398;&#19978;&#12395;&#26360;&#12365;&#36796;&#12416;&#12290;&#19978;&#35352;&#12398;&#12477;&#12540;&#12473;&#12395;&#26360;&#12365;&#21152;&#12360;&#12383;&#12392;&#12371;&#12429;&#12384;&#12369;&#12434;&#24341;&#29992;&#12377;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/**
 * @author Chiku Kazuro
 * 
 * @hibernate.class table="TEST"
 */
public class UserAndPassCommand {
  
  /**
   * @return ID
   * @hibernate.id column="ID" generator-class="native"
   * @hibernate.generator-param name="sequence" value="test_id_seq"
   */
  public Integer getId() {
    return this.id;
  }
  /**
   * @return ]]>&#12497;&#12473;&#12527;&#12540;&#12489;
<![CDATA[   * @hibernate.property column="PASS" length="64" not-null="true"
   */
  public String getPass() {
    return this.pass;
  }
  /**
   * @return user]]>&#21517;
<![CDATA[   * @hibernate.property column="NAME" length="64" not-null="true"
   */
  public String getUser() {
    return this.user;
  }
}
        ]]></source>
        <p>&#12371;&#12371;&#12391;&#12399;TEST&#12392;&#12356;&#12358;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;&#12375;&#12289;&#12501;&#12451;&#12540;&#12523;&#12489;&#12399;ID&#12392;&#12356;&#12358;&#12471;&#12540;&#12463;&#12456;&#12531;&#12473;(&#12371;&#12428;&#12399;Hibernate&#12364;&#33258;&#21205;&#12391;&#35373;&#23450;&#12375;&#12390;&#12367;&#12428;&#12427;&#12398;&#12391;&#12289;&#23455;&#38555;&#12395;&#12399;&#20840;&#12367;&#12477;&#12540;&#12473;&#12395;&#12399;&#26360;&#12367;&#24517;&#35201;&#12364;&#12394;&#12356;)&#12392;
          PASS&#12392;&#12356;&#12358;64&#25991;&#23383;&#12391;not null&#12289;NAME&#12399;64&#25991;&#23383;&#12391;not null&#12392;&#12356;&#12358;&#12418;&#12398;&#12434;&#25351;&#23450;&#12375;&#12390;&#12427;&#12290;</p>
        <anchor id="hcfg"/>
        <p>
          <em>&#12373;&#12425;&#12395;&#24536;&#12428;&#12390;&#12399;&#12356;&#12369;&#12394;&#12356;&#12398;&#12364;</em>
          <code>webcms/src/conf/hibernate.cfg.xml</code>&#12395;&#27425;&#12398;&#19968;&#34892;&#12434;&#26360;&#12365;&#36796;&#12416;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
    <mapping resource="com/chikkun/webcms/test/UserAndPassCommand.hbm.xml"/>
    ]]></source>
        <p>&#12371;&#12428;&#12399;<code>ant hibernate</code>&#12391;&#20316;&#25104;&#12373;&#12428;&#12427;&#12510;&#12483;&#12500;&#12531;&#12464;&#12501;&#12449;&#12452;&#12523;&#12391;&#27425;&#12398;&#34892;&#12358;&#12486;&#12540;&#12502;&#12523;&#12398;&#20316;&#25104;&#26178;&#12395;&#20316;&#25104;&#12373;&#12428;&#12427;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>Ant &#12391;&#12486;&#12540;&#12502;&#12523;&#12398;&#20316;&#25104;</title>
        <anchor id="ant"/>
        <p>
          <code>ant schemaexport&#12391;</code>&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;&#12377;&#12427;&#12290;schemaexport&#12479;&#12473;&#12463;&#12399;depends
          hibernate&#12391;hibernate&#12479;&#12464;&#12399;depends property&#12394;&#12398;&#12391;&#12289; &#12381;&#12428;&#12425;&#12398;&#12479;&#12473;&#12463;&#12418;&#33258;&#21205;&#12391;&#23455;&#34892;&#12373;&#12428;&#12427;&#12398;&#12391;&#12289;<code>ant
            schemaexport&#12384;&#12369;&#12391;&#12486;&#12540;&#12502;&#12523;&#12364;&#20316;&#25104;&#12373;&#12428;&#12427;&#12290;</code>
        </p>
        <p>&#30906;&#35469;&#12399;<code>webcms/WEB-INF/database/webcms.log</code>&#12398;&#20013;&#12434;&#35211;&#12427;&#12371;&#12392;&#12395;&#12424;&#12387;&#12390;&#30906;&#35469;&#12391;&#12365;&#12427;&#12290;
            <strong>&#12383;&#12384;&#12375;&#12289;HSQLDB&#12434;&#31435;&#12385;&#19978;&#12370;&#12427;&#12371;&#12392;&#12434;&#24536;&#12428;&#12394;&#12356;&#12424;&#12358;&#12395;&#12290;</strong>
        </p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>Spring&#12398;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12395;UserAndPassCommand&#12398;bean&#12398;&#35373;&#23450;&#12434;Xdoclet&#12434;&#20351;&#12387;&#12390;&#26360;&#12365;&#20986;&#12377;&#12290;</title>
        <anchor id="springCommand"/>
        <p>&#20808;&#12411;&#12393;&#12398;UserAndPassCommand&#12398;&#12477;&#12540;&#12473;&#12398;&#20013;&#12395;&#12289;&#20170;&#24230;&#12418;Xdoclet&#12398;&#12479;&#12464;&#12434;&#26360;&#12365;&#36796;&#12416;&#12371;&#12392;&#12395;&#12394;&#12427;&#12290; </p>
        <source xml:space="preserve"><![CDATA[
/**
 * @author Chiku Kazuro
 * 
 * @hibernate.class table="TEST"
 * @spring.bean  name="command"
 */
public class UserAndPassCommand {
        ]]></source>
        <p>&#27425;&#12395;Ant&#12398;build.xml&#12395;&#12418;webcms-servlet.xml&#12395;&#26360;&#12365;&#20986;&#12377;&#37096;&#20998;&#12434;&#12434;&#26360;&#12365;&#36275;&#12377;&#12290;&#23569;&#12293;&#35079;&#38609;&#12394;&#12398;&#12399;&#12289;&#29694;&#22312;struts&#12391;&#12418;spring&#12434;&#20351;&#12387;&#12390;&#12362;&#12426;&#12289;&#12394;&#12362;&#12363;&#12388;&#12289;
          &#23450;&#32681;&#12501;&#12449;&#12452;&#12523;&#12364;&#36949;&#12358;&#12398;&#12391;&#12289;&#26360;&#12365;&#20986;&#12377;&#20803;&#12392;&#12394;&#12427;&#12477;&#12540;&#12473;&#12434;&#38480;&#23450;&#12375;&#12390;&#12356;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
	  <target name="spring2" description="make webcms-servlet.xml for spring on Test">
	    <delete failonerror="false">
	      <fileset dir="src/webapp/WEB-INF" includes="webcms-servlet.xml"/>
	    </delete>
	  	<taskdef
	        name="springdoclet"
	        classname="xdoclet.modules.spring.SpringDocletTask"
	        classpathref="build.classpath"/>
	    <springdoclet destdir="src/webapp/WEB-INF" mergedir="src">
	      <fileset dir="${src.dir}">
	        <include name="com/chikkun/webcms/test/*.java"/>
	        <include name="com/chikkun/common/validator/*.java"/>
	      </fileset>
	      <springxml destinationFile="webcms-servlet.xml" xmlencoding="${local.encoding}"/>
	    </springdoclet>
	  </target>
        ]]></source>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>DAO&#12398;&#20316;&#25104;</title>
        <anchor id="dao"/>
        <p>Hibernate&#12434;&#20351;&#12387;&#12390;&#12487;&#12540;&#12479;&#12398;&#12420;&#12426;&#12392;&#12426;&#12434;&#12377;&#12427;DAO&#12434;&#20316;&#25104;&#12290;&#20170;&#22238;&#12399;&#20445;&#23384;&#12392;&#21066;&#38500;&#12398;&#12415;&#20316;&#25104;&#12377;&#12427;&#12371;&#12392;&#12395;&#12377;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/25
 *
 */
package com.chikkun.webcms.test;

import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;

import com.chikkun.webcms.database.UserAlreadyExistException;

public class TestDAO  extends HibernateDaoSupport implements ITestDAO {

  /**
   * @see com.chikkun.webcms.test.ITestDAO#save(com.chikkun.webcms.test.UserAndPassCommand)
   */
  public final void save(final UserAndPassCommand u) throws UserAlreadyExistException {
    try {
      getHibernateTemplate().save(u);
      getHibernateTemplate().flush();
    } catch (DataAccessException err) {
      throw new UserAlreadyExistException(u.getUser()
              + "]]>&#26082;&#12395;&#30331;&#37682;&#12373;&#12428;&#12390;&#12356;&#12414;&#12377;<![CDATA[!", err);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  /**
   * @see com.chikkun.webcms.test.ITestDAO#delete(com.chikkun.webcms.test.UserAndPassCommand)
   */
  public final void delete(final UserAndPassCommand u) {
    
    getHibernateTemplate().delete(u);
    getHibernateTemplate().flush();
  }

}
        ]]></source>
        <p>&#19978;&#35352;&#12395;&#12354;&#12427;&#12424;&#12358;&#12395;<code>getHibernateTemplate()</code>&#12434;&#20351;&#12387;&#12390;&#12356;&#12427;&#12290;&#12371;&#12428;&#12399;session&#12398;&#31649;&#29702;&#12434;Spring&#12395;&#20219;&#12379;&#12289;&#12363;&#12388;&#12289;AOP&#12434;&#20351;&#12362;&#12358;&#12392;&#12356;&#12358;&#24847;&#22259;&#12391;&#12354;&#12427;&#12290;</p>
        <p>&#12381;&#12398;&#28858;&#12395;&#12399;&#12289;&#27425;&#12398;&#35500;&#12398;&#12424;&#12358;&#12395;Spring&#12398;&#35373;&#23450;&#12364;&#24517;&#35201;&#12395;&#12394;&#12427;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>DAO&#12398;Spring&#29992;&#12398;&#35373;&#23450;&#12290;</title>
        <anchor id="springDAO"/>
        <source xml:space="preserve"><![CDATA[
    <bean id="testDAO" class="com.chikkun.webcms.test.TestDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>

    <bean id="testService"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        <property name="target">
            <ref bean="testDAO"/>
        </property>
        <property name="proxyInterfaces">
            <value>com.chikkun.webcms.test.ITestDAO</value>
        </property>

        <property name="transactionAttributes">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED,-UserAlreadyExistException</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
        <property name="postInterceptors">
            <list>
            <ref bean="throwsLoggingAdvisor"/>
            <ref bean="loggingInterceptor"/>
            </list>
        </property>
    </bean>
        ]]></source>
        <p>&#19978;&#35352;&#12398;&#12424;&#12358;&#12395;&#12289;testDAO&#12434;&#30452;&#25509;&#20351;&#12431;&#12378;&#12395;&#12289;testService&#12391;&#23450;&#32681;&#12375;&#12390;&#12354;&#12427;&#12418;&#12398;&#12434;&#20171;&#12375;&#12390;&#12289;&#21033;&#29992;&#12377;&#12427;&#12371;&#12392;&#12395;&#12377;&#12427;&#12290;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12392;&#12525;&#12462;&#12531;&#12464;&#12434;AOP&#12391;&#23455;&#29694;&#12375;&#12390;&#12356;&#12427;&#12290; &#12383;&#12384;</p>
        <source xml:space="preserve"><![CDATA[
        <property name="proxyInterfaces">
            <value>com.chikkun.webcms.test.ITestDAO</value>
        </property>
        ]]></source>
        <p>&#12395;&#12354;&#12427;&#12424;&#12358;&#12395;&#12289;testDAO&#12391;&#30452;&#25509;&#21463;&#12369;&#12427;&#12398;&#12391;&#12399;&#12394;&#12356;&#12398;&#12391;&#12289;Interface&#12391;&#12452;&#12531;&#12473;&#12479;&#12531;&#12473;(<code>com.chikkun.webcms.test.ITestDAO</code>)&#12434;&#21463;&#12369;&#21462;&#12427;&#12371;&#12392;&#12395;&#12394;&#12427;&#12398;&#12391;&#12289;
          &#12381;&#12398;Interface&#12434;&#20316;&#25104;&#12375;&#12394;&#12367;&#12390;&#12399;&#12394;&#12425;&#12394;&#12356;&#12290;&#38918;&#30058;&#12364;&#36870;&#12384;&#12364;&#12289;Eclipse&#12398;&#12522;&#12501;&#12449;&#12463;&#12479;&#12522;&#12531;&#12464;&#12434;&#20351;&#12358;&#12392;&#12289;&#12392;&#12387;&#12390;&#12418;&#31777;&#21336;&#12290;&#12477;&#12540;&#12473;&#19978;&#12391;&#21491;&#12463;&#12522;&#12483;&#12463;&#12375;&#12390;&#12300;Refacto&#65293;&#65310;Extract
          Ingerface&#12301;&#12391; &#12354;&#12387;&#12392;&#12356;&#12358;&#38291;&#12395;&#20316;&#25104;&#12373;&#12428;&#12427;&#12290;&#20986;&#26469;&#12383;&#12398;&#12364;&#27425;&#12398;&#12418;&#12398;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/25
 *
 */
package com.chikkun.webcms.test;

import com.chikkun.webcms.database.UserAlreadyExistException;

public interface ITestDAO {

  /**
   * ]]>&#12487;&#12540;&#12479;&#12434;<![CDATA[save]]>&#12377;&#12427;&#12290;
<![CDATA[   * @param u UserAndPassCommand
   * @throws UserAlreadyExistException
   */
  public abstract void save(final UserAndPassCommand u)
      throws UserAlreadyExistException;

  /**
   * ]]>&#12487;&#12540;&#12479;&#12434;&#21066;&#38500;&#12377;&#12427;&#12290;
<![CDATA[   * @param u
   */
  public abstract void delete(final UserAndPassCommand u);

}]]></source>
 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>DatabaseTestCase&#12434;&#20351;&#12387;&#12390;&#12398;&#12289;DB&#12398;&#12486;&#12473;&#12488;</title>
        <anchor id="dataTest"/>
        <p>DatabaseTestCase(DBUnit)&#12434;&#20351;&#12387;&#12390;&#12289;&#20808;&#12411;&#12393;&#12398;DAO&#12398;&#12486;&#12473;&#12488;&#12434;&#12375;&#12390;&#12415;&#12424;&#12358;&#12290;&#12392;&#12356;&#12387;&#12390;&#12418;&#12289;&#12424;&#12367;&#12431;&#12363;&#12387;&#12390;&#12356;&#12394;&#12356;&#12392;&#12371;&#12429;&#12418;&#12354;&#12387;&#12390;&#12289;&#33509;&#24178;&#19981;&#23433;&#12384;&#12364;&#12539;&#12539;&#12539;&#12539;&#12290;</p>
        <p>&#12414;&#12378;DBUnit&#12434;&#20351;&#12358;&#12392;&#20309;&#12364;&#12356;&#12356;&#12363;&#12392;&#12356;&#12358;&#12392;&#12289;DB&#12399;&#21051;&#12293;&#12392;&#29366;&#27841;&#12364;&#22793;&#12431;&#12427;&#12398;&#12391;&#12289;&#12394;&#12363;&#12394;&#12363;&#12486;&#12473;&#12488;&#12375;&#12389;&#12425;&#12356;&#12364;&#12289;&#12371;&#12398;DBunit&#12434;&#20351;&#12358;&#12392;&#12289;
          &#29694;&#22312;&#12398;DB&#12398;&#12487;&#12540;&#12479;&#12434;&#12496;&#12483;&#12463;&#12450;&#12483;&#12503;&#12434;&#21462;&#12387;&#12390;&#12362;&#12365;&#12289;&#26032;&#12375;&#12356;&#12487;&#12540;&#12479;&#12395;&#32622;&#12365;&#25563;&#12360;&#12390;&#12289;&#12486;&#12473;&#12488;&#12434;&#12375;&#12383;&#24460;&#12395;&#12289;&#26368;&#24460;&#12395;&#20803;&#12395;&#25147;&#12377;&#12392;&#35328;&#12358;&#12371;&#12392;&#12364;&#12289;&#27604;&#36611;&#30340;&#31777;&#21336;&#12395;&#12391;&#12365;&#12427;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;&#12377;&#12290; &#25163;&#38918;&#12392;&#12375;&#12390;&#12399;</p>
        <ol>
          <li>&#12487;&#12540;&#12479;&#12398;&#12496;&#12483;&#12463;&#12450;&#12483;&#12503;</li>
          <li>&#33258;&#20998;&#12398;&#29992;&#24847;&#12375;&#12383;&#12487;&#12540;&#12479;&#12395;&#22793;&#26356;(&#24517;&#38920;&#12391;&#12399;&#12394;&#12356;&#12289;&#12392;&#24605;&#12358;)</li>
          <li>&#12486;&#12473;&#12488;</li>
          <li>&#12496;&#12483;&#12463;&#12450;&#12483;&#12503;&#12434;&#20803;&#12395;&#25147;&#12377;</li>
        </ol>
        <p>&#26368;&#21021;&#12399;&#33258;&#20998;&#12398;&#29992;&#24847;&#12375;&#12383;&#12487;&#12540;&#12479;&#12434;&#29992;&#24847;&#12290;&#12371;&#12428;&#12399;xml&#12501;&#12449;&#12452;&#12523;&#12391;&#29992;&#24847;&#12377;&#12427;&#12290;&#24418;&#24335;&#12399;&#21336;&#32020;&#12391;&#12377;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <test id="1" pass="kazukun" name="sakai"/>
    <test id="2" pass="manabu" name="sato"/>
    <test id="3" pass="masami" name="ono"/>
</dataset>
        ]]></source>
        <p>&#27425;&#12395;&#12289;&#12487;&#12540;&#12479;&#12398;&#12496;&#12483;&#12463;&#12450;&#12483;&#12503;&#12289;&#12487;&#12540;&#12479;&#12398;&#20803;&#12395;&#25147;&#12377;class&#12434;&#20316;&#25104;&#12377;&#12427;(&#33394;&#12293;&#20351;&#12356;&#22238;&#12375;&#12364;&#20986;&#26469;&#12381;&#12358;&#12394;&#12398;&#12391;)&#12290;&#12414;&#12378;&#12399;&#12496;&#12483;&#12463;&#12450;&#12483;&#12503;(&#12371;&#12428;&#12418;DatabaseTestCase&#12434;&#21033;&#29992;)</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.webcms.database;

import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.DatabaseSequenceFilter;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.FilteredDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.filter.ITableFilter;
import org.dbunit.dataset.xml.FlatXmlDataSet;

/**
 * ]]>&#12487;&#12540;&#12479;&#12456;&#12463;&#12473;&#12509;&#12540;&#12488;<![CDATA[ DB]]>&#12398;&#12486;&#12540;&#12502;&#12523;<![CDATA[ -> XML]]>&#12501;&#12449;&#12452;&#12523;<![CDATA[.
 */
public class ExportXML {
  //]]>&#29872;&#22659;&#12364;&#22793;&#12431;&#12387;&#12383;&#12425;&#12371;&#12371;&#12434;&#22793;&#26356;
<![CDATA[  private final static String TARGET_DIR = "WEB-INF/database/";
  private String tableNames[];
  /**
   * default]]>&#12398;&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;<![CDATA[.
   */
  public ExportXML(String[] tableName) {
    super();
    this.tableNames = tableName;
  }

  /**
   * ]]>&#19982;&#12360;&#12425;&#12428;&#12383;&#12486;&#12540;&#12502;&#12523;&#21517;&#12434;&#12289;<![CDATA[xml]]>&#12501;&#12449;&#12452;&#12523;&#12392;&#12375;&#12390;&#26360;&#12365;&#20986;&#12377;&#12290;
<![CDATA[   * tableName.xml]]>&#12392;&#12394;&#12427;&#12290;
<![CDATA[   */
  public void exportToXML(){
    // ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#21462;&#24471;
<![CDATA[    try {

      IDatabaseConnection dbConn = getConnection();
      // ]]>&#20219;&#24847;&#12398;&#12486;&#12540;&#12502;&#12523;<![CDATA[(message)]]>&#12434;&#12456;&#12463;&#12473;&#12509;&#12540;&#12488;

<![CDATA[      System.out.println("<< ]]>&#12487;&#12540;&#12479;<![CDATA[Export]]>&#38283;&#22987;<![CDATA[ >>");

      ITableFilter filter = new DatabaseSequenceFilter(dbConn);

      for (int idx = 0; idx < tableNames.length; idx++) {
        System.out.println(tableNames[idx]);
        String[] table = new String[] {tableNames[idx]};
        IDataSet userDataSet = new FilteredDataSet(filter, dbConn
            .createDataSet(table));
        FlatXmlDataSet.write(userDataSet, new FileWriter(TARGET_DIR + tableNames[idx]
            + ".xml"), "Windows-31J");
      }
      System.out.println("<< ]]>&#12487;&#12540;&#12479;<![CDATA[Export]]>&#32066;&#20102;<![CDATA[ >>");
    } catch (DataSetException err) {
      err.printStackTrace();
    } catch (SQLException err) {
      err.printStackTrace();
    } catch (IOException err) {
      err.printStackTrace();
    } catch (Exception err) {
      err.printStackTrace();
    }
  }

  /**
   * @param tableNames
   *          ]]>&#12486;&#12540;&#12502;&#12523;&#12398;&#21517;&#21069;&#12398;&#37197;&#21015;
<![CDATA[   * @throws Exception
   *           ]]>&#20309;&#12425;&#12363;&#12398;&#20363;&#22806;
<![CDATA[   */
  public final void extractTables(final String[] tableNames) throws Exception {
    IDatabaseConnection connection = getConnection();

    for (int i = 0; i < tableNames.length; i++) {
      String tableName = tableNames[i];

      IDataSet partialDataSet = connection
          .createDataSet(new String[] {tableName});
      FlatXmlDataSet.write(partialDataSet, new FileWriter(TARGET_DIR
          + "/" + tableName + ".xml"), "Windows-31J");
    }
  }

  /**
   * @throws Exception
   *           ]]>&#25509;&#32154;&#12391;&#12365;&#12394;&#12356;
<![CDATA[   * @return IDatabaseConnection ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#12398;&#29983;&#25104;
<![CDATA[   */
  public final IDatabaseConnection getConnection() throws Exception {

    ResourceBundle resourcebundle = ResourceBundle
        .getBundle("Resources/ApplicationResources");
    String url = resourcebundle.getString("database.url");
    String driver = resourcebundle.getString("database.driver");
    String user = "sa";
    String password = "";

    // ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#12398;&#21462;&#24471;
<![CDATA[    Class.forName(driver);
    Connection conn = DriverManager.getConnection(url, user, password);
    IDatabaseConnection dbConn = new DatabaseConnection(conn);
    return dbConn;
  }
}
        ]]></source>
        <p>&#27425;&#12395;&#12289;&#12487;&#12540;&#12479;&#12434;&#25147;&#12377;&#12463;&#12521;&#12473;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.webcms.database;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

/**
 * ]]>&#12496;&#12483;&#12463;&#12450;&#12483;&#12503;&#12375;&#12383;<![CDATA[ XML -> DB.
 */
public class ImportXML {
  //]]>&#20445;&#23384;&#22580;&#25152;&#12434;&#22793;&#12360;&#12427;&#12392;&#12365;&#12399;&#12371;&#12428;&#12434;&#26360;&#12365;&#25563;&#12360;&#12427;&#12290;
<![CDATA[  private final static String TARGET_DIR = "WEB-INF/database/";
  private String tableNames[];

  public ImportXML(String[] tableNames) {
    super();
    this.tableNames = tableNames;
  }

  public void ImportToDB(){
    // ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#21462;&#24471;
<![CDATA[    try {

      IDatabaseConnection dbConn = getConnection();
      // ]]>&#20219;&#24847;&#12398;&#12486;&#12540;&#12502;&#12523;<![CDATA[(message)]]>&#12434;&#12456;&#12463;&#12473;&#12509;&#12540;&#12488;

<![CDATA[      System.out.println("<< ]]>&#12487;&#12540;&#12479;<![CDATA[Import]]>&#38283;&#22987;<![CDATA[ >>");

      for (int idx = 0; idx < tableNames.length; idx++) {
        System.out.println(tableNames[idx]);
        IDataSet dataSet = new FlatXmlDataSet(new FileInputStream(TARGET_DIR + tableNames[idx] + ".xml"));
        DatabaseOperation.CLEAN_INSERT.execute(dbConn, dataSet);
      }

    } catch (DataSetException err) {
      err.printStackTrace();
    } catch (SQLException err) {
      err.printStackTrace();
    } catch (IOException err) {
      err.printStackTrace();
    } catch (Exception err) {
      err.printStackTrace();
    }

    System.out.println("<< ]]>&#12487;&#12540;&#12479;<![CDATA[Import]]>&#32066;&#20102;<![CDATA[ >>");
  }
  /**
   * @throws Exception
   *           ]]>&#25509;&#32154;&#12391;&#12365;&#12394;&#12356;
<![CDATA[   * @return IDatabaseConnection ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#12398;&#29983;&#25104;
<![CDATA[   */
  public final IDatabaseConnection getConnection() throws Exception {

    ResourceBundle resourcebundle = ResourceBundle
        .getBundle("Resources/ApplicationResources");
    String url = resourcebundle.getString("database.url");
    String driver = resourcebundle.getString("database.driver");
    String user = "sa";
    String password = "";

    // ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#12398;&#21462;&#24471;
<![CDATA[    Class.forName(driver);
    Connection conn = DriverManager.getConnection(url, user, password);
    IDatabaseConnection dbConn = new DatabaseConnection(conn);
    return dbConn;
  }

}
        ]]></source>
        <p>&#12373;&#12390;&#12289;&#19978;&#35352;2&#12388;&#12434;&#20351;&#12356;&#12289;TestCase&#12398;&#12477;&#12540;&#12473;&#12399;&#27425;&#12398;&#12424;&#12358;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/26
 *
 */
package com.chikkun.webcms.database;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

import org.dbunit.Assertion;
import org.dbunit.DatabaseTestCase;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.DefaultDataSet;
import org.dbunit.dataset.DefaultTable;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.chikkun.webcms.test.TestDAO;
import com.chikkun.webcms.test.UserAndPassCommand;

public class TestDatabaseSample extends DatabaseTestCase {

  private TestDAO dao = null;

  public void testInsert() {

    // ]]>&#12473;&#12486;&#12540;&#12488;&#12513;&#12531;&#12488;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12434;&#29983;&#25104;
<![CDATA[    UserAndPassCommand command = new UserAndPassCommand();
    
    command.setPass("kazukun");
    command.setUser("chikkun");
    dao.save(command);
    
    command.setPass("kazukun");
    command.setUser("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA[");
    dao.save(command);

    try {
      ITable expectedSample = new FlatXmlDataSet(new FileReader(
          "WEB-INF/database/userAndPassResult.xml")).getTable("test");
      
      IDataSet actualDataSet = getConnection().createDataSet();
      ITable actualSample = actualDataSet.getTable("test");
      // ]]>&#23455;&#38555;&#12398;&#32080;&#26524;&#12392;&#20104;&#28204;&#12375;&#12383;&#32080;&#26524;&#12398;&#27604;&#36611;
<![CDATA[      Assertion.assertEquals(expectedSample, actualSample);
    } catch (DataSetException err) {
      err.printStackTrace();
    } catch (FileNotFoundException err) {
      err.printStackTrace();
    } catch (IOException err) {
      err.printStackTrace();
    } catch (SQLException err) {
      err.printStackTrace();
    } catch (DatabaseUnitException err) {
      err.printStackTrace();
    } catch (Exception err) {
      err.printStackTrace();
    }
  }

  public static void main(String[] args) {
    junit.textui.TestRunner.run(TestDatabaseSample.class);
  }

  /**
   * @exception Exception
   *              ]]>&#20309;&#12425;&#12363;&#12398;&#20363;&#22806;
<![CDATA[   * @return dbConn ]]>&#12371;&#12428;&#12399;<![CDATA[Hibernate]]>&#12434;&#20351;&#12358;&#12398;&#12391;&#12356;&#12425;&#12394;&#12356;&#12363;<![CDATA[ ]]>&#12487;&#12540;&#12479;&#12505;&#12540;&#12473;&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#12434;&#20316;&#25104;<![CDATA[.
   */
  protected final IDatabaseConnection getConnection() throws Exception {
    ResourceBundle resourcebundle = ResourceBundle
        .getBundle("Resources/ApplicationResources");
    String url = resourcebundle.getString("database.url");
    String driver = resourcebundle.getString("database.driver");

    String user = "sa";
    String password = "";

    // ]]>&#12467;&#12493;&#12463;&#12471;&#12519;&#12531;&#12398;&#21462;&#24471;
<![CDATA[    Class.forName(driver);
    Connection conn = DriverManager.getConnection(url, user, password);
    IDatabaseConnection dbConn = new DatabaseConnection(conn);
    return dbConn;
  }

  /**
   * @exception Exception
   *              ]]>&#20309;&#12425;&#12363;&#12398;&#20363;&#22806;
<![CDATA[   * @return IDataSet ]]>&#12487;&#12540;&#12479;&#12505;&#12540;&#12473;&#12398;&#21021;&#26399;&#21270;&#29992;&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;
<![CDATA[   */
  protected final IDataSet getDataSet() throws Exception {
    IDataSet dataSet = new FlatXmlDataSet(new FileInputStream(
        "WEB-INF/database/userAndPass.xml"));
    return dataSet;
  }

  /**
   * @exception Exception
   *              ]]>&#20309;&#12425;&#12363;&#12398;&#20363;&#22806;<![CDATA[ ]]>&#12486;&#12473;&#12488;&#12398;&#26368;&#24460;&#12398;&#20966;&#29702;<![CDATA[.
   */
  protected final void tearDown() throws Exception {
    super.tearDown();
    
    ImportXML ix = new ImportXML(new String[]{"test"});
    
    ix.ImportToDB();
  }

  protected final void setUp() throws Exception {

    ExportXML ex = new ExportXML(new String[]{"test"});

    ex.exportToXML();
    super.setUp();
  
    //]]>&#26368;&#21021;&#12398;&#12480;&#12511;&#12540;&#12487;&#12540;&#12479;&#12364;<![CDATA[3]]>&#12388;&#12394;&#12398;&#12391;&#12289;<![CDATA[sequence]]>&#12398;&#20516;&#12434;<![CDATA[4]]>&#12395;&#12375;&#12390;&#12362;&#12367;&#12290;
<![CDATA[    Connection con;
    try {
      Class.forName("org.hsqldb.jdbcDriver");

      con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost","sa","");
      Statement stmt = con.createStatement();
      String sql =  "ALTER TABLE TEST ALTER COLUMN ID RESTART WITH 4;";//"ALTER SEQUENCE ID RESTART WITH 1;";
      stmt.executeQuery(sql);
      stmt.close();
      con.close();

    } catch (ClassNotFoundException err1) {
      // TODO ]]>&#33258;&#21205;&#29983;&#25104;&#12373;&#12428;&#12383;<![CDATA[ catch ]]>&#12502;&#12525;&#12483;&#12463;
<![CDATA[      err1.printStackTrace();
    } catch (SQLException err1) {
      // TODO ]]>&#33258;&#21205;&#29983;&#25104;&#12373;&#12428;&#12383;<![CDATA[ catch ]]>&#12502;&#12525;&#12483;&#12463;
<![CDATA[      err1.printStackTrace();
    }

  }

  public TestDatabaseSample() {
    super();
  }

  public TestDatabaseSample(String arg0) {
    super(arg0); // C:\eclipse\workspace\webcms\src\webapp\WEB-INF\webcms-servlet.xml
    ApplicationContext context = new FileSystemXmlApplicationContext(
        "src/webapp/WEB-INF/webcms-servlet.xml");

    BeanFactory beanFactory = (BeanFactory) context;

    dao = (TestDAO) beanFactory.getBean("testDAO");
  }
}
        ]]></source>
        <p>&#12411;&#12392;&#12435;&#12393;&#12289;test&#33258;&#20307;&#12399;&#20309;&#12418;&#12375;&#12390;&#12356;&#12414;&#12379;&#12435;&#12364;&#12289;&#19968;&#24540;&#12486;&#12473;&#12488;&#12395;&#36890;&#12387;&#12383;&#12398;&#12391;&#12289;&#12499;&#12472;&#12493;&#12473;&#12525;&#12472;&#12483;&#12463;&#12434;&#20316;&#25104;&#12375;&#12424;&#12358;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>&#12499;&#12472;&#12493;&#12473;&#12525;&#12472;&#12483;&#12463;&#12398;bean&#20316;&#25104;UserAndPassEnroll&#12398;&#20316;&#25104;</title>
        <anchor id="business"/>
        <p>&#20170;&#22238;&#12399;DB&#12395;&#30331;&#37682;&#12377;&#12427;&#12384;&#12369;&#12290;<em>Xdoclet&#12398;&#12479;&#12464;&#12418;&#12375;&#12387;&#12363;&#12426;&#26360;&#12365;&#36796;&#12416;&#12290;</em>
        </p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/14
 *
 */
package com.chikkun.webcms.test;

/**
 * @author Chiku Kazuro
 * @spring.bean name="enroll"
 * @spring.property
 *  name="dao"
 *  ref="testService"
 */
public class UserAndPassEnroll {

  /**
   * <code>data</code> ]]>&#12467;&#12510;&#12531;&#12489;&#12463;&#12521;&#12473;
<![CDATA[   */
  private UserAndPassCommand data;
  
  private ITestDAO dao;
  
  /**
   * ]]>&#23455;&#38555;&#12395;&#12399;&#12289;&#12371;&#12371;&#12391;&#12487;&#12540;&#12479;&#12505;&#12540;&#12473;&#12394;&#12393;&#12395;&#30331;&#37682;&#12377;&#12427;&#12290;
<![CDATA[   * @param d
   */
  public void enroll(UserAndPassCommand d) {
    data = d;
    
    dao.save(data);
  }

  public ITestDAO getDao() {
    return this.dao;
  }

  public void setDao(ITestDAO dao) {
    this.dao = dao;
  }
}
                ]]></source>
                 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      
      <section>
        <title>controller&#12398;&#20316;&#25104;</title>
        <p>Controller&#12399;&#33394;&#12293;&#12289;&#20415;&#21033;&#12394;&#12513;&#12477;&#12483;&#12489;&#12364;&#23450;&#32681;&#12375;&#12390;&#12356;&#12427;&#12381;&#12358;&#12384;&#12364;&#12289;&#12381;&#12428;&#12399;&#20170;&#24460;&#12398;&#25913;&#38988;&#12392;&#12375;&#12390;&#12289;&#12392;&#12426;&#12354;&#12360;&#12378;&#31777;&#21336;&#12394;&#12418;&#12398;&#12434;&#20316;&#25104;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/14
 *
 */
package com.chikkun.webcms.test;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;



/**
 * @author Chiku Kazuro
 * @spring.bean
 *  name="/userAndPass.htm"
 * @spring.property
 *   name="formView" value="input"
 * @spring.property
 *   name="successView" value="inputSuccess"
 * @spring.property
 *   name="validator" ref="userAndPassValidator"
 */
public class UserAndPassInputController extends SimpleFormController {

  /**
   * ]]>&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;&#12540;&#12391;&#12467;&#12510;&#12531;&#12489;&#12463;&#12521;&#12473;&#12434;&#30331;&#37682;
<![CDATA[   */
  public UserAndPassInputController() {
    setCommandClass(UserAndPassCommand.class);
  }

  /**
   * ]]>&#12513;&#12452;&#12531;&#12398;&#12513;&#12477;&#12483;&#12489;&#12290;
<![CDATA[   * 
   * @see org.springframework.web.servlet.mvc.SimpleFormController#doSubmitAction(java.lang.Object)
   */
  protected ModelAndView onSubmit(Object command, BindException errors)
      throws Exception {
    UserAndPassCommand upCommand = (UserAndPassCommand) command;
    util.enroll(upCommand);
    return new ModelAndView(getSuccessView(), "command", command);
  }

  /**
   * <code>util</code> ]]>&#12399;&#12289;&#12487;&#12540;&#12479;&#12398;&#20966;&#29702;&#12434;&#12377;&#12427;&#12463;&#12521;&#12473;&#12290;<![CDATA[<br>
   * ]]>&#23455;&#38555;&#12395;&#12399;<![CDATA[DB]]>&#12395;&#30331;&#37682;&#12394;&#12393;&#12434;&#12377;&#12427;&#12398;&#12384;&#12429;&#12358;&#12364;&#12289;&#20170;&#22238;&#12399;<![CDATA[System.out.println]]>&#12377;&#12427;&#12384;&#12369;&#12290;
<![CDATA[   */
  private UserAndPassEnroll util;

  /**
   * getter
   * 
   * @return util
   */
  public UserAndPassEnroll getUtil() {
    return this.util;
  }

  /**
   * setter
   * 
   * @param u
   */
  public void setUtil(UserAndPassEnroll u) {
    this.util = u;
  }
}
                ]]></source>
                 <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>controller&#12398;&#35373;&#23450;&#12398;&#26360;&#12365;&#36796;&#12415;</title>
        <anchor id="controllerSetting"/>
        <p>&#12371;&#12428;&#12399;&#19978;&#35352;&#12398;&#12289;@spring&#12479;&#12464;&#12391;&#26360;&#12365;&#20986;&#12375;&#12390;&#12367;&#12428;&#12427;&#12398;&#12391;</p>
        <p>
          <code>ant spring2</code>&#12391;&#12362;&#12375;&#12414;&#12356;&#12290;</p>
           <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>Spring&#12398;Validator&#12398;&#20316;&#25104;(Commons&#12376;&#12419;&#12394;&#12356;!)</title>
        <anchor id="springValidator"/>
        <p>&#21069;&#21069;&#31680;&#12398;@spring&#12479;&#12464;&#12391;&#26360;&#12356;&#12383;</p>
        <source xml:space="preserve"><![CDATA[
 * @spring.property
 *   name="validator" ref="userAndPassValidator"
 ]]></source>
        <p>Validator&#12434;&#20316;&#25104;&#12375;&#12414;&#12377;&#12290;&#29694;&#22312;&#20316;&#12387;&#12390;&#12356;&#12427;<em>UserAndPassInputController</em>&#12399;<em>SimpleFormController</em>
            &#12434;&#32153;&#25215;&#12375;&#12390;&#12356;&#12390;&#12289;&#12371;&#12398;controller&#12399;&#19978;&#35352;&#12398;&#12424;&#12358;&#12395;&#35373;&#23450;&#12375;&#12390;&#12362;&#12367;&#12392;&#12289;&#33258;&#21205;&#12391;validator&#12434;&#23455;&#34892;&#12375;&#12289;&#25104;&#21151;&#12375;&#12383;&#12425;<em>inputSuccess</em>&#12289;&#22833;&#25943;&#12375;&#12383;&#12425;<em>input</em>
          &#12395;&#39131;&#12400;&#12373;&#12428;&#12414;&#12377;(&#12371;&#12428;&#12425;2&#12388;&#12398;resolver&#12398;&#23450;&#32681;&#12399;&#12414;&#12384;)&#12290; </p>
        <p>&#12414;&#12383;&#12289;GET(&#12388;&#12414;&#12426;&#26368;&#21021;&#12398;&#12522;&#12463;&#12456;&#12473;&#12488;&#12398;&#22580;&#21512;)&#12398;&#22580;&#21512;&#12418;input&#12395;&#39131;&#12400;&#12373;&#12428;&#12414;&#12377;&#12290;</p>
        <p>&#12414;&#12383;&#12289;validator&#12398;&#20351;&#12356;&#26041;&#12399;<link href="validator.html">&#12371;&#12371;</link>&#12434;&#21442;&#32771;&#12395;&#12373;&#12428;&#12383;&#12375;&#12290;</p>
        <p>&#20170;&#22238;&#12399;user&#12399;required&#12392;maxlength(&#26368;&#22823;&#20309;&#25991;&#23383;&#12363;)&#12289;pass&#12399;required&#12392;minlength&#12434;&#25351;&#23450;&#12375;&#12390;&#12356;&#12414;&#12377;(&#35373;&#23450;&#12399;<link href="#commonsValidator">&#12371;&#12371;</link>)</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/20
 *
 */
package com.chikkun.webcms.test;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import com.chikkun.common.validator.ValidateUtils;

/**
 * @author Chiku Kazuro
 * @spring.bean name="userAndPassValidator"
 */
public class UserAndPassValidator implements Validator {

  public boolean supports(Class clazz) {
    return clazz.equals(UserAndPassCommand.class);
  }

  public void validate(Object command, Errors errors) {
    UserAndPassCommand up = (UserAndPassCommand) command;

    ValidateUtils util = new ValidateUtils("command","validator-spring.properties");
    // errors.reject("name",errMessage);

    if(!util.validateField("user",up)){
      errors.rejectValue("user","", util.getErrorMessage("user"));
      System.out.print(util.getErrorMessage("user"));
    }
    if(!util.validateField("pass",up)){
      errors.rejectValue("pass","",util.getErrorMessage("pass"));
      System.out.print(util.getErrorMessage("pass"));
    }

  }
}
        ]]></source>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>Commons Validator&#12398;&#35373;&#23450;</title>
        <anchor id="commonsValidator"/>
        <p>&#19978;&#35352;&#12398;UserAndPassValidator&#12391;&#20351;&#12431;&#12428;&#12390;&#12356;&#12427;&#12300;util.validateField("user",up)&#12301;&#12394;&#12393;&#12398;&#20351;&#12356;&#26041;&#12399;<link href="Validator.html">Validator&#12398;&#20351;&#12356;&#26041;</link>&#12434;&#21442;&#32771;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290; </p>
        <p>&#35373;&#23450;&#12398;&#20181;&#26041;&#12434;&#31777;&#21336;&#12395;&#26360;&#12367;&#12392;&#12289;&#12414;&#12378;&#12399;Struts&#12398;&#22580;&#21512;&#12392;&#21516;&#27096;&#12395;&#12289;validator.xml&#12395;&#23450;&#32681;&#12434;&#26360;&#12365;&#12414;&#12377;&#12290;&#12383;&#12384;&#12289;&#12371;&#12398;validator.xml&#12399;
          com.chikkun.common.validator.ValidatorLoader.class&#12392;&#21516;&#12376;&#22580;&#25152;&#12395;&#32622;&#12365;&#12414;&#12377;(&#12356;&#12378;&#12428;&#12395;&#22793;&#12360;&#12394;&#12365;&#12419;)&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
    <formset>
        <form name="command">
            <field property="user" depends="required,maxlength">
                <arg0 key="form.name.displayname"/>
                <arg1 name="maxlength" key="${var:maxlength}"/>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>12</var-value>
                </var>
            </field>
            <field property="pass" depends="required,minlength">
                <arg0 key="form.pass.displayname"/>
                <arg1 key="${var:minlength}"/>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>5</var-value>
                </var>
            </field>
        </form>
    </formset>
</form-validation>
        ]]></source>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>&#12356;&#12424;&#12356;&#12424;&#12289;Junit&#12391;&#30906;&#35469;</title>
        <anchor id="junitSpring"/>
        <p>Spring MVC&#12398;&#12486;&#12473;&#12488;&#12395;&#12399;&#12289;spring&#12391;mock&#12434;&#29992;&#24847;&#12375;&#12390;&#12367;&#12428;&#12390;&#12356;&#12427;&#12290;&#12392;&#24605;&#12387;&#12383;&#12425;&#12289;<em>spring.jar</em>&#12398;&#20013;&#12395;&#12399;&#20837;&#12387;&#12390;&#12356;&#12394;&#12356;&#12425;&#12375;&#12356;&#12290;</p>
        <p>&#12381;&#12371;&#12391;&#12289;&#26032;&#12375;&#12367;project.xml&#12395;&#26360;&#12365;&#36796;&#12416;&#12290;&#12381;&#12375;&#12383;&#12425;</p>
        <ul>
          <li>maven eclipse(&#12381;&#12358;&#12377;&#12427;&#12392;&#12480;&#12454;&#12531;&#12525;&#12540;&#12489;&#12364;&#22987;&#12414;&#12427;)</li>
          <li>eclipse&#12398;F5&#12434;&#25276;&#12377;&#12290;</li>
          <li>eclipse&#12398;property&#12391;build path&#12398;&#12481;&#12455;&#12483;&#12463;&#12510;&#12540;&#12463;&#12434;&#20837;&#12428;&#12427;&#12290;</li>
        </ul>
        <source xml:space="preserve"><![CDATA[
  <groupId>springframework</groupId>
  <artifactId>spring-mock</artifactId>
  <version>1.2.5</version>
  <type>jar</type>
      <properties>
        <cactus.bundle>true</cactus.bundle>
      </properties>
     </dependency>
        ]]></source>
        <p>&#20170;&#22238;&#12399;&#31777;&#21336;&#12394;&#12481;&#12455;&#12483;&#12463;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/27
 *
 */
package com.chikkun.webcms.test;

import junit.framework.TestCase;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class UserAndPassMockTest extends TestCase {

  private Controller controller;
  
  public static void main(String[] args) {
    junit.textui.TestRunner.run(UserAndPassMockTest.class);
  }

  public UserAndPassMockTest(String arg0) {
    super(arg0);
  }
  //]]>&#25104;&#21151;&#12398;&#22580;&#21512;
<![CDATA[ public void testOnSubmitSuccess(){
    MockHttpServletRequest req = new MockHttpServletRequest("POST","userAndPass.htm");
    req.addParameter("user","sakai");
    req.addParameter("pass","kazukunro");
    ModelAndView mv = null;
    try {
      mv = controller.handleRequest(req,new MockHttpServletResponse());
    } catch (Exception err) {
      err.printStackTrace();
    }
    //"command"]]>&#12399;<![CDATA[bean]]>&#12398;&#21517;&#21069;<![CDATA[(]]>&#12392;&#24605;&#12358;<![CDATA[)
    Errors errors = (Errors) mv.getModel().get( BindException.ERROR_KEY_PREFIX + "command");
    assertNull("Errors",errors);
    
    //]]>&#36983;&#31227;&#20808;&#12398;&#12481;&#12455;&#12483;&#12463;
<![CDATA[    assertEquals("viewName","inputSuccess",mv.getViewName());
    
    }

 //]]>&#22833;&#25943;&#12398;&#22580;&#21512;
<![CDATA[ public void testOnSubmitFailure(){
   MockHttpServletRequest req = new MockHttpServletRequest("POST","userAndPass.htm");
   req.addParameter("user","sakai");
   //]]>&#12497;&#12473;&#12527;&#12540;&#12489;&#12399;<![CDATA[5]]>&#25991;&#23383;&#20197;&#19978;
<![CDATA[   req.addParameter("pass","kazu");
   ModelAndView mv = null;
   try {
     mv = controller.handleRequest(req,new MockHttpServletResponse());
   } catch (Exception err) {
     err.printStackTrace();
   }
   
   Errors errors = (Errors) mv.getModel().get( BindException.ERROR_KEY_PREFIX + "command");
   assertNotNull("Errors",errors);
   
   //]]>&#12456;&#12521;&#12540;<![CDATA[message]]>&#12398;&#12481;&#12455;&#12483;&#12463;
<![CDATA[   assertEquals("message","]]>&#12497;&#12473;&#12527;&#12540;&#12489;&#12399;<![CDATA[5]]>&#25991;&#23383;&#20197;&#19978;&#12395;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;<![CDATA[",errors.getFieldError("pass").getDefaultMessage());

   //]]>&#36983;&#31227;&#20808;&#12398;&#12481;&#12455;&#12483;&#12463;
<![CDATA[   assertEquals("viewName","input",mv.getViewName());
   }

  protected void setUp() throws Exception {
    ApplicationContext context = new FileSystemXmlApplicationContext(
    "src/webapp/WEB-INF/webcms-servlet.xml");

    BeanFactory beanFactory = (BeanFactory) context;
    controller = (Controller) beanFactory.getBean("/userAndPass.htm");
    
    super.setUp();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }
}
        ]]></source>
        <p>
          <strong>&#12420;&#12387;&#12383;&#65374;&#12290;&#36890;&#12387;&#12383;&#12382;!!</strong>
        </p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>&#19968;&#24540;&#30906;&#35469;</title>
        <anchor id="confirm"/>
        <ol>
          <li>http://localhost:8080/webcms/userAndPass.htm&#12395;&#12450;&#12463;&#12475;&#12473;&#12377;&#12427;&#12290;</li>
          <li>&#20309;&#12418;&#20837;&#12428;&#12394;&#12356;&#12392;&#12289;&#36196;&#12356;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12364;&#21152;&#12431;&#12387;&#12383;&#12289;&#20837;&#21147;&#30011;&#38754;&#12395;&#25147;&#12427;&#12290;</li>
          <li>user&#12395;&#12300;sakai&#12301;&#12434;&#20837;&#21147;&#12375;&#12289;pass&#12395;&#12300;baka(5&#25991;&#23383;&#20197;&#19978;&#12391;&#12394;&#12356;&#12392;&#12384;&#12417;)&#12301;&#12434;&#20837;&#12428;&#12427;&#12392;&#12289;&#21516;&#27096;&#12395;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12434;&#34920;&#31034;&#12375;&#12390;&#12289;&#12414;&#12383;&#20837;&#21147;&#30011;&#38754;&#12395;&#25147;&#12427;&#12290; </li>
          <li>user&#12395;&#12300;sakai&#12301;&#12434;&#20837;&#21147;&#12375;&#12289;pass&#12395;&#12300;kazuro&#12301;&#12434;&#20837;&#12428;&#12427;&#12392;&#12289;&#20837;&#21147;&#12375;&#12383;&#12487;&#12540;&#12479;&#12434;&#34920;&#31034;&#12375;&#12390;&#12289;&#12362;&#12375;&#12414;&#12356;&#12290;</li>
        </ol>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>&#33853;&#12385;&#31298;&#25342;&#12356;</title>
        <p>&#26412;&#12395;&#20986;&#12390;&#12356;&#12383;processFormSubmission&#12392;&#12356;&#12358;SimpleFormController&#12398;&#12513;&#12477;&#12483;&#12489;&#12434;&#20837;&#12428;&#12390;&#12415;&#12424;&#12358;&#12290;</p>
        <p>SimpleFormController&#12398;Javadoc&#12399;<link href="http://www.springframework.org/docs/api/org/springframework/web/servlet/mvc/SimpleFormController.html">SimpleFormController</link>&#12395;&#12354;&#12426;&#12414;&#12377;&#12290;</p>
        <p>&#12418;&#12392;&#12418;&#12392;&#12289;validator&#12394;&#12393;&#12391;&#12289;&#12456;&#12521;&#12540;&#12364;&#36215;&#12371;&#12387;&#12383;&#22580;&#21512;&#21628;&#12403;&#20986;&#12373;&#12428;&#12427;&#12513;&#12477;&#12483;&#12489;&#12391;&#12289; This implementation calls showForm in case of
          errors, and delegates to onSubmit's full version
          else.&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;&#12394;&#12398;&#12391;&#12289;onSubmit&#12398;&#20195;&#12431;&#12426;&#12395;&#12371;&#12398;&#12513;&#12477;&#12483;&#12489;&#12364;&#22996;&#35698;&#12373;&#12428;&#12427;&#12392;&#35328;&#12358;&#12371;&#12392;&#12384;&#12429;&#12358;&#12290;</p>
        <p>&#20170;&#22238;&#12399;&#12289;input.vm&#12395;&#12461;&#12515;&#12531;&#12475;&#12523;&#12508;&#12479;&#12531;&#12434;&#12388;&#12369;&#12390;&#12289;&#12371;&#12398;&#12508;&#12479;&#12531;&#12364;&#25276;&#12373;&#12428;&#12383;&#12425;&#12289;&#12300;&#12461;&#12515;&#12531;&#12475;&#12523;&#12373;&#12428;&#12414;&#12375;&#12383;&#12301;&#12392;&#12356;&#12358;&#34920;&#31034;&#12434;&#12373;&#12379;&#12390;&#12415;&#12424;&#12358;&#12290;</p>
        <p>&#12414;&#12378;&#12399;&#12381;&#12398;&#34920;&#31034;&#29992;&#12398;vm(cancel.vm)&#12398;&#20316;&#25104;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<title>]]>&#12461;&#12515;&#12531;&#12475;&#12523;<![CDATA[</title>
</head>
<body>

]]>&#12461;&#12515;&#12531;&#12475;&#12523;&#12373;&#12428;&#12414;&#12375;&#12383;&#12290;

<![CDATA[<a href="userAndPass.htm">]]>&#12418;&#12392;&#12395;&#25147;&#12427;<![CDATA[</a>
</body>
        ]]></source>
        <p>&#12373;&#12425;&#12395;&#20197;&#21069;&#12363;&#12425;&#12354;&#12427;input.vm&#12395;&#12461;&#12515;&#12531;&#12475;&#12523;&#12508;&#12479;&#12531;&#12434;&#36861;&#21152;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<TITLE>]]>&#12518;&#12540;&#12470;&#12540;&#21517;&#12392;&#12497;&#12473;&#12527;&#12540;&#12489;&#20837;&#21147;<![CDATA[</TITLE>
</HEAD>
<BODY>
<FORM  action="userAndPass.htm" name="user" method="post">
#springBind("command.user")
<font color="red">${status.errorMessage}</font>
<br/>

]]>&#12518;&#12540;&#12470;&#12540;&#21517;<![CDATA[<INPUT size="20" type="text" maxlength="10" name="user" value="$!status.value">
<br/>
#springBind("command.pass")
<font color="red">${status.errorMessage}</font>
<br/>
]]>&#12497;&#12473;&#12527;&#12540;&#12489;<![CDATA[<INPUT size="20" type="password" maxlength="20" name="pass" value="$!status.value">
<br/>
<INPUT type="submit" name="button" value="]]>&#36865;&#20449;<![CDATA["><input type="submit" name="cancel" value="]]>&#12461;&#12515;&#12531;&#12475;&#12523;<![CDATA[">
</FORM>
</BODY>
</HTML>
        ]]></source>
        <p>&#12381;&#12375;&#12390;&#12289;&#27425;&#12395;Controller&#12391;&#12354;&#12427;UserAndPassInputController&#12395;processFormSubmission&#12434;&#26360;&#12365;&#36796;&#12435;&#12391;&#12415;&#12424;&#12358;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/14
 *
 */
package com.chikkun.webcms.test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.util.WebUtils;

/**
 * @author Chiku Kazuro
 * @spring.bean name="/userAndPass.htm"
 * @spring.property name="formView" value="input"
 * @spring.property name="successView" value="inputSuccess"
 * @spring.property name="validator" ref="userAndPassValidator"
 * @spring.property name="util" ref="enroll"
 */
public class UserAndPassInputController extends SimpleFormController {

  /**
   * <code>util</code> ]]>&#12399;&#12289;&#12487;&#12540;&#12479;&#12398;&#20966;&#29702;&#12434;&#12377;&#12427;&#12463;&#12521;&#12473;&#12290;<![CDATA[<br>
   * ]]>&#23455;&#38555;&#12395;&#12399;<![CDATA[DB]]>&#12395;&#30331;&#37682;&#12394;&#12393;&#12434;&#12377;&#12427;&#12398;&#12384;&#12429;&#12358;&#12364;&#12289;&#20170;&#22238;&#12399;<![CDATA[System.out.println]]>&#12377;&#12427;&#12384;&#12369;&#12290;
<![CDATA[   */
  private UserAndPassEnroll util;

  
  /**
   * ]]>&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;&#12540;&#12391;&#12467;&#12510;&#12531;&#12489;&#12463;&#12521;&#12473;&#12434;&#30331;&#37682;
<![CDATA[   */
  public UserAndPassInputController() {
    setCommandClass(UserAndPassCommand.class);
  }

  /**
   * ]]>&#12513;&#12452;&#12531;&#12398;&#12513;&#12477;&#12483;&#12489;&#12290;
<![CDATA[   * 
   * @see org.springframework.web.servlet.mvc.SimpleFormController#doSubmitAction(java.lang.Object)
   */
  protected ModelAndView onSubmit(Object command, BindException errors)
      throws Exception {
    UserAndPassCommand upCommand = (UserAndPassCommand) command;
    util.enroll(upCommand);
    return new ModelAndView(getSuccessView(), "command", command);
  }

  protected ModelAndView processFormSubmission(HttpServletRequest request,
      HttpServletResponse response, Object command, BindException errors) throws Exception{
    if(WebUtils.hasSubmitParameter(request,"cancel")){
      return new ModelAndView("cancel");
    }
    return super.processFormSubmission(request, response, command, errors);
  }

  /**
   * getter
   * 
   * @return util
   */
  public UserAndPassEnroll getUtil() {
    return this.util;
  }

  /**
   * setter
   * 
   * @param u
   */
  public void setUtil(UserAndPassEnroll u) {
    this.util = u;
  }
}
        ]]></source>
        <p>
          <em>&#12377;&#12435;&#12394;&#12426;&#12358;&#12414;&#12367;&#12356;&#12387;&#12383;&#12290;</em>struts&#12398;&#22580;&#21512;&#12399;LookupDispatchAction&#12434;&#20351;&#12387;&#12390;&#12289;&#12508;&#12479;&#12531;&#12372;&#12392;&#12395;&#12513;&#12477;&#12483;&#12489;&#12434;&#22793;&#12360;&#12427;&#26041;&#27861;&#12391;&#12420;&#12387;&#12390;&#12356;&#12383;&#12369;&#12393;&#12289;&#12371;&#12398;&#26041;&#12364;&#31777;&#21336;&#12384;!</p>
           <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>&#21516;&#12376;&#12518;&#12540;&#12470;&#21517;&#12399;&#30331;&#37682;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12395;&#12377;&#12427;</title>
        <p>&#23455;&#38555;&#12395;&#12399;TEST&#12392;&#12356;&#12358;&#12486;&#12540;&#12502;&#12523;&#12398;user&#12392;&#12356;&#12358;&#12501;&#12451;&#12540;&#12523;&#12489;&#12399;unique&#23646;&#24615;&#12434;&#12388;&#12369;&#12390;&#12394;&#12356;&#12364;&#12289;&#36890;&#24120;&#12399;&#12420;&#12399;&#12426;unique&#12376;&#12419;&#12394;&#12365;&#12419;&#12356;&#12369;&#12394;&#12356;&#12398;&#12391;&#12289;
          validator&#12391;&#34892;&#12358;&#12363;&#12289;&#20808;&#12411;&#12393;&#12398;&#12513;&#12477;&#12483;&#12489;processFormSubmission&#12391;&#34892;&#12358;&#12363;&#12398;&#12393;&#12385;&#12425;&#12363;&#12384;&#12369;&#12428;&#12393;&#12289;&#20170;&#22238;&#12399;&#24460;&#32773;&#12391;&#12420;&#12387;&#12390;&#12415;&#12424;&#12358;&#12290;</p>
        <p>&#12414;&#12378;&#12399;&#12289;processFormSubmission&#12434;&#23569;&#12375;&#26360;&#12365;&#25563;&#12360;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/14
 *
 */
package com.chikkun.webcms.test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.util.WebUtils;

/**
 * @author Chiku Kazuro
 * @spring.bean name="/userAndPass.htm"
 * @spring.property name="formView" value="input"
 * @spring.property name="successView" value="inputSuccess"
 * @spring.property name="validator" ref="userAndPassValidator"
 * @spring.property name="util" ref="enroll"
 * @spring.property name="dao" ref="testService"
 */
public class UserAndPassInputController extends SimpleFormController {

  /**
   * <code>util</code> ]]>&#12399;&#12289;&#12487;&#12540;&#12479;&#12398;&#20966;&#29702;&#12434;&#12377;&#12427;&#12463;&#12521;&#12473;&#12290;<![CDATA[<br>
   * ]]>&#23455;&#38555;&#12395;&#12399;<![CDATA[DB]]>&#12395;&#30331;&#37682;&#12394;&#12393;&#12434;&#12377;&#12427;&#12398;&#12384;&#12429;&#12358;&#12364;&#12289;&#20170;&#22238;&#12399;<![CDATA[System.out.println]]>&#12377;&#12427;&#12384;&#12369;&#12290;
<![CDATA[   */
  private UserAndPassEnroll util;

  private ITestDAO dao;

  /**
   * ]]>&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;&#12540;&#12391;&#12467;&#12510;&#12531;&#12489;&#12463;&#12521;&#12473;&#12434;&#30331;&#37682;
<![CDATA[   */
  public UserAndPassInputController() {
    setCommandClass(UserAndPassCommand.class);
  }

  /**
   * ]]>&#12513;&#12452;&#12531;&#12398;&#12513;&#12477;&#12483;&#12489;&#12290;
<![CDATA[   * 
   * @see org.springframework.web.servlet.mvc.SimpleFormController#doSubmitAction(java.lang.Object)
   */
  protected ModelAndView onSubmit(Object command, BindException errors)
      throws Exception {
    UserAndPassCommand upCommand = (UserAndPassCommand) command;
    util.enroll(upCommand);
    return new ModelAndView(getSuccessView(), "command", command);
  }

  protected ModelAndView processFormSubmission(HttpServletRequest request,
      HttpServletResponse response, Object command, BindException errors)
      throws Exception {
    UserAndPassCommand upCommand = (UserAndPassCommand) command;
    if (WebUtils.hasSubmitParameter(request, "cancel")) {
      return new ModelAndView("cancel");
    }
    if(dao.isExist(upCommand)){
      errors.rejectValue("user","","]]>&#12381;&#12398;&#12518;&#12540;&#12470;&#12540;&#21517;&#12399;&#30331;&#37682;&#12373;&#12428;&#12390;&#12356;&#12414;&#12377;<![CDATA[");
    }
    return super.processFormSubmission(request, response, command, errors);
  }

  /**
   * getter
   * 
   * @return util
   */
  public UserAndPassEnroll getUtil() {
    return this.util;
  }

  /**
   * setter
   * 
   * @param u
   */
  public void setUtil(UserAndPassEnroll u) {
    this.util = u;
  }

  public ITestDAO getDao() {
    return this.dao;
  }

  public void setDao(ITestDAO dao) {
    this.dao = dao;
  }
}
        ]]></source>
        <p>processFormSubmission&#12513;&#12477;&#12483;&#12489;&#12395;&#36861;&#21152;&#12375;&#12383;&#12392;&#21516;&#26178;&#12395;&#12289;xdoclet&#12398;&#12479;&#12464;&#12434;<em>@spring.property name="dao"
            ref="testService"</em>&#12434;&#36861;&#21152;&#12375;&#12383;&#12290;</p>
        <p>&#12358;&#12435;&#12385;&#12423;&#12387;&#12392;&#35440;&#12414;&#12387;&#12383;&#12369;&#12393;&#12289;&#12414;&#12354;&#12367;&#12414;&#12367;&#12356;&#12387;&#12383;&#12290;</p>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
    </section>
    <section>
      <title>SpringWebFlow</title>
      <p>&#12414;&#12378;&#12399;<em>&#32080;&#35542;&#12363;&#12425;&#35328;&#12358;&#12392;</em>&#12289;Velocity&#12391;&#12394;&#12435;&#12392;&#12363;&#12356;&#12371;&#12358;&#12392;&#21322;&#26085;&#12377;&#12387;&#12383;&#12418;&#12435;&#12384;&#12375;&#12383;&#12364;&#12289;&#32080;&#23616;&#12358;&#12414;&#12367;&#12356;&#12363;&#12378;(spring&#12398;&#12479;&#12464;&#12364;&#20351;&#12360;&#12394;&#12356;)&#12289;&#32080;&#23616;jsp&#12391;&#34892;&#12367;&#12371;&#12392;&#12395;&#12375;&#12383; &#12290;
        &#12375;&#12383;&#12364;&#12390;&#12289;&#30456;&#24403;&#26360;&#12365;&#30452;&#12377;&#32701;&#30446;&#12395;&#12394;&#12387;&#12383;(--;)&#12290;</p>
      <p>
        <em>&#12381;&#12398;&#19978;</em>&#12289;jsp&#12392;vm&#12398;&#28151;&#22312;&#12364;&#12394;&#12363;&#12394;&#12363;&#12391;&#12365;&#12394;&#12367;&#12390;&#12289;&#30456;&#24403;&#33510;&#21172;&#12375;&#12383;&#12290;&#12420;&#12428;&#12420;&#12428;&#12290;&#12373;&#12390;&#12539;&#12539;&#12539;&#12539;&#12290;</p>
      <p>form&#12364;&#12356;&#12367;&#12388;&#12363;&#12354;&#12387;&#12390;&#12289;&#12381;&#12428;&#12425;&#12391;&#20837;&#21147;&#12375;&#12383;&#12487;&#12540;&#12479;&#12434;DB&#12395;&#30331;&#37682;&#12377;&#12427;&#12424;&#12358;&#12394;&#22580;&#21512;(Wizard)&#12289;&#12356;&#12429;&#12356;&#12429;&#12392;&#38754;&#20498;&#12394;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;</p>
      <p>&#20363;&#12360;&#12400;&#12289;1&#12388;1&#12388;&#12398;&#12450;&#12463;&#12471;&#12519;&#12531;&#12364;&#36949;&#12358;URL&#12395;&#12510;&#12483;&#12500;&#12531;&#12464;&#12373;&#12428;&#12390;&#12356;&#12427;&#12424;&#12358;&#12394;&#22580;&#21512;&#12289;&#36884;&#20013;&#12363;&#12425;&#22987;&#12417;&#12425;&#12428;&#12427;&#12392;&#22256;&#12427;&#12384;&#12392;&#12363;&#12289;&#12501;&#12525;&#12540;&#33258;&#20307;&#12364;&#36884;&#20013;&#12391;&#20998;&#23696;&#12377;&#12427;&#12394;&#12393;&#12398;
        &#35079;&#38609;&#12394;&#12371;&#12392;&#12434;&#12377;&#12427;&#12392;&#12289;&#33394;&#12293;&#32771;&#12360;&#12394;&#12369;&#12428;&#12400;&#12394;&#12425;&#12394;&#12356;&#12371;&#12392;&#12364;&#12383;&#12367;&#12373;&#12435;&#20986;&#12390;&#12365;&#12414;&#12377;&#12290;</p>
      <p>&#12381;&#12371;&#12391;Spring&#12395;&#27161;&#28310;&#12391;&#20184;&#12356;&#12390;&#12356;&#12427;<strong>AbstractWizardFormController</strong>&#12434;&#21033;&#29992;&#12377;&#12427;&#26041;&#27861;&#12418;&#12354;&#12427;&#12364;&#12289;&#12371;&#12398;&#38555;&#12384;&#12363;&#12425;&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;&#12289; <strong>
          <link href="http://www.ervacon.com/products/springwebflow">Spring Web Flow</link>
        </strong>&#12394;&#12427;&#12418;&#12398;&#12434;&#20351;&#12362;&#12358;&#12363;&#12392;&#24605;&#12356;&#12414;&#12377;(&#12383;&#12384;&#12375;&#12289;&#12354;&#12392;&#12391;&#26908;&#32034;&#12375;&#12383;&#38555;&#12398;&#12506;&#12540;&#12472;&#12395;&#12399;&#26412;&#23478;&#12398;springWebFlow&#12418;&#32080;&#27083;&#12356;&#12369;&#12390;&#12356;&#12427;&#12425;&#12375;&#12356;(-.-)&#12290;</p>
      <p>&#12383;&#12384;&#35079;&#38609;&#12394;&#12418;&#12398;&#12434;&#20316;&#12427;&#12398;&#12399;&#20740;&#21163;&#12394;&#12398;&#12391;&#12289;&#27425;&#12398;&#12424;&#12358;&#12394;&#12418;&#12398;&#12434;&#32771;&#12360;&#12414;&#12377;&#12290;</p>
      <figure src="webFlow.jpg" alt="SpringWebFlow&#12398;&#12501;&#12525;&#12540;"/>
      <section>
        <title>&#27010;&#35201;</title>
        <p>&#12369;&#12387;&#12371;&#12358;&#35441;&#12375;&#12364;&#38754;&#20498;&#12394;&#12398;&#12391;&#12289;&#33258;&#20998;&#12398;&#38957;&#12398;&#25972;&#29702;&#12418;&#12363;&#12397;&#12390;&#12289;&#27010;&#35201;&#12434;&#35352;&#12377;&#12290;</p>
        <ol>
          <li>&#20351;&#29992;&#12377;&#12427;&#12463;&#12521;&#12473; <ul>
              <li>
                <p>
                  <code>com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction</code>
                </p>
                <p> &#12501;&#12457;&#12540;&#12512;&#12363;&#12425;&#12398;&#12487;&#12540;&#12479;&#12434;Bind&#12375;validate&#12377;&#12427;&#12463;&#12521;&#12473;&#12290;&#12371;&#12428;&#12399;&#20803;&#12293;&#12377;&#12391;&#12395;&#12354;&#12427;&#12418;&#12398;&#12391;&#12289;webcms-servlet.xml&#12398;merge&#12501;&#12449;&#12452;&#12523;&#12395;&#23450;&#32681;&#12384;&#12369;&#26360;&#12367;&#12290;
                  &#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12434;&#21628;&#12403;&#12384;&#12428;&#12383;&#12392;&#12365;&#12289;&#12414;&#12378;&#21628;&#12403;&#20986;&#12373;&#12428;&#12427;&#12290;</p>
                <p>&#12371;&#12398;&#12463;&#12521;&#12473;&#12399;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12391;&#12289;&#12487;&#12540;&#12479;&#12434;&#20837;&#12428;&#12427;&#12300;&#12467;&#12510;&#12531;&#12489;&#12463;&#12521;&#12473;&#12301;&#12392;validate&#12377;&#12427;&#12300;validator&#12463;&#12521;&#12473;&#12301;&#12434;&#25351;&#23450;&#12377;&#12427;&#12290;</p>
                <source xml:space="preserve"><![CDATA[
        <bean id="bindAndValidateUandPAction"
            class="com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction" singleton="false">
            <property name="commandName"><value>command2</value></property>
        <property name="commandClass"><value>com.chikkun.webcms.test.Test2CommandBean</value></property>
]]><em>&lt;property name="validator"&gt;&lt;ref
                    bean="firstValidator"/&gt;&lt;/property&gt;</em><![CDATA[
        </bean>
                ]]></source>
              </li>
              <li>
                <p>Validator&#12463;&#12521;&#12473;&#12290;</p>
                <p>&#19978;&#35352;&#12398;BindAndValidateCommandAction&#12391;&#12399;&#12289;validator&#12434;&#25351;&#23450;&#12377;&#12427;&#12398;&#12391;&#12289;&#12381;&#12428;&#12434;&#20316;&#25104;&#12290;</p>
              </li>
              <li>
                <p>&#33258;&#20998;&#12391;&#20316;&#25104;&#12377;&#12427;Action&#12463;&#12521;&#12473;&#12290;MVC&#12398;M&#12290;&#12371;&#12428;&#12399;<code>com.ervacon.springframework.web.servlet.mvc.webflow.Action</code>&#12434;implements
                  &#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12427;&#12290;</p>
                <p>
                  <code>public final String execute(final HttpServletRequest request,final
                    HttpServletResponse response, final Map model)</code>&#12434;&#23450;&#32681;&#12375;&#12289;
                    &#24517;&#35201;&#12394;&#20966;&#29702;&#12434;&#12371;&#12398;&#12513;&#12477;&#12483;&#12489;&#12395;&#26360;&#12367;&#12290;&#12414;&#12383;&#25147;&#12426;&#20516;&#12399;<code>return
                  "ok"</code>&#12394;&#12393;&#12398;&#25991;&#23383;&#21015;&#12391;&#12289;&#12371;&#12398;&#25147;&#12426;&#20516;&#12391;&#12289;&#24460;&#12391;&#35500;&#26126;&#12377;&#12427;webflow&#12398;&#23450;&#32681;&#12391;&#12289;&#20966;&#29702;&#12434;&#20998;&#23696;&#12377;&#12427;&#12290;</p>
              </li>
              <li>&#12354;&#12392;&#12399;&#33258;&#20998;&#12398;&#12420;&#12426;&#12383;&#12356;&#12499;&#12472;&#12493;&#12473;&#12525;&#12472;&#12483;&#12463;&#12434;&#35352;&#36848;&#12377;&#12427;Bean&#12290;</li>
            </ul>
          </li>
          <li>&#35373;&#23450;&#12501;&#12449;&#12452;&#12523; <ul>
              <li>webcms-servlet.xml <ul>
                  <li>&#33258;&#20998;&#12391;&#20316;&#25104;&#12377;&#12427;&#12463;&#12521;&#12473;&#12399;Xdoclet&#12398;@spring&#12479;&#12464;&#12434;&#29992;&#12356;&#12390;&#26360;&#12365;&#20986;&#12373;&#12379;&#12427;&#12290;</li>
                  <li>BindAndValidateCommandAction&#12398;&#12424;&#12358;&#12394;&#29992;&#24847;&#12373;&#12428;&#12390;&#12356;&#12427;&#12418;&#12398;&#12434;&#20351;&#12358;&#22580;&#21512;&#12399;<code>src/spring-bean.xml</code>&#12395;&#26360;&#12365;&#12289;merge&#12373;&#12379;&#12427;&#12290;</li>
                </ul>
              </li>
              <li>
                <p>input-flow.xml</p>
                <p>flow&#12398;&#23450;&#32681;&#12434;&#26360;&#12367;&#12290;<strong>&#12371;&#12428;&#12364;&#19968;&#30058;&#37325;&#35201;&#65281;</strong>
                </p>
              </li>
            </ul>
          </li>
        </ol>
         <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>
      <section>
        <title>input-flow.xml</title>
        <p>&#12371;&#12428;&#12364;&#19968;&#30058;&#37325;&#35201;&#12394;&#12392;&#12371;&#12429;&#12391;&#12377;&#12364;&#12289;&#12414;&#12378;&#12399;&#20840;&#37096;&#12434;&#34920;&#31034;&#12375;&#12390;&#12289;&#12381;&#12398;&#24460;&#32048;&#12363;&#12367;&#35500;&#26126;&#12377;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="Windows-31J"?>
<!DOCTYPE web-flow PUBLIC "-//ERVACON//DTD SPRING WEB FLOW//EN"
                           "web-flow.dtd">
<web-flow name="inputFlow">
	<start-state state="userAndPass"/>
	<view-state id="userAndPass" view="inputUandP">
		<transition name="fromUandP" to="bindAndValidateUandP"/>
	</view-state>
	<action-state id="bindAndValidateUandP">
		<action name="bindAndValidateAct1" bean="bindAndValidateUandPAction"/>
		<transition name="bindAndValidateAct1.ok" to="UandPAction"/>
		<transition name="bindAndValidateAct1.error" to="userAndPass"/>
	</action-state>
	<action-state id="UandPAction">
		<action name="firstAction" bean="firstAction"/>
		<transition name="firstAction.ok" to="ageAndSex"/>
	</action-state>
	<view-state id="ageAndSex" view="inputAandS">
		<transition name="fromAandS" to="bindAndValidateAandS"/>
		<transition name="previous" to="userAndPass"/>
	</view-state>
	<action-state id="bindAndValidateAandS">
		<action name="bindAndValidateAct2" bean="bindAndValidateAandSAction"/>
		<transition name="bindAndValidateAct2.ok" to="AandSAction"/>
		<transition name="bindAndValidateAct2.error" to="ageAndSex"/>
	</action-state>
	<action-state id="AandSAction">
		<action name="secondAction" bean="secondAction"/>
		<transition name="secondAction.ok" to="mailAndAddress"/>
	</action-state>
	<view-state id="mailAndAddress" view="inputMandA">
		<transition name="fromMandA" to="bindAndValidateMandA"/>
		<transition name="previous" to="ageAndSex"/>
	</view-state>
	<action-state id="bindAndValidateMandA">
		<action name="bindAndValidateAct3" bean="bindAndValidateMandAAction"/>
		<transition name="bindAndValidateAct3.ok" to="MandAAction"/>
		<transition name="bindAndValidateAct3.error" to="mailAndAddress"/>
	</action-state>
	<action-state id="MandAAction">
		<action name="thirdAction" bean="thirdAction"/>
		<transition name="thirdAction.ok" to="confirm"/>
	</action-state>
	<view-state id="confirm" view="inputConfirm">
		<transition name="pre" to="mailAndAddress"/>
		<transition name="prepre" to="ageAndSex"/>
		<transition name="preprepre" to="userAndPass"/>
		<transition name="save" to="bindAndValidateAll"/>
	</view-state>
	<action-state id="bindAndValidateAll">
		<action name="bindAndValidateAct4" bean="bindAndValidateAllAction"/>
		<transition name="bindAndValidateAct4.ok" to="AllAction"/>
		<transition name="bindAndValidateAct4.error" to="confirm"/>
	</action-state>
	<action-state id="AllAction">
		<action name="lastAction" bean="lastAction"/>
		<transition name="lastAction.ok" to="end"/>
	</action-state>
	<end-state id="end" view="inputComplete"/>
</web-flow>
        ]]></source>
        <p>&#12414;&#12378;&#12399;xml&#12398;&#12523;&#12540;&#12488;&#12399;<code>web-flow</code>&#12391;&#12371;&#12398;&#20013;&#12395;&#23450;&#32681;&#12434;&#26360;&#12356;&#12390;&#12356;&#12367;&#12290;&#23646;&#24615;&#12398;name&#12399;&#21517;&#21069;&#12391;&#12289;&#29305;&#12395;&#20182;&#12392;&#12399;&#38306;&#12431;&#12425;&#12394;&#12356;&#27169;&#27096;(&#20309;&#12391;&#12418;OK)&#12290;</p>
        <p>&#12381;&#12375;&#12390;&#12289;&#27425;&#12395;&#26360;&#12365;&#36796;&#12416;&#12398;&#12399;(&#20693;&#12364;&#30693;&#12387;&#12390;&#12356;&#12427;&#31684;&#22258;&#12391;&#12399;---subflow&#12399;&#12414;&#12384;&#12431;&#12363;&#12425;&#12435;)&#12289;4&#12388;&#12398;state&#12434;&#26360;&#12367;&#12371;&#12392;&#12395;&#12394;&#12427;&#12290;</p>
        <ol>
          <li>view-state</li>
          <li>action-state</li>
          <li>end-state</li>
        </ol>
        <p>&#12398;4&#12388;&#12384;&#12364;&#12289;&#12414;&#12378;&#12399;start-state&#12290;</p>
        <ol>
          <li>start-state <source xml:space="preserve"><![CDATA[
<start-state state=]]><em>"userAndPass"</em><![CDATA[/>
            ]]></source>
            <p>&#23646;&#24615;&#12398;state&#12391;&#25351;&#23450;&#12375;&#12383;&#12418;&#12398;&#12363;&#12425;&#22987;&#12417;&#12427;&#12392;&#12356;&#12358;&#24847;&#21619;&#12290;&#20170;&#22238;&#12399;<em>userAndPass</em>&#12392;&#12356;&#12358;(&#23455;&#38555;&#12395;&#12399;id&#12391;&#25351;&#23450;)&#27425;&#12398;view-state&#12395;&#39131;&#12409;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12395;&#12394;&#12427;&#12290;</p>
          </li>
          <li>view-state 
          <source xml:space="preserve"><![CDATA[
<view-state id=]]><em>"userAndPass"</em><![CDATA[ ]]><em>view="inputUandP"</em><![CDATA[>
   <transition name=]]><em>"fromUandP"</em>&#12288;<![CDATA[to=]]><em>"bindAndValidateUandP"</em><![CDATA[/>
</view-state>
]]></source>
            <p>start-state&#12391;<em>userAndPass</em>&#12364;&#25351;&#23450;&#12375;&#12390;&#12354;&#12427;&#12398;&#12391;&#12289;&#12371;&#12371;&#12398;id&#12364;&#12381;&#12428;&#12394;&#12398;&#12391;&#12289;&#39131;&#12435;&#12391;&#12367;&#12427;&#12290;</p>
            <p>&#12381;&#12375;&#12390;&#12289;&#12502;&#12521;&#12454;&#12470;&#12395;&#35211;&#12379;&#12427;view&#12364;<em>inputUandP</em>&#12391;&#12354;&#12427;&#12371;&#12392;&#12434;&#24847;&#21619;&#12375;&#12390;&#12356;&#12427;&#12290;&#12383;&#12384;&#12371;&#12428;&#12364;&#23455;&#38555;&#12395;&#12399;&#12393;&#12398;&#12501;&#12449;&#12452;&#12523;&#12395;&#12394;&#12427;&#12363;&#12399;&#12289;view
              resolver&#12398;&#35373;&#23450;&#12391;&#27770;&#12414;&#12387;&#12390;&#12367;&#12427;&#12364;&#12289; &#20170;&#22238;&#12391;&#12399;&#12289;&#24460;&#12395;&#31034;&#12377;&#12424;&#12358;&#12395;&#12289;&#12487;&#12501;&#12457;&#12523;&#12488;&#12399;vm&#12384;&#12364;&#12289;&#12381;&#12371;&#12395;&#12394;&#12356;&#22580;&#21512;&#12399;jsp&#12392;&#12394;&#12427;&#12424;&#12358;&#12395;&#12375;&#12390;&#12354;&#12427;(&#12375;&#12383;&#12364;&#12387;&#12390;&#21516;&#21517;&#12398;vm&#12364;&#12354;&#12427;&#12392;&#12414;&#12378;&#12356;)&#12290;</p>
            <p>&#12381;&#12375;&#12390;&#12289;jsp&#12398;&#20013;&#12398;hidden&#12398;&#20197;&#19979;&#12398;&#12424;&#12358;&#12394;&#20516;<em/>_event&#12398;&#20516;&#12364;<em>fromUandP</em>&#12364;&#12354;&#12426;&#12289;submit&#12508;&#12479;&#12531;&#12391;&#23455;&#34892;&#12373;&#12428;&#12383;&#12425;<em>bindAndValidateUandP</em>&#12392;&#12356;&#12358;&#20966;&#29702;&#12408;&#34892;&#12369;&#12289;
              &#12392;&#12356;&#12358;&#12371;&#12392;&#12395;&#12394;&#12427;&#12290;</p>
<source xml:space="preserve"><![CDATA[
<INPUT type="hidden" ]]><em>name="_event" value="fromUandP"</em><![CDATA[>
]]></source>
          </li>
            <li><p>&#12381;&#12375;&#12390;&#12289;&#21069;&#38917;&#12391;&#39131;&#12400;&#12373;&#12428;&#12390;&#12365;&#12383;<code>bindAndValidateUandP</code>&#12384;&#12364;&#12289;&#20808;&#12398;<code>view-state</code>&#12391;Jsp&#12394;&#12426;Velocity&#12394;&#12426;&#12434;&#34920;&#31034;&#12373;&#12379;&#12390;&#12289;
                &#12501;&#12457;&#12540;&#12512;&#12434;&#23455;&#34892;&#12373;&#12379;&#12390;hidden&#12398;_even&#12398;&#20869;&#23481;&#12391;&#27425;&#12398;&#20966;&#29702;&#12395;&#20998;&#23696;&#12373;&#12379;&#12427;&#12418;&#12398;&#12384;&#12364;&#12289;&#20170;&#22238;&#12399;&#12289;&#23455;&#38555;&#12398;&#20966;&#29702;&#12395;&#12399;&#12356;&#12427;&#12290;</p>
                <anchor id="bvca"/><p>&#12383;&#12384;<code>bindAndValidateUandP</code>&#12399;&#12289;&#33258;&#20998;&#12391;&#20316;&#25104;&#12377;&#12427;&#12463;&#12521;&#12473;&#12391;&#12399;&#12394;&#12367;&#12289;
                &#12418;&#12392;&#12418;&#12392;&#29992;&#24847;&#12373;&#12428;&#12390;&#12356;&#12427;&#12463;&#12521;&#12473;&#12391;(<code>com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction</code>)&#12289;&#12381;&#12428;&#12434;Spring&#12398;Bean&#12398;&#23450;&#32681;&#12398;&#12392;&#12371;&#12429;&#12395;
                &#26360;&#12356;&#12390;&#12362;&#12367;&#12431;&#12369;&#12384;&#12364;&#12289;&#12371;&#12398;&#12463;&#12521;&#12473;&#12364;&#12420;&#12427;&#12371;&#12392;&#12399;</p>
                <ul>
                    <li>&#12501;&#12457;&#12540;&#12512;&#12398;&#20516;&#12434;&#12467;&#12510;&#12531;&#12489;(&#12393;&#12358;&#12418;&#12371;&#12398;&#12300;&#12467;&#12510;&#12531;&#12489;&#12301;&#12392;&#12356;&#12358;&#35328;&#33865;&#12395;&#24931;&#12428;&#12394;&#12356;&#12394;&#12290;&#35201;&#12377;&#12427;&#12395;&#12487;&#12540;&#12479;&#12434;&#20837;&#12428;&#12390;&#12362;&#12367;&#12383;&#12384;&#12398;Java Bean)&#12395;Bind&#12377;&#12427;</li>
                    <li>&#12501;&#12457;&#12540;&#12512;&#12398;&#20516;&#12398;&#26908;&#35388;(&#24517;&#38920;&#12391;&#12399;&#12394;&#12356;)</li>
                </ul>
                <p>&#12398;2&#31278;&#39006;&#12391;&#12289;&#19978;&#35352;&#12398;2&#31278;&#39006;&#12398;&#20966;&#29702;&#12391;&#20840;&#12367;&#12456;&#12521;&#12540;&#12364;&#36215;&#12371;&#12425;&#12394;&#12363;&#12387;&#12383;&#12425;ok&#12434;&#12289;&#12456;&#12521;&#12540;&#12364;&#36215;&#12371;&#12387;&#12383;&#12425;error&#12434;&#25991;&#23383;&#21015;&#12391;&#36820;&#12375;&#12390;&#12367;&#12427;&#12290;</p>
                <source xml:space="preserve"><![CDATA[
                    
	<action-state id="bindAndValidateUandP">
		<action name="bindAndValidateAct1" bean="bindAndValidateUandPAction"/>
		<transition name="bindAndValidateAct1.ok" to="UandPAction"/>
		<transition name="bindAndValidateAct1.error" to="userAndPass"/>
	</action-state>                    
                ]]></source>
                <p>&#19978;&#35352;&#12398;&#35373;&#23450;&#12391;&#35328;&#12360;&#12400;&#12289;</p>
                <source xml:space="preserve"><![CDATA[
                    <action name=]]><em>"bindAndValidateAct1"</em><![CDATA[ bean=]]><em class="yellow">"bindAndValidateUandPAction"</em><![CDATA[/>
                ]]></source>
                <p>&#36196;&#12356;&#12392;&#12371;&#12429;&#12364;Action&#12398;Bean&#12398;&#21517;&#21069;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12364;&#12289;&#12371;&#12428;&#12364;&#27425;&#12398;<em>bindAndValidateAct1.ok</em>&#12398;&#12489;&#12483;&#12488;&#12398;&#24038;&#20596;&#12395;&#12394;&#12426;&#12289;&#21491;&#20596;&#12398;<em>ok</em>&#12399;&#21069;&#36848;&#12375;&#12383;&#12424;&#12358;&#12395;&#12289;&#36820;&#12387;&#12390;&#12365;&#12383;&#25991;&#23383;&#21015;&#12395;&#12394;&#12427;&#12290;
                    &#12388;&#12414;&#12426;&#12289;&#12487;&#12540;&#12479;&#12398;Bind&#12418;Validator&#12418;ok&#12384;&#12387;&#12383;&#12425;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12395;&#12394;&#12427;&#12290;</p>
                <p>&#27425;&#12395;&#12289;&#40644;&#33394;&#12356;<em class="yellow">bindAndValidateUandPAction</em>&#26041;&#12384;&#12364;&#12289;&#12371;&#12428;&#12364;&#23455;&#38555;&#12398;Spring&#12395;&#12362;&#12369;&#12427;Bean&#12398;&#23450;&#32681;&#21517;&#12391;&#12289;webcms-servlet.xml&#12395;&#26360;&#12365;&#36796;&#12416;(&#23455;&#38555;&#12395;&#12399;merge&#12501;&#12449;&#12452;&#12523;&#12398;spring-beans.xml)&#12290;
                &#23455;&#38555;&#12395;&#12399;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#23450;&#32681;&#12375;&#12390;&#12354;&#12427;&#12290;</p>
                <p>&#12467;&#12510;&#12531;&#12489;&#12463;&#12521;&#12473;(<link href="ext:command2">&#23455;&#38555;&#12398;&#12477;&#12540;&#12473;</link>)&#12398;&#25351;&#23450;&#12392;&#12289;validator(<link href="ext:firstValidator">&#23455;&#38555;&#12398;&#12477;&#12540;&#12473;</link>)&#12463;&#12521;&#12473;&#12398;&#25351;&#23450;&#12434;&#34892;&#12387;&#12390;&#12356;&#12427;&#12290;</p>
                <source xml:space="preserve"><![CDATA[
                    
        <bean id="bindAndValidateUandPAction"
            class="com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction" singleton="false">
            <property name="commandName"><value>command2</value></property>
        <property name="commandClass"><value>com.chikkun.webcms.test.Test2CommandBean</value></property>
        <property name="validator"><ref bean="firstValidator"/></property>
        </bean>
                    
                ]]></source>
            </li>
            <li><p>Bind&#12392;Validate&#12364;&#12358;&#12414;&#12367;&#12356;&#12387;&#12383;&#12425;&#12289;&#27425;&#12395;&#36914;&#12416;&#12290;&#27425;&#12364;&#23455;&#38555;&#12398;Action&#12395;&#12394;&#12427;&#12290;</p>
                <source xml:space="preserve"><![CDATA[
                    
	<action-state id="UandPAction">
		<action name="firstAction" bean="firstAction"/>
		<transition name="firstAction.ok" to="ageAndSex"/>
	</action-state>                    
                ]]></source>
                <p>&#21069;&#38917;&#21516;&#27096;&#12395;&#12289;</p>
                <source xml:space="preserve"><![CDATA[
                    <action name="]]><em>firstAction"</em><![CDATA[ bean="]]><em class="yellow">firstAction</em><![CDATA["/>
                ]]></source>
                <p>&#36196;&#33394;&#12364;&#12289;Action&#12398;Bean&#12398;&#21517;&#21069;&#12391;&#12289;&#40644;&#33394;&#12364;&#12381;&#12398;Spring&#12398;Bean&#12398;&#23450;&#32681;&#21517;&#12391;&#12354;&#12427;&#12290;&#12381;&#12375;&#12390;&#12289;&#36196;&#12398;Action&#12398;Bean&#21517;&#12418;&#21516;&#27096;&#12395;&#12289;&#12371;&#12398;&#12463;&#12521;&#12473;&#12398;&#12513;&#12477;&#12483;&#12489;(<code>execute)</code>&#12391;
                    &#36820;&#12373;&#12428;&#12427;&#25991;&#23383;&#21015;&#12395;&#12424;&#12387;&#12390;&#20998;&#23696;&#12377;&#12427;&#12424;&#12358;&#12395;&#35373;&#23450;&#12377;&#12427;&#12290;&#20170;&#22238;&#12399;1&#26041;&#21521;&#12395;&#12375;&#12363;&#36914;&#12417;&#12394;&#12356;&#12424;&#12358;&#12395;&#12375;&#12390;&#12354;&#12427;&#12398;&#12391;ok&#12384;&#12369;&#12384;(<em class="yellow">ageAndSex</em>)&#12290;</p>
                <source xml:space="preserve"><![CDATA[
                    <transition name="]]><em>firstAction.ok</em><![CDATA[" to="]]><em class="yellow">ageAndSex"/&gt;</em><![CDATA[
                ]]></source>
                <p>&#12414;&#12383;&#12289;&#12371;&#12398;&#12463;&#12521;&#12473;&#12399;&#33258;&#20998;&#12391;&#20316;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12289;&#26368;&#21021;&#12395;&#36848;&#12409;&#12383;&#12424;&#12358;&#12395;<code>com.ervacon.springframework.web.servlet.mvc.webflow.Action</code>&#12434;implemtns&#12375;&#12383;
                &#12418;&#12398;&#12384;&#12290;&#12381;&#12375;&#12390;&#12289;<link href="ext:firstAction">FirstAction.java.html</link>&#12395;&#12354;&#12427;&#12424;&#12358;&#12395;</p>
                <source xml:space="preserve"><![CDATA[public final String execute(final HttpServletRequest request, final HttpServletResponse response, final Map model)]]></source>
                <p>&#12434;&#23450;&#32681;&#12375;&#12390;&#12289;</p>
                <source xml:space="preserve"><![CDATA[return "ok";]]></source>
                <p>&#12391;&#25991;&#23383;&#21015;&#12434;&#36820;&#12377;&#12364;&#12289;ok&#12391;&#12394;&#12367;&#12390;&#12418;&#12363;&#12414;&#12431;&#12394;&#12356;&#12290;&#12414;&#12383;&#12289;&#26465;&#20214;&#20998;&#23696;&#12391;&#33394;&#12293;&#12394;&#25991;&#23383;&#21015;&#12434;&#36820;&#12375;&#12289;flow&#12398;&#23450;&#32681;&#12391;&#20998;&#23696;&#12377;&#12427;&#12371;&#12392;&#12418;&#21487;&#33021;&#12384;&#12290;</p>
            </li>
        </ol>
        <p>&#12373;&#12390;&#12289;&#19978;&#35352;&#20197;&#22806;&#12395;&#22810;&#23569;&#12467;&#12513;&#12531;&#12488;&#12377;&#12427;&#12392;&#12289;</p>
          <source xml:space="preserve"><![CDATA[

	<view-state id="confirm" view="inputConfirm">
		<transition name="pre" to="mailAndAddress"/>
		<transition name="prepre" to="ageAndSex"/>
		<transition name="preprepre" to="userAndPass"/>
		<transition name="save" to="bindAndValidateAll"/>
		          ]]></source>
&#9;&#9;<p>&#12391;&#12289;&#12501;&#12457;&#12540;&#12512;&#12363;&#12425;pre&#12420;prepre&#12289;preprepre&#12289;save&#12364;&#12356;&#12388;&#12418;&#12398;_event&#12391;&#36820;&#12387;&#12390;&#12365;&#12383;&#22580;&#21512;&#12289;pre&#12399;&#21069;&#12398;mailAndAdress&#12289;prepre&#12384;&#12387;&#12383;&#12425;&#21069;&#12398;&#21069;&#12398;ageAndSex&#12395;&#39131;&#12406;&#12424;&#12358;&#12395;&#12375;&#12390;&#12354;&#12427;&#12290;
&#9;&#9;&#12418;&#12385;&#12429;&#12435;&#12289;&#26412;&#26469;&#12398;&#20966;&#29702;&#12398;save&#12384;&#12387;&#12383;&#12425;&#26368;&#24460;&#12398;&#20966;&#29702;&#12408;&#12392;&#39131;&#12406;&#12431;&#12369;&#12384;&#12290;</p>
&#9;&#9;<p>&#23455;&#38555;&#12398;JSP&#12399;&#27425;&#12398;&#12424;&#12358;&#12290;</p>
          <source xml:space="preserve"><![CDATA[
              
<FORM name="inputForm" action="inputFlow.htm" method="post"><INPUT
    type="hidden" name="_flowId"
    value="<%=request.getAttribute("flowId") %>">

     <INPUT type="hidden" name="_event" value="save">

     <INPUT type="hidden"
    name="_currentState" value="confirm"> <input type="submit"
    name="previous" value="]]>&#30331;&#37682;<![CDATA["> <INPUT type="hidden" name="user"
    value="<c:out value="${user}"/>"> <INPUT type="hidden" name="pass"
    value="<c:out value="${pass}"/>"> <INPUT type="hidden" name="age"
    value="<c:out value="${age}"/>"> <INPUT type="hidden" name="sex"
    value="<c:out value="${sex}"/>"> <INPUT type="hidden" name="mail"
    value="<c:out value="${mail}"/>"> <INPUT type="hidden"
    name="address" value="<c:out value="${address}"/>"></form>
</br>

<FORM name="inputForm" action="inputFlow.htm" method="post"><INPUT
    type="hidden" name="_flowId"
    value="<%=request.getAttribute("flowId") %>">
    
     <INPUT type="hidden" name="_event" value="pre">
         
     <INPUT type="hidden" name="_currentState"
    value="confirm"> <input type="submit" name="pre" value="1]]>&#12388;&#21069;<![CDATA["></form>
<FORM name="inputForm" action="inputFlow.htm" method="post"><INPUT
    type="hidden" name="_flowId"
    value="<%=request.getAttribute("flowId") %>">
    <INPUT type="hidden" name="_event" value="prepre">
    <INPUT type="hidden"
    name="_currentState" value="confirm"> <input type="submit"
    name="prepre" value="2]]>&#12388;&#21069;<![CDATA["></form>
<FORM name="inputForm" action="inputFlow.htm" method="post"><INPUT
    type="hidden" name="_flowId"
    value="<%=request.getAttribute("flowId") %>">
    
    <INPUT type="hidden" name="_event" value="preprepre">
        
    <INPUT type="hidden"
    name="_currentState" value="confirm"> <input type="submit"
    name="preprepre" value="3]]>&#12388;&#21069;<![CDATA["></form>              
          ]]></source>
        <p>&#12373;&#12425;&#12395;&#12418;&#12358;1&#12388;&#12290;</p>
          <source xml:space="preserve"><![CDATA[
              
	<end-state id="end" view="inputComplete"/>
	              
          ]]></source>
          <p>&#12371;&#12428;&#12399;&#26368;&#24460;&#12398;state&#12395;&#12394;&#12427;&#12431;&#12369;&#12384;&#12364;&#12289;&#24517;&#38920;&#12384;&#12392;&#12356;&#12358;&#12431;&#12369;&#12391;&#12394;&#12356;&#12290;&#20170;&#22238;&#12399;&#20351;&#12387;&#12390;&#12356;&#12427;&#12398;&#12391;&#12289;&#12371;&#12371;&#12391;&#12383;&#12406;&#12435;&#12289;_flowId&#12354;&#12383;&#12427;&#12364;&#28040;&#12373;&#12428;&#12390;&#12375;&#12414;&#12358;&#12398;&#12384;&#12392;&#24605;&#12358;&#12290;</p>
          <p>&#12392;&#12356;&#12358;&#12398;&#12418;&#26368;&#24460;&#12395;&#12289;&#12487;&#12540;&#12479;&#12434;DB&#12395;&#30331;&#37682;&#12375;&#12390;&#12289;&#12522;&#12480;&#12452;&#12524;&#12463;&#12488;&#12375;&#12390;JSP&#12434;&#34920;&#31034;&#12373;&#12379;&#12390;&#12356;&#12427;&#12364;&#12289;&#25147;&#12427;&#12508;&#12479;&#12531;&#12391;&#25147;&#12429;&#12358;&#12392;&#12377;&#12427;&#12392;&#12289;&#20363;&#22806;&#12364;&#30330;&#29983;&#12375;&#12390;&#12356;&#12427;&#12290;end-state&#12395;&#12375;&#12394;&#12369;&#12428;&#12400;&#12289;&#22823;&#19976;&#22827;&#12363;&#12418;&#12375;&#12428;&#12394;&#12356;&#65288;&#26410;&#30906;&#35469;&#65289;&#12290;
          &#12383;&#12384;&#12289;&#21453;&#23550;&#12395;&#20108;&#37325;&#30331;&#37682;&#12373;&#12428;&#12394;&#12356;&#12424;&#12358;&#12394;&#26041;&#27861;&#12434;&#35611;&#12376;&#12394;&#12367;&#12390;&#12399;&#12394;&#12425;&#12394;&#12356;&#12384;&#12429;&#12358;&#12290;</p>
           <p><link href="http://www.chikkun.com/computer/java/study/springMVC1.html">&#26368;&#21021;&#12395;&#25147;&#12427;</link></p>
      </section>

        <section>
            <title>webcms-servlet.xml</title>
            <p>&#20309;&#24230;&#12418;&#35328;&#12358;&#12424;&#12358;&#12395;&#12289;&#23455;&#38555;&#12399;webcms-servlet.xml&#12395;&#30452;&#25509;&#12391;&#12399;&#12394;&#12367;&#12289;spring-beans.xml&#12395;&#26360;&#12367;&#20107;&#12395;&#12394;&#12427;&#12290;</p>
            <source xml:space="preserve"><![CDATA[
                
	<bean id="search" name="/inputFlow.htm" class="com.ervacon.springframework.web.servlet.mvc.webflow.WebFlowController">
	    <property name="cacheSeconds"><value>0</value></property>
	    <property name="webFlowName"><value>inputFlow</value></property>
	</bean>
        <bean id="inputFlow" class="com.ervacon.springframework.web.servlet.mvc.webflow.SimpleWebFlow">
            <property name="webFlowResource">
                <value>/WEB-INF/input-flow.xml</value>
            </property>
        </bean>

        <bean id="bindAndValidateUandPAction"
            class="com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction" singleton="false">
            <property name="commandName"><value>command2</value></property>
        <property name="commandClass"><value>com.chikkun.webcms.test.Test2CommandBean</value></property>
        <property name="validator"><ref bean="firstValidator"/></property>
        </bean>

        <bean id="bindAndValidateAandSAction"
            class="com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction" singleton="false">
            <property name="commandName"><value>command2</value></property>
        <property name="commandClass"><value>com.chikkun.webcms.test.Test2CommandBean</value></property>
        <property name="validator"><ref bean="secondValidator"/></property>
        </bean>

        <bean id="bindAndValidateMandAAction"
            class="com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction" singleton="false">
            <property name="commandName"><value>command2</value></property>
        <property name="commandClass"><value>com.chikkun.webcms.test.Test2CommandBean</value></property>
        <property name="validator"><ref bean="thirdValidator"/></property>
        </bean>


        <bean id="bindAndValidateAllAction"
            class="com.ervacon.springframework.web.servlet.mvc.webflow.BindAndValidateCommandAction" singleton="false">
            <property name="commandNam