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>