一、HCS项目需求
愿景:培训机构为学员提供培训相关的服务。
1.1 功能性需求:

1.2 非功能性需求
用户方面:
体验好。
开发人员方面:
易于白盒测试
客户方面:
客户提供已存在的数据库。
规定时间内上线。
基于B/S 架构。
可以运行于 window 和 Linux 系统。
1.3 架构触及的主要问题及决策:
1. 可以运行于 window 和 Linux 系统。.
采用语言 Java
2. 易于白盒测试
分层开发,分层测试
3. 体验好。
采用 RIA 技术,根据程序员和成本的考虑,采用 AJAX, 排除Flex 、SilverLight、JavaFX.
4. 基于B/S 架构。
采用 Java EE 技术
5. 客户提供已存在的数据库。
在众多的 O/RM 模型加, 根据 Hibermate 和 iBATIS 的特点:
Hibermate : 对领域对象模型和数据库中关系模型都拥有完全的控件权.
iBATIS : 开发一个针对该数据库的新应用程序,iBATIS就非常有用.
采用 iBATIS.
Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目。
Struts是一个基于JAVA EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。
Struts 的MVC实现原理

Spring 是分层的轻量级开源框架,以 Inverse of Control 和 Aspect Oriented Programming 为内核,整合众多第三方框架。
Spring 原理

Core Container
1. Core 提供 Sping 的基本功能。
2. Beans 提供IoC和依赖注入功能
3. Context 扩展了 BeanFactory,添加了对I18N、系统生命周期事件、验证支持。
4. Expression 提供对查询和操作对象时的表达式语言。
Data Access/Integration
1. JDBC 对 JDBC 支持进一层封装。
2. ORM 提供对象关系映射集成的支持。
3. OXM 提供 Object/XML 映射实现
4. JMS 对 Java 信息服务的支持。
5. Transaction 提供对事务管理的支持。
Web
1. Web 提供基本的Web集成功能
2. Web-Servlet 提供Sping的 Model-View-Controller 的实现。
3. Web-Portlet 提供 portlet 的Model-View-Controller 的实现。
AOP and Instrumentation
1. AOP 对面向切面提供了支持。
2. Instrumentation 提供类工具支持和类载入器实现
Test
1. Test 对测试框架的支持,如:JUnit、TestNG.
2.3 iBATIS 框架
IBATIS是一种数据库访问工具,iBATIS将SQL映射成JAVA对象。将 Java Bean 映射成 PreparedStatement 的输入参数和输出ResultSet结果集。

输入部分:
输入参数可以是 JavaBean、Map、XML、原始数据类型(如:Integer,String)
处理部分:
SqlMap.xml SQL映射文件, 把 Java 对象映射成 SQL 语句。
SqlMapConfig.xml iBATIS 配置的核心,通过这个文件的配置提供给框架。
SQL Map 将 Java Bean 映射成 PreparedStatement 的输入参数和输出ResultSet结果集。
JDBC 数据库驱动接口。
输出部分:
输出参数可以是 JavaBean、Map、XML、原始数据类型(如:Integer,String)
3.1 Struts 与 Spring 整合
Struts 与 Spring 整合部分:集成方案有二种:
集成方案一:在 Action 中获取 BeanFactory 对象,然后通过 BeanFactory 获取业务逻辑对象

集成方案二:将业务逻辑对象通过 Spring 注入到 Action 中, 从而避免了在 Action 类中的直接代码查询。

这里我们使用第二种, 为了减少依赖性:
1. Action 代码:
|
public class HelloWorkAction extends Action { private SqlMapClient sqlMapClient; public void setSqlMapClient(SqlMapClient sqlMapClient){ this.sqlMapClient = sqlMapClient; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { List list = sqlMapClient.queryForList("getAllList", "asdfsadf"); PrintWriter writer = response.getWriter(); writer.println(list); return null; } }
|
applicationContext.xml
|
<bean name="/helloWork" class="com.yourcompany.struts.action.HelloWorkAction" scope="prototype"> <property name="sqlMapClient" ref="sqlMapClient"/> </bean>
|
struts-config.xml
|
<action-mappings> <action path="/helloWork" type="org.springframework.web.struts.DelegatingActionProxy"> </action> </action-mappings>
|
Web.xml
|
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:application*.xml</param-value> </context-param>
|
注意:struts-config.xml的 action path="/helloWork" 要和 applicationContext.xml <bean name="/helloWork" 相同
3.2 iBATIS 与 Spring 整合部分:
整合思想:使用 Spring 对 Ibatis 的支持, Spring 作为客户端调用 iBATIS 服务端服务。
Spring 提供的整合类:
1. org.springframework.orm.ibatis.SqlMapClientFactoryBean 用来创建一个com.ibatis.sqlmap.client.SqlMapClient对象。
2. org.springframework.orm.ibatis.SqlMapClientTemplate 用来对com.ibatis.sqlmap.client.SqlMapClient进行一层封装,为提高易用性。
整合配置:
|
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <value>classpath:SqlMapConfig.xml</value> </property> </bean> <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient"> <ref bean="sqlMapClient" /> </property> </bean> |
可以不配置:Spring 的 dataSource, 在初始化 SqlMapClientFactoryBean 时,可以不把 dataSource 设置过去。
Spring 调用 iBATIS 的代码:
|
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); SqlMapClient sqlMapClient = (SqlMapClient) factory.getBean("sqlMapClient"); List list = sqlMapClient.queryForList("getAllList", "asdfsadf"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } SqlMapClientTemplate sqlMapClientTemplate = (SqlMapClientTemplate) factory.getBean("sqlMapClientTemplate"); List list1 = sqlMapClientTemplate.queryForList("getAllList", "asdfsadf"); for (int i = 0; i < list1.size(); i++) { System.out.println(list1.get(i)); } |
3.3 分工协作/测试
根据持久层、业务逻辑层、表现层分工协作,各层负责人必须对该层的接口负责。各层之间通过接口通信。
测试工具采用: JUnit.
4.1 目录结构

4.2 配置信息:
.bmp)














+(65) 6748 8522
最新动态