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

Page: [index.html] (v2017-03-05_13-20)

  1. 项目基础:……
  2. Servlet :……
  3. Spring Web MVC :……
  4. Struts Web MVC :

    1. 基本 Web 应用:……
    2. 集成 Spring :
      由 Spring 生成 Struts 的“Action”。
      1. 样例 - 用户管理:
        1. 环境准备:
          1. 修改 pom.xml ,添加需要的库 (并由 Eclipse 的 Maven 插件自动下载、导入) :
            <project ……>
            	……
            	<dependencies>
            		……
            		<dependency>
            			<!-- [Struts 2] and [Spring] integration. -->
            			<groupId>org.apache.struts</groupId>
            			<artifactId>struts2-spring-plugin</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
              struts2-spring-plugin-2.1.8.jar
              xwork-core-2.1.6.jar
          2. 修改片段文件 src/main/webapp/WEB-INF/conf/tfw/integration_demo/05_struts_web_mvc/web_frg.xml ,注册 Spring 的 ContextLoaderListener 及相关的初始化参数:
            	……
            
            	<filter-mapping>
            		……
            	</filter-mapping>
            
            	<!-- [########################################] -->
            
            	<context-param>
            		<param-name>contextConfigLocation</param-name>
            		<param-value>classpath:tfw/integration_demo/_04_spring_web_mvc/applicationContext.xml</param-value>
            	</context-param>
            
            	<listener>
            		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            	</listener>
            

            说明 / 注意事项:
            • Struts Web 应用不会访问 Spring 的 DispatcherServlet ,需要用 ContextLoaderListener 加载 Spring 框架
          3. 修改 Struts 分项配置文件 src/main/resources/tfw/integration_demo/_05_struts_web_mvc/struts.xml ,启用 Spring 集成:
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE ……>
            <struts>
            	<package name="integration_demo.struts.basic" ……
            			……>
            		……
            	</package>
            
            	<!-- [########################################] -->
            
            	<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring"
            			class="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
            	<constant name="struts.objectFactory" value="spring"/>
            </struts>
            

        2. 样例编写:
          1. DAO 层、业务层:
            直接调用先前“用户管理”样例中的任意一组。
          2. 表示层:
            1. 沿用“Spring JDBC Template CRUD”样例中“控制器”类的逻辑编写“Action”类 tfw.integration_demo._05_struts_web_mvc._02_spring_crud.action._01_UserMgrAction
              ……
              public class _01_UserMgrAction
              {
              
              	private _01_UserMgrService userMgrSvc;
              
              	……
              	public void setUserMgrSvc(_01_UserMgrService userMgrSvc)
              	{
              		this.userMgrSvc = userMgrSvc;
              	}
              
              	private String strTitle;
              
              	……
              	public void setPageTitle(String strTitle)
              	{
              		this.strTitle = strTitle;
              	}
              
              	……
              	public String work() throws SQLException
              	{
              		HttpServletRequest request = ServletActionContext.getRequest();
              		// HttpServletResponse response = ServletActionContext.getResponse();
              
              		String strCmd = WebToolE.getParameter(request, "cmd", null);
              		String strTarget = "result";
              		if ("do_add".equals(strCmd))
              		{
              			……
              		}
              		else if ("show_detail".equals(strCmd))
              		{
              			……
              
              			strTarget = "detail";
              		}
              		else if ("do_edit".equals(strCmd))
              		{
              			……
              		}
              		else if ("discard".equals(strCmd))
              		{
              			……
              		}
              		else if ("to_login".equals(strCmd))
              		{
              			strTarget = "login";
              		}
              		else if ("do_login".equals(strCmd))
              		{
              			……
              		}
              		else
              		{
              			……
              
              			strTarget = "list";
              		}
              
              		request.setAttribute("page_title", strTitle);
              		return strTarget;
              	}
              
              }
              
            2. 编写 ApplicationContext 分项配置文件 src/main/resources/tfw/integration_demo/_04_spring_web_mvc/sub_files/06_spring_4_struts.xml ,向 Spring 注册上述“Action”对象,并向其注入任意一个在先前样例中已注册的业务层对象
              <?xml version="1.0" encoding="UTF-8"?>
              <beans ……>
              	<bean id="struts.spring_crud.userMgrAction"
              			class="tfw.integration_demo._05_struts_web_mvc._02_spring_crud.action._01_UserMgrAction">
              		<property name="userMgrSvc" ref="crud.hibernate.advanced.userMgrSvc"/>
              		<property name="pageTitle"
              				value="Integration&amp;nbsp;Demo / 05&amp;nbsp;Struts&amp;nbsp;Web&amp;nbsp;MVC / 02&amp;nbsp;Spring&amp;nbsp;integrated&amp;nbsp;Create,&amp;nbsp;Read,&amp;nbsp;Update&amp;nbsp;&amp;&amp;nbsp;Discard / 01&amp;nbsp;User&amp;nbsp;Management - "/>
              	</bean>
              </beans>
              

            3. 修改 ApplicationContext 主配置文件 src/main/resources/tfw/integration_demo/_04_spring_web_mvc/applicationContext.xml ,添加上述分项:
              <?xml version="1.0" encoding="UTF-8"?>
              <beans ……>
              	……
              	<import resource="sub_files/05_hibernate_crud.xml"/>
              	<import resource="sub_files/06_spring_4_struts.xml"/>
              </beans>
              

            4. 修改 Struts 分项配置文件 src/main/resources/tfw/integration_demo/_05_struts_web_mvc/struts.xml ,向 Struts 注册上述“Action”对象:
              <?xml version="1.0" encoding="UTF-8" ?>
              <!DOCTYPE ……>
              <struts>
              	……
              
              	<!-- [########################################] -->
              
              	<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring"
              			class="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
              	<constant name="struts.objectFactory" value="spring"/>
              
              	<package name="integration_demo.struts.spring_crud" extends="struts-default"
              			namespace="/tfw/integration_demo/05_struts_web_mvc/02_spring_crud">
              		<action name="01_user_mgr" class="struts.spring_crud.userMgrAction"
              				method="work">
              			<result name="result">/WEB-INF/pages/tfw/integration_demo/04_spring_web_mvc/02_crud/01_basic_jdbc_crud/01_user_mgr/result.jsp</result>
              			<result name="detail">/WEB-INF/pages/tfw/integration_demo/04_spring_web_mvc/02_crud/01_basic_jdbc_crud/01_user_mgr/detail.jsp</result>
              			<result name="login">/WEB-INF/pages/tfw/integration_demo/05_struts_web_mvc/02_spring_crud/01_user_mgr/login.html</result>
              			<result name="list">/WEB-INF/pages/tfw/integration_demo/04_spring_web_mvc/02_crud/01_basic_jdbc_crud/01_user_mgr/list.jsp</result>
              		</action>
              	</package>
              </struts>
              

              说明 / 注意事项:
              • class="struts.spring_crud.userMgrAction"”:
                启用 Spring 集成支持后,“class”属性的值首先被 Struts 用作 ID 从 Spring ApplicationContext 提取对象;
                如果 Spring ApplicationContext 中没有相应的对象,Struts 才将此值用作类名。
            5. 修改 或/及 新增相关的索引页,添加指向此控制器的 URI ,确认控制器配置正确。
            6. 编写本样例的专用页面 src/main/webapp/WEB-INF/pages/tfw/integration_demo/05_struts_web_mvc/02_spring_crud/01_user_mgr/login.html
            7. 测试本样例的“登录”和增删改查功能。
      2. 样例 - 物件管理:
        1. 样例编写:
          1. DAO 层、业务层:
            直接调用先前“物件管理”样例中的任意一组。
          2. 表示层:
            1. 沿用“物件管理”样例中“控制器”类的逻辑编写“Action”类 tfw.integration_demo._05_struts_web_mvc._02_spring_crud.action._02_ItemMgrAction ,用注解标明其在 Spring ApplicationContext 中的 ID所需的依赖
              ……
              @Component("struts.spring_crud.itemMgrAction")
              public class _02_ItemMgrAction
              {
              
              	@Resource(name = "crud.mybatis.auto_dao.itemMgrSvc")
              	private _02_ItemMgrService itemMgrSvc;
              
              	……
              
              	@Resource(name = "struts.spring_crud.itemMgrAction.pageTitle")
              	private String strTitle;
              
              	……
              	public String work() throws SQLException
              	{
              		HttpServletRequest request = ServletActionContext.getRequest();
              		// HttpServletResponse response = ServletActionContext.getResponse();
              
              		……
              		return strTarget;
              	}
              
              }
              

            2. 修改 ApplicationContext 分项配置文件 src/main/resources/tfw/integration_demo/_04_spring_web_mvc/sub_files/06_spring_4_struts.xml ,新增扫描范围,并向 Spring 注册上述“Action”对象所需的页面标题
              <?xml version="1.0" encoding="UTF-8"?>
              <beans ……>
              	<bean id="struts.spring_crud.userMgrAction"
              			……>
              		……
              	</bean>
              
              	<!-- [########################################] -->
              
              	<context:component-scan
              			base-package="tfw.integration_demo._05_struts_web_mvc._02_spring_crud"/>
              
              	<bean id="struts.spring_crud.itemMgrAction.pageTitle"
              			class="java.lang.String">
              		<constructor-arg
              				value="Integration&amp;nbsp;Demo / 05&amp;nbsp;Struts&amp;nbsp;Web&amp;nbsp;MVC / 02&amp;nbsp;Spring&amp;nbsp;integrated&amp;nbsp;Create,&amp;nbsp;Read,&amp;nbsp;Update&amp;nbsp;&amp;&amp;nbsp;Discard / 02&amp;nbsp;Item&amp;nbsp;Management - "/>
              	</bean>
              </beans>
              

            3. 修改 Struts 分项配置文件 src/main/resources/tfw/integration_demo/_05_struts_web_mvc/struts.xml ,向 Struts 注册上述“Action”对象:
              <?xml version="1.0" encoding="UTF-8" ?>
              <!DOCTYPE ……>
              <struts>
              	……
              	<constant name="struts.objectFactory" value="spring"/>
              
              	<package name="integration_demo.struts.spring_crud" ……
              			……>
              		<action name="01_user_mgr" ……
              				……>
              			……
              		</action>
              
              		<action name="02_item_mgr" class="struts.spring_crud.itemMgrAction"
              				method="work">
              			<result name="result">/WEB-INF/pages/tfw/integration_demo/04_spring_web_mvc/02_crud/01_basic_jdbc_crud/02_item_mgr/result.jsp</result>
              			<result name="detail">/WEB-INF/pages/tfw/integration_demo/04_spring_web_mvc/02_crud/01_basic_jdbc_crud/02_item_mgr/detail.jsp</result>
              			<result name="list">/WEB-INF/pages/tfw/integration_demo/04_spring_web_mvc/02_crud/01_basic_jdbc_crud/02_item_mgr/list.jsp</result>
              		</action>
              	</package>
              </struts>
              

            4. 修改 或/及 新增相关的索引页,添加指向此控制器的 URI ,确认控制器配置正确。
            5. 测试本样例的增删改查功能。
  5. ……