生活随笔
收集整理的這篇文章主要介紹了
SSI框架
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
框架簡(jiǎn)介
MVC對(duì)于我們來(lái)說(shuō),已經(jīng)不陌生了,它起源于20世紀(jì)80年代針對(duì)smalltalk語(yǔ)言的一種軟件設(shè)計(jì)模式,現(xiàn)在已被廣泛應(yīng)用。近年來(lái),隨著java的盛行,MVC的低耦合性、高重用性、可維護(hù)性、軟件工程的可管理性等諸多優(yōu)點(diǎn)使其在java平臺(tái)中很受歡迎,其間,也誕生了許多優(yōu)秀的MVC框架,如專(zhuān)注于控制層的Struts、WebWork, Struts2, JSF等框架,專(zhuān)注于業(yè)務(wù)邏輯方面的Spring框架、專(zhuān)注于持久層的Hibernate、iBatis、Castor、JORM等框架。
下面對(duì)SSI框架:Strtus2+Spring+iBatis的三個(gè)開(kāi)源的MVC框架進(jìn)行說(shuō)明。
Struts2主要來(lái)源于webwork框架,與Struts1相比,在數(shù)據(jù)傳遞方面,Struts2提供了更加強(qiáng)大OGNL標(biāo)簽功能,使其能夠通過(guò)在action中定義變量來(lái)直接與jsp頁(yè)面中的數(shù)據(jù)進(jìn)行相互傳值,省去了Struts1中的formbean;而在跳轉(zhuǎn)控制方面,Struts2簡(jiǎn)化了配置文件的信息量,使頁(yè)面和action之間的交換更加的簡(jiǎn)潔和直觀,便于開(kāi)發(fā)人員的管理。
Spring功能非常的強(qiáng)大,比如它的控制反轉(zhuǎn)/依賴(lài)注入機(jī)制,省去了我們自己書(shū)寫(xiě)工廠模式的工作,實(shí)現(xiàn)類(lèi)對(duì)我們將要用到控制類(lèi)、業(yè)務(wù)邏輯類(lèi)、數(shù)據(jù)訪問(wèn)類(lèi)、以及JNDI或者JDBC數(shù)據(jù)源的托管;Spring對(duì)AOP支持使我們?cè)谟脩?hù)chmod.html’ target=’_blank’>權(quán)限控制、事務(wù)處理方面節(jié)省了很多工作量;
iBatis則是一種輕量級(jí)的OR Mapping框架,與Hibernate相比,iBatis提供了半自動(dòng)化對(duì)象關(guān)系 映射的實(shí)現(xiàn),開(kāi)發(fā)人員需要編寫(xiě)具體的sql語(yǔ)句,為系統(tǒng)設(shè)計(jì)提供了更大的自由空間,為sql語(yǔ)句優(yōu)化提供了便利。
框架結(jié)構(gòu)
下面這張圖就是我們所用到的這三種框架的結(jié)合體,下面對(duì)其作以簡(jiǎn)單介紹。
2.1控制層
在控制層,利用Strtus2標(biāo)簽功能,在Action中直接與jsp頁(yè)面上的數(shù)據(jù)進(jìn)行交互。在調(diào)用業(yè)務(wù)邏輯層應(yīng)用時(shí),Struts2提供了對(duì)Sping的支持。開(kāi)發(fā)人員需要完成對(duì)struts.xml的配置工作和對(duì)各個(gè)Action類(lèi)的編寫(xiě)。
例如struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"><struts>
<!-- 設(shè)置瀏覽器是否緩存靜態(tài)內(nèi)容,默認(rèn)值為true(生產(chǎn)環(huán)境下使用),開(kāi)發(fā)階段最好關(guān)閉 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 當(dāng)struts的配置文件修改后,系統(tǒng)是否自動(dòng)重新加載該文件,默認(rèn)值為false(生產(chǎn)環(huán)境下使用),開(kāi)發(fā)階段最好打開(kāi) -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 開(kāi)發(fā)模式下使用,這樣可以打印出更詳細(xì)的錯(cuò)誤信息 -->
<constant name="struts.devMode" value="true" />
<!-- <constant name="struts.action.extension" value="do" /> --> <!--所有以*.do結(jié)尾的請(qǐng)求全部歸struts處理 ,如果沒(méi)有顯式指定action識(shí)別后綴,默認(rèn)就是action, 比如toInput.action -->
<constant name="struts.ui.theme" value="simple"></constant> <!-- struts2將自動(dòng)幫程序員生成網(wǎng)頁(yè),提供了多種生成模版 -->
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.multipart.saveDir" value="/tmp" />
<constant name="struts.objectFactory" value="spring" /> <!-- 告訴struts不再自行創(chuàng)建action實(shí)例。而是到Spring里去取action實(shí)例 -->
<constant name="struts.objectFactory.spring.autoWire" value="name" /><!-- package是若干個(gè)擁有相關(guān)功能的action的群組 -->
<package name="demo-default" namespace="/"extends="struts-default,json-default">
</package><include file="user.xml" />
<include file="login.xml" /></struts>
2.2 業(yè)務(wù)邏輯層
在業(yè)務(wù)邏輯層,利用Spring框架的依賴(lài)注入實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯類(lèi)和DAO類(lèi)的實(shí)例托管;在事務(wù)處理方面,利用Spring提供的面向切面的事務(wù)處理功能,使對(duì)數(shù)據(jù)的事務(wù)控制脫離于數(shù)據(jù)訪問(wèn)接口實(shí)現(xiàn);在對(duì)象關(guān)系映射方面,利用Spring對(duì)數(shù)據(jù)庫(kù)連接池的托管和對(duì)iBatis框架的支持。開(kāi)發(fā)人員需要完成對(duì)數(shù)據(jù)源的配置、對(duì)不同模塊所對(duì)應(yīng)的application*.xml文件的配置,以及對(duì)業(yè)務(wù)邏輯接口的定義和業(yè)務(wù)邏輯實(shí)現(xiàn)的編寫(xiě)。
例如:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"><context:annotation-config />
<context:component-scan base-package="com.*" /><context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="autoCommitOnClose" value="true" /><property name="checkoutTimeout" value="${cpool.checkoutTimeout}" /><property name="initialPoolSize" value="${cpool.minPoolSize}" /><property name="minPoolSize" value="${cpool.minPoolSize}" /><property name="maxPoolSize" value="${cpool.maxPoolSize}" /><property name="maxIdleTime" value="${cpool.maxIdleTime}" /><property name="acquireIncrement" value="${cpool.acquireIncrement}" />
</bean><!--定義事務(wù)管理器 -->
<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" />
</bean><!--引入IBATIS -->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation"value="classpath:com/boss/demo/config/SqlMapConfig.xml" /><property name="lobHandler" ref="lobHandler" />
</bean><bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"><property name="sqlMapClient" ref="sqlMapClient" />
</bean><!--開(kāi)啟事務(wù) -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
2.3 持久層
在持久層,利用iBatis提供的半自動(dòng)化對(duì)象關(guān)系映射的實(shí)現(xiàn),開(kāi)發(fā)人員需要編寫(xiě)具體的sql語(yǔ)句,為系統(tǒng)設(shè)計(jì)提供了更大的自由空間。另外,開(kāi)發(fā)人員需要完成對(duì)SqlMapConfig.xml和*SqlMap.xml的配置,以及對(duì)DAO接口的定義和DAO接口的實(shí)現(xiàn)。
例如:SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings cacheModelsEnabled="false" enhancementEnabled="false"lazyLoadingEnabled="false" maxRequests="3000" maxSessions="3000"maxTransactions="3000" useStatementNamespaces="false" />
<sqlMap resource="com/boss/demo/entity/User_Map.xml" />
</sqlMapConfig>
2.4 小結(jié)
在各層之間進(jìn)行交換的過(guò)程中,利用數(shù)據(jù)傳輸類(lèi)進(jìn)行數(shù)據(jù)的傳遞和交互。其中,數(shù)據(jù)傳輸類(lèi)與數(shù)據(jù)庫(kù)表一一對(duì)應(yīng)。
SSI框架能夠降低代碼的耦合度,增強(qiáng)了代碼的健壯性和可重用性,加快了開(kāi)發(fā)速度,但是也有一些不足之處,比如由于三種框架的配置文件較多,也會(huì)帶來(lái)了一些不便,特別是對(duì)于較小的應(yīng)用來(lái)說(shuō)更是如此。
總結(jié)
以上是生活随笔為你收集整理的SSI框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。