SSI技术整合
SPRING的整合
A. 下载jar包
首先,从spring官方网站http://www.springsource.org/下载spring的相关jar包,注意spring是一个大型项目,除了必须的spring.jar外,可支持和大部分开源组件进行整合,如下表,可根据项目的实际情况进行引用。
Spring的依赖关系 | ||
依赖关系分组 | JAR文件 | 说 明 |
ant | ant.jar, ant-junit.jar, ant-launcher.jar | Spring采用Apache Ant作为其构建工具,还用来完成大量其它任务如文档生成和测试执行等。运行时Ant根本不起作用,因此发布应用时无需包含该JAR文件。 |
aopalliance | aopalliance.jar | AOP Alliance(http://aopalliance.sourceforge.net/)是个联合的开源协作组织,在多个项目间进行协作以期提供一套标准的AOP Java接口(interface)。 Spring AOP就是基于AOP Alliance标准API实现的。如果你打算使用Spring的AOP或基于AOP的任何特性,只需这个JAR文件。 |
axis | axis.jar, saaj.jar, wsdl4j.jar | Spring采用Apache Axis项目来支持Spring远程调用里的JAXRPC功能。如果使用JAXRPC Remoting,那么只需要这些文件。 |
caucho | burlap- | Spring远程调用(remoting)对大量不同种类的协议包括Caucho的Burlap和Hessian提供了支持。要用哪个协议就包含这个分组里相应的JAR文件。 |
cglib | cglib-full- | CGLIB用来生成动态代理类(dynamic proxy classes),供核心DI和AOP实现之用。由于大量Spring功能的实现都要用到CGLIB,因此你的应用几乎总需包含CGLIB。 |
cos | cos.jar | COS代 表com.oreilly.servlet,是个实用类的集合,对Servlets和基于web的应用很有用。Spring在两个地方要用到COS:文件 上传处理和e-mail发送。不过在这两种情形中,COS都只是实现选择之一,因此只有选用COS而非其它实现方法时,才需包含cos.jar。 |
dom4j | dom4j.jar | 使用Hibernate时dom4j不可或缺,因此如果你的应用打算采用Hibernate实现ORM,就需要包含这个JAR文件。 |
easymock | easymock.jar, easymockclassextension.jar | Spring的测试套件用到了EasyMock,因此只有构建和运行测试套件时才用到这个JAR,无需随你的应用一起发布。 |
freemarker | freemaker.jar | Spring提供了FreeMarker模板引擎的包装类,还为把FreeMarker模板用作web应用的视图提供了支持。只要使用FreeMarker,就需要这个JAR文件。 |
hibernate | ehcache.jar, hibernate2.jar, odmg.jar | 如果采用Spring的Hibernate集成和支持类,这些JAR文件不可或缺。如果使用其它ORM工具如iBATIS,则不需要这些JAR文件。如果使用Hibernate,则你的应用还要包含CGLIB JAR文件。 |
hsqldb | hsqldb.jar | Spring的示例应用使用了hsqldb.jar文件。 |
ibatis | ibatis-common.jar , ibatis-sqlmap.jar, ibatis-sqlmap-2.jar | 使用Spring的iBATIS集成类时,这些文件不可或缺;如果使用JDBC或其它ORM工具如Hibernate或JDO,则你的应用不需要这些文件。 |
itext | itext-1.02b.jar | Spring使用iText提供web层的PDF支持。只有你的web应用需要生成PDF输出时才需包含这个JAR文件。 |
j2ee | activation.jar, connector-api.jar, ejb.jar, jaxrpc.jar, jdbc2_0-stdext.jar, jms.jar, jstl.jar, jta.jar, mail.jar, servlet.jar, xml-apis.jar | 如 左侧所示,J2EE相关的各种不同JAR文件数量相当可观。如果你想要使用Spring邮件支持的JavaMail实现,则需要 activation.jar和mail.jar文件。要让Hibernate使用JCA Connector则需connector-api.jar,使用Spring的EJB支持则需要ejb.jar,jms.jar用于Spring的 JMS支持。对于web应用,如果想要使用Spring JSTL支持则需要servlet.jar和jstl.jar。Spring远程调用里的JAXRPC支持需要jaxrpc.jar文件,jta.jar 用于JTA事务支持。剩下两个JAR文件jdbc2_0-stdext.jar和xml-apis.jar分别用于JDBC和XML配置支持,不过只有你 使用1.3版本的JVM时才需要它们。 |
| jakarta-commons commons-attributes-api.jar, commons-attributes-compiler.jar, commons-beanutils.jar, commons-collections.jar, commons-dbcp.jar, commons-digester.jar, commons-discovery.jar, commons-fileupload.jar, commons-lang.jar, commons-logging.jar, commons-pool.jar, commons- validator.jar | Spring使 用了来自Jakarta Commons项目的大量组件。如果你想在应用中使用源码级元数据(metadata),就需要commons-attributes-api.jar, 此外还需要commons-attributes-compiler.jar,以便将attributes编译到应用里。Struts要用到 BeanUtils、Collections、Digester、Discovery,和Validator JAR文件,其中的Collections,Hibernate也会用到。使用DBCP连接池时,Spring JDBC支持要用到DBCP,Pooling则对有些示例应用不可或缺。如果想使用相应的Spring包装类来处理web应用的文件上传,则需要 FileUpload。最后,Spring处处用到了Logging,因此需在所有基于Spring的应用里包含这个JAR文件。 |
jakarta-taglibs | standard.jar | 这是Jakarta的JSTL实现,一些Spring示例应用使用了这个实现。 |
jboss | jboss-common-jdbc-wrapper.jar | 运行在JBoss应用服务器上的应用使用Spring的JDBC类时,这个JAR文件不可或缺。 |
jdo | jdo.jar | 提供Spring的JDO支持。 |
jdom | jdom.jar | 在Spring里使用iBATIS 1.3时,JDOM不可或缺。本章介绍的iBATIS版本为2.0。 |
jotm | jotm.jar, xapool.jar | 如果你打算配合Spring事务抽象层一起使用JOTM,jotm.jar文件不可或缺。如果打算在自己的应用里将XAPool用于连接池(connection pooling),则只需xapool.jar。 |
junit | junit.jar | 运行时根本不需要JUnit;它只用来构建和运行测试套件。 |
log4j | log4j- | 如果想要使用Spring配置log4j日志记录,这个文件不可或缺。 |
poi | poi-2.5.jar | 这个JAR可令Spring MVC框架支持Microsoft Excel输出。 |
quartz | quartz.jar | Spring基于Quartz的调度支持需要该JAR。 |
regexp | Jakarta-oro- | 使用正则表达式来指定AOP的切入点(pointcut)时需要这个JAR。第六章有更详细的介绍。 |
struts | struts.jar | 欲配合Spring使用Struts构建web应用,Struts JAR必不可少。 |
velocity | velocity-1.4.jar, velocity-tools-generic-1.1.jar | Spring提 供了Velocity的包装类使其支持DI,同时当你在应用中使用Velocity时,还可减少需要编写的代码量。除此之外,Spring还提供了一些 类,支持将Velocity用作web层里的视图提供者(view provider)。只要使用了上述任意特性,都需在发布里包含Velocity JAR文件。 |
xdoclet | xjavadoc-1.0.jar | Commons Attributes用这个JAR解析源代码文件,然后提取属性信息。如果使用了Spring Commons Attributes支持,须包含该JAR文件。 |
B. 配置监听器
Spring正常运行需要在web.xml文件中配置相关监听器,监听器的作用是用来加载所有的spring配置文件,从而将所有的bean都初始化到spring application context中。在如下引用中,可以看到我们采用的是文件名称匹配模式,只要在该路径下符合相关文件命名规范(请参考代码规范设计5.2)的spring配置文件都可以加载。
引用
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/spring/spring-context*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
C. 基础配置
在工程中,程序需要正常运行必须要完成一些基础配置,比如数据源集成、事务集成等等,下面将进行详细介绍。
Ø 首先配置数据源
spring的PropertyPlaceholderConfigurer支持properties文件声明的常量引入,引入成功后,可按照${常量名}方式进行引入。请参考如下:
引用
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="propertyConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/conf/spring/spring-jdbc.properties</value>
</list>
</property>
</bean>
Spring-jdbc.propertes配置请参考
在选择第三方数据库连接池时,经过我们多方长期测试,和DBCP、C3PO进行对比后,发现用proxool连接池和ORACLE默契程度比较高,因此数据库连接池是采用的proxool,因此需要将proxool的ProxoolDataSource配置到spring-context.xml文件中 ,如下:
引用
<bean class="org.logicalcobwebs.proxool.ProxoolDataSource" id="dataSource">
<property name="alias"><!—别名—>
<value>dataSource</value>
</property>
<property name="driver">
<value>${jdbc.driver}</value><!—驱动程序—>
</property>
<property name="driverUrl">
<value>${jdbc.url}</value><!—数据库连接地址—>
</property>
<property name="user">
<value>${jdbc.username}</value><!—数据库连接用户名—>
</property>
<property name="password">
<value>${jdbc.password}</value><!—数据库连接密码—>
</property>
<property name="maximumConnectionCount">
<value>${jdbc.maxPoolSize}</value><!—数据库连接数最大值—>
</property>
<property name="minimumConnectionCount">
<value>${jdbc.minPoolSize}</value><!—数据库连接数最小值—>
</property>
<property name="houseKeepingSleepTime">
<value>${jdbc.maxIdleTime}</value><!—数据库连接最大闲置时间—>
</property>
<property name="prototypeCount">
<value>${jdbc.prototypeCount}</value><!—最小保持的空闲连接数—>
</property>
<property name="trace">
<value>${jdbc.trace}</value><!—是否启用日志跟踪—>
</property>
<property name="verbose">
<value>${jdbc.verbose}</value><!—详细信息设置—>
</property>
<property name="maximumActiveTime">
<value>${jdbc.maximumActiveTime}</value><!—连接最长活跃时间—>
</property>
<property name="houseKeepingTestSql">
<value>${jdbc.houseKeepingTestSql}</value><!—连接测试SQL—>
</property>
<property name="simultaneousBuildThrottle">
<value>${jdbc.simultaneousBuildThrottle}</value><!—一次建立连接数量—>
</property>
<property name="maximumConnectionLifetime">
<value>${jdbc.maximumConnectionLifetime}</value><!—连接最长生存时间->
</property>
<property name="delegateProperties">
<value>${jdbc.delegateProperties}</value>
</property>
</bean>
Ø 其次配置事务
Spring事务包括有本地连接事务和JTA事务,在系统中,采用本地连接事务,如下:
引用
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<!—配置基础事务代理—>
<bean class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true" id="baseTransactionProxy">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<!—事务作用的方法名称,匹配模式,可声明多个—>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
上面是对事务的基础配置,如何来使用事务将在下面揭晓,需要用到的事务的bean需要继承baseTransactionProxy,那么在bean中所有的只要匹配上面声明的方法都可以拥有事务。
引用
<bean id="templateTypeDao" parent="baseTransactionProxy">
<property name="target">
<bean class="eoms.plan.dao.ibatis.TemplateTypeDAOiBatis">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean>
</property>
</bean>
D. 引用配置举例
IBATIS的整合
在开源世界中,持久层框架市场占有率最高的是Hibernate和iBatis,由于iBatis学习成本低,更容易使用,在系统中我们采用iBatis作为持久层框架,并集成到 Spring中,在如下引用中,注册一个sqlMapClient作为其他bean引用的ibatis客户端,因此在注册bean时,只需将sqlMapClient注入到bean中即可。
引用
<bean id="sqlMapClient" class="eoms.common.extension.SqlMapClientFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="sqlMapClientProperties">
<props>
<prop key="jdbcDriver">${jdbc.driver}</prop>
</props>
</property>
<property name="configLocation">
<!—下面这个文件负责引入所有的ibatis xml文件—>
<!—文件命名采用匹配模式—>
<value>/WEB-INF/conf/ibatis/ibatis-sql-map-config*_${jdbc.dbtype}.xml</value>
</property>
</bean>
引用
<bean id="planExecShuckDAO" class="eoms.plan.shuck.dao.ibatis.ExecShuckDAOiBatis">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean>
在系统中,使用的是oracle数据库,因此ibatis的xml映射文件应配置在ibatis-sql-map-config_oracle.xml中,如采用其他数据,替换后面的数据库名称即可,文件中配置格式如下引用。
引用
<sqlMapConfig>
<settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"/>
<sqlMap resource="eoms/sysmodel/log/dao/ibatis/LogMessageDAOiBatis_ora.xml"/> </sqlMapConfig>
STRUTS的整合
我们使用STRUTS1.0作为MVC框架。
Ø 下载jar包
首先到struts官网http://struts.apache.org/1.x/上下载struts1.x相关jar包。
Ø 配置servlet
在web.xml文件中配置struts所必备的serlvet,在这里使用了天元公共包里的ActionServletExtension类,它继承了ActionServlet,负责处理struts的相关事务。首先需配置config参数,config为struts配置文件的路径,在此处采用了匹配模式,只要匹配 /WEB-INF/conf/struts/struts-config*.xml的文件都可以被解析。设置load-on-startup为5表示在web服务启动时,会自动运行ActionServletExtension,执行init方法,初始化参数。Serlvet映射路径配置为*.do,表示所有的struts配置的路径都需要添加后缀do才能进行正常访问,比如logon.do。
引用
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>eoms.common.extension.ActionServletExtension</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/conf/struts/struts-config*.xml
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
Ø 配置struts标签
Struts框架自带很多struts自定义标签, 包括struts-bean,struts-html,struts-logic等等,在jsp中引入自定义标签使得我们的开发变得更加游刃有余。在使用这些标签之前,需要将标签文件路径配置在web.xml中,方便在JSP中直接引入。
引用
<taglib>
<taglib-uri>/WEB-INF/getListData.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/getListData.tld</taglib-location>
</taglib>
Ø 配置struts xml文件
Struts xml文件是struts的核心文件之一,主要定义各种formbean和strutsaction,以及他们之间的关系。
引用
<struts-config>
<form-beans>
<form-bean name="replyForm" type="eoms.workshop.msg.ReplyForm" />
</form-beans>
<global-forwards>
<forward name="logon" path="/logon.do" redirect="false"/>
</ global-forwards>
<action-mappings>
<action name="replyForm" type="eoms.workshop.msg.ReplyAction" path="/reply"
scope="request">
<forward name="reply" path="/workshop/msg/msg_reply.jsp"/>
</action>
</ action-mappings>
</struts-config>