Valid XHTML 1.0 Transitional集成演练路线图 (P21)

Page: [index.html] (v2017-03-01_19-30)

  1. 项目基础:……
  2. Servlet :……
  3. Spring Web MVC :……
  4. Struts Web MVC :
    1. 基本 Web 应用:
      1. 样例 - “It Works!”:
        1. 环境准备:
          1. 修改 pom.xml ,添加需要的库 (并由 Eclipse 的 Maven 插件自动下载、导入) :
            <project ……>
            	……
            	<dependencies>
            		……
            		<dependency>
            			<!-- [Struts 2]. -->
            			<groupId>org.apache.struts</groupId>
            			<artifactId>struts2-core</artifactId>
            			<version>2.1.8</version>
            		</dependency>
            	</dependencies>
            </project>
            

            说明 / 注意事项:
            • 目前通过 Maven 引入的库有:
              antlr-2.7.6.jar
              aopalliance-1.0.jar
              commons-codec-1.10.0.jar
              commons-codec-1.10.jar
              commons-collections-3.1.jar
              commons-dbcp-1.4.jar
              commons-fileupload-1.2.1.jar
              commons-io-1.3.2.jar
              commons-lang-2.1.jar
              commons-logging-1.1.3.jar
              commons-pool-1.5.4.jar
              dom4j-1.6.1.jar
              freemarker-2.3.15.jar
              hamcrest-core-1.3.jar
              hibernate-commons-annotations-3.2.0.Final.jar
              hibernate-core-3.6.8.Final.jar
              hibernate-jpa-2.0-api-1.0.1.Final.jar
              javassist-3.11.0.GA.jar
              jta-1.1.jar
              junit-4.12.jar
              mybatis-3.2.8.jar
              mybatis-spring-1.2.2.jar
              ognl-2.7.3.jar
              ojdbc5-11.2.0.4.jar
              slf4j-api-1.6.1.jar
              spring-aop-3.2.8.RELEASE.jar
              spring-beans-3.2.8.RELEASE.jar
              spring-context-3.2.8.RELEASE.jar
              spring-core-3.2.8.RELEASE.jar
              spring-expression-3.2.8.RELEASE.jar
              spring-hibernate-1.2.8.jar
              spring-jdbc-3.2.8.RELEASE.jar
              spring-orm-1.2.8.jar
              spring-test-2.5.6.jar
              spring-tx-3.2.8.RELEASE.jar
              spring-web-3.2.8.RELEASE.jar
              spring-webmvc-3.2.8.RELEASE.jar
              struts2-core-2.1.8.jar
              xwork-core-2.1.6.jar
          2. 编写 Struts 分项配置文件 src/main/resources/tfw/integration_demo/_05_struts_web_mvc/struts.xml ,内容暂时留空:
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE struts PUBLIC
            	    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
            	    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
            <struts>
            </struts>
            

          3. 编写片段文件 src/main/webapp/WEB-INF/conf/tfw/integration_demo/05_struts_web_mvc/web_frg.xml ,注册 StrutsPrepareAndExecuteFilter :
            	<filter>
            		<filter-name>struts_web_mvc</filter-name>
            		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
            		<init-param>
            			<param-name>config</param-name>
            			<param-value>struts-default.xml,tfw/integration_demo/_05_struts_web_mvc/struts.xml</param-value>
            		</init-param>
            	</filter>
            
            	<filter-mapping>
            		<filter-name>struts_web_mvc</filter-name>
            		<url-pattern>*.action</url-pattern>
            	</filter-mapping>
            
            

            说明 / 注意事项:
            • <init-param>……</init-param>”:
              自定义的分项配置文件路径,各分项用“,”隔开;
              如果没有此“<init-param>……</init-param>”项,Struts 默认、自动使用 CLASSPATH 下的 struts.xml
              1. struts-default.xml”:
                核心分项配置文件,其他分项配置文件均依赖本文件中的配置项;
                由于自定义分项配置文件路径覆盖了默认路径,所以在此手工添加 struts-default.xml
                struts-default.xml 路径始于 CLASSPATH 。
              2. tfw/integration_demo/_05_struts_web_mvc/struts.xml”:
                本样例的分项配置文件,路径始于 CLASSPATH 。
          4. src/main/webapp/WEB-INF/web.xml 中引入此片段文件;启动服务器,检查配置是否正确:
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE web-app [
            	<!-- Define new entity. -->
            	……
            	<!ENTITY _04_spring_web_mvc SYSTEM "conf/tfw/integration_demo/04_spring_web_mvc/web_frg.xml">
            	<!ENTITY _05_struts_web_mvc SYSTEM "conf/tfw/integration_demo/05_struts_web_mvc/web_frg.xml">
            ]>
            <web-app ……
            		……>
            	……
            	&_04_spring_web_mvc;
            	&_05_struts_web_mvc;
            	<welcome-file-list>
            		……
            	</welcome-file-list>
            </web-app>
            

        2. 样例编写:
          1. 编写“Action”类 tfw.integration_demo._05_struts_web_mvc._01_basic.action._01_ItWorksAction ,输出“It works! ……”,并跳转到名为“worked”的页面:
            ……
            public class _01_ItWorksAction
            {
            
            	……
            	public String work()
            	{
            		System.out.println("It works! @ ["
            				+ ……)
            				+ "]");
            		return "worked";
            	}
            
            }
            

            说明 / 注意事项:
            • work()”: 一个“Action”中可以有一个或多个工作方法,方法名没有特殊限定。
          2. 修改 Struts 分项配置文件
            src/main/resources/tfw/integration_demo/_05_struts_web_mvc/struts.xml ,注册上述“Action”对象;
            访问 URI /tfw/integration_demo/05_struts_web_mvc/01_basic/01_it_works.action ,出现“页面 it_works.jsp 不存在”的错误,即为配置正确:
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE ……>
            <struts>
            	<package name="integration_demo.struts.basic" extends="struts-default"
            			namespace="/tfw/integration_demo/05_struts_web_mvc/01_basic">
            		<action name="01_it_works"
            				class="tfw.integration_demo._05_struts_web_mvc._01_basic.action._01_ItWorksAction"
            				method="work">
            			<result name="worked">01_it_works/it_works.jsp</result>
            		</action>
            	</package>
            </struts>
            

            说明 / 注意事项:
            1. 每个节点、每个属性均为注意事项。
            2. <package ……>……</package>”:
              Struts“包”,目前理解用于为相关的“Action”分组。
              1. name="……"”:
                “包”的唯一名称,作用相当于 ID 。
              2. extends="struts-default"”:
                “包”的特性继承自 struts-default.xml
              3. namespace="/tfw/integration_demo/05_struts_web_mvc/01_basic"”:
                “包”内所有“Action”的公共 URI 前缀路径。
              4. <action ……>……</action>”:
                Struts 的“Action”,目前理解为对应于 Spring 的“Controller”。
                1. name="01_it_works">”:
                  “包”内的“Action”的唯一名称,作用相当于 ID ;
                  和“包”的“namespace”属性、以及配置 StrutsPrepareAndExecuteFilter 时指定的后缀名“.action”共同组成完整的 URI /tfw/integration_demo/05_struts_web_mvc/01_basic/02_ds_config.action
                2. method="work"”:
                  执行“Action”类中的 work() 方法。
                3. <result name="worked">01_it_works/it_works.jsp</result>”:
                  跳转目标的名称和实际路径。
          3. 编写页面 touch src/main/webapp/WEB-INF/pages/tfw/integration_demo/05_struts_web_mvc/01_basic/01_it_works/it_works.jsp ,输出“It works! ……”。
          4. 修改 或/及 新增相关的索引页,添加指向此“Action”的 URI 。
      2. 样例 - 数据源配置文件编辑器:
        • 样例编写:
          1. 沿用“Spring 基本 Web 应用”样例中“控制器”类的逻辑编写编写“Action”类 tfw.integration_demo._05_struts_web_mvc._01_basic.action._02_DataSourceConfigAction
            ……
            public class _02_DataSourceConfigAction
            {
            
            	……
            	public String work() throws IOException
            	{
            		HttpServletRequest request = ServletActionContext.getRequest();
            		// HttpServletResponse response = ServletActionContext.getResponse();
            
            		String strCmd = WebToolE.getParameter(request, "cmd", null);
            		……
            
            		return "datasource";
            	}
            
            }
            

          2. 修改 Struts 分项配置文件
            src/main/resources/tfw/integration_demo/_05_struts_web_mvc/struts.xml ,注册上述“Action”对象;
            访问 URI /tfw/integration_demo/05_struts_web_mvc/01_basic/01_it_works.action ,出现“页面 datasource.jsp 不存在”的错误,即为配置正确:
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE ……>
            <struts>
            	<package name="integration_demo.struts.basic" ……
            			……>
            		<action name="01_it_works"
            				……>
            			……
            		</action>
            
            		<action name="02_ds_config"
            				class="tfw.integration_demo._05_struts_web_mvc._01_basic.action._02_DataSourceConfigAction"
            				method="work">
            			<result name="datasource">/WEB-INF/pages/tfw/integration_demo/05_struts_web_mvc/01_basic/02_ds_config/datasource.jsp</result>
            		</action>
            	</package>
            </struts>
            

          3. 编写页面 src/main/webapp/WEB-INF/pages/tfw/integration_demo/05_struts_web_mvc/01_basic/02_ds_config/datasource.jsp
          4. 修改 或/及 新增相关的索引页,添加指向此“Action”的 URI 。
    2. ……