生活随笔
收集整理的這篇文章主要介紹了
SSI框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
框架簡介
MVC對于我們來說,已經不陌生了,它起源于20世紀80年代針對smalltalk語言的一種軟件設計模式,現在已被廣泛應用。近年來,隨著java的盛行,MVC的低耦合性、高重用性、可維護性、軟件工程的可管理性等諸多優點使其在java平臺中很受歡迎,其間,也誕生了許多優秀的MVC框架,如專注于控制層的Struts、WebWork, Struts2, JSF等框架,專注于業務邏輯方面的Spring框架、專注于持久層的Hibernate、iBatis、Castor、JORM等框架。
下面對SSI框架:Strtus2+Spring+iBatis的三個開源的MVC框架進行說明。
Struts2主要來源于webwork框架,與Struts1相比,在數據傳遞方面,Struts2提供了更加強大OGNL標簽功能,使其能夠通過在action中定義變量來直接與jsp頁面中的數據進行相互傳值,省去了Struts1中的formbean;而在跳轉控制方面,Struts2簡化了配置文件的信息量,使頁面和action之間的交換更加的簡潔和直觀,便于開發人員的管理。
Spring功能非常的強大,比如它的控制反轉/依賴注入機制,省去了我們自己書寫工廠模式的工作,實現類對我們將要用到控制類、業務邏輯類、數據訪問類、以及JNDI或者JDBC數據源的托管;Spring對AOP支持使我們在用戶chmod.html’ target=’_blank’>權限控制、事務處理方面節省了很多工作量;
iBatis則是一種輕量級的OR Mapping框架,與Hibernate相比,iBatis提供了半自動化對象關系 映射的實現,開發人員需要編寫具體的sql語句,為系統設計提供了更大的自由空間,為sql語句優化提供了便利。
框架結構
下面這張圖就是我們所用到的這三種框架的結合體,下面對其作以簡單介紹。
2.1控制層
在控制層,利用Strtus2標簽功能,在Action中直接與jsp頁面上的數據進行交互。在調用業務邏輯層應用時,Struts2提供了對Sping的支持。開發人員需要完成對struts.xml的配置工作和對各個Action類的編寫。
例如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>
<!-- 設置瀏覽器是否緩存靜態內容,默認值為true(生產環境下使用),開發階段最好關閉 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 當struts的配置文件修改后,系統是否自動重新加載該文件,默認值為false(生產環境下使用),開發階段最好打開 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 -->
<constant name="struts.devMode" value="true" />
<!-- <constant name="struts.action.extension" value="do" /> --> <!--所有以*.do結尾的請求全部歸struts處理 ,如果沒有顯式指定action識別后綴,默認就是action, 比如toInput.action -->
<constant name="struts.ui.theme" value="simple"></constant> <!-- struts2將自動幫程序員生成網頁,提供了多種生成模版 -->
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.multipart.saveDir" value="/tmp" />
<constant name="struts.objectFactory" value="spring" /> <!-- 告訴struts不再自行創建action實例。而是到Spring里去取action實例 -->
<constant name="struts.objectFactory.spring.autoWire" value="name" /><!-- package是若干個擁有相關功能的action的群組 -->
<package name="demo-default" namespace="/"extends="struts-default,json-default">
</package><include file="user.xml" />
<include file="login.xml" /></struts>
2.2 業務邏輯層
在業務邏輯層,利用Spring框架的依賴注入實現對業務邏輯類和DAO類的實例托管;在事務處理方面,利用Spring提供的面向切面的事務處理功能,使對數據的事務控制脫離于數據訪問接口實現;在對象關系映射方面,利用Spring對數據庫連接池的托管和對iBatis框架的支持。開發人員需要完成對數據源的配置、對不同模塊所對應的application*.xml文件的配置,以及對業務邏輯接口的定義和業務邏輯實現的編寫。
例如: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><!--定義事務管理器 -->
<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><!--開啟事務 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
2.3 持久層
在持久層,利用iBatis提供的半自動化對象關系映射的實現,開發人員需要編寫具體的sql語句,為系統設計提供了更大的自由空間。另外,開發人員需要完成對SqlMapConfig.xml和*SqlMap.xml的配置,以及對DAO接口的定義和DAO接口的實現。
例如: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 小結
在各層之間進行交換的過程中,利用數據傳輸類進行數據的傳遞和交互。其中,數據傳輸類與數據庫表一一對應。
SSI框架能夠降低代碼的耦合度,增強了代碼的健壯性和可重用性,加快了開發速度,但是也有一些不足之處,比如由于三種框架的配置文件較多,也會帶來了一些不便,特別是對于較小的應用來說更是如此。
總結
以上是生活随笔為你收集整理的SSI框架的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。