<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 60, comments - 116, trackbacks - 1, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    6. Spring 配置

    6.1. 視圖配置

    配置 Spring 環(huán)境公共設(shè)置的 applicationContext.xml 文件放在 /WEB-INF/ 目錄下, 首先定義視圖類型為 Jstl ,并約定 JSP 文件的默認(rèn)保存路徑,配置異常捕獲處理 Bean ,當(dāng)系統(tǒng)發(fā)生異常時(shí),自動(dòng)重新定向到 error.jsp 文件顯示異常內(nèi)容。

    <?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:aop="http://www.springframework.org/schema/aop"

    ?????? xmlns:tx="http://www.springframework.org/schema/tx"

    ?????? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

    ?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

    ?????????? http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

    ?

    ??? <!-- 返回的視圖資源的前綴和后綴,基于 Jstl 模板 -->

    ??? <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    ??????? <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

    ?????? ?<property name="prefix" value="/WEB-INF/jsp/"/>

    ??? </bean>

    ?

    ??? <!-- 啟動(dòng)加載異常處理的類,用于監(jiān)聽各模塊中觸發(fā)的異常 -->

    ??? <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

    ??????? <property name="defaultErrorView" value="error.jsp"/>

    ??? </bean>

    </beans>

    6.2. 數(shù)據(jù)庫連接

    applicationContext.xml 文件中加入下面配置,首先加載數(shù)據(jù)庫配置文件 jdbc.properties ,然后配置數(shù)據(jù)源,此處使用的是 TOMCAT 自帶的數(shù)據(jù)庫連接池實(shí)現(xiàn),其實(shí)就是 Apache DBCP 連接池的重新封裝。

    <!-- 加載 properties 配置文件 -->

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    ??? <property name="locations">

    ??????? <list>

    ??????????? <value>/WEB-INF/jdbc.properties</value>

    ??????? </list>

    ??? </property>

    </bean>

    ?

    <!-- 數(shù)據(jù)源 -->

    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">

    ??? <property name="driverClassName" value="${jdbc.driverClassName}"/>

    ??? <property name="url" value="${jdbc.url}"/>

    ??? <property name="username" value="${jdbc.username}"/>

    ??? <property name="password" value="${jdbc.password}"/>

    </bean>

      jdbc.properties 文件在 /WEB-INF/ 目錄下:

    jdbc.driverClassName=oracle.jdbc.OracleDriver

    jdbc.url=jdbc:oracle:thin:@localhost:1521:oradb

    jdbc.username=demo

    jdbc.password=123456

    6.3. 數(shù)據(jù)庫事務(wù)

    applicationContext.xml 文件中加入下面配置,數(shù)據(jù)庫事務(wù)管理,采用的是 AOP 代理,對(duì)所有文件名稱以 Logic 結(jié)尾的接口類進(jìn)行事務(wù)代理。在接口類中,方法名稱以 insert update 等開頭的采用事務(wù)管理,設(shè)置 Propagation REQUIRED 表示支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù);而其他的方法以 * 表示,設(shè)置 Propagation SUPPORTS 表示支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù)就以非事務(wù)方式執(zhí)行, read-Only true 表示對(duì)應(yīng)事務(wù)被最優(yōu)化為只讀事務(wù)。

    <!-- 事務(wù)管理器 -->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    ??? <property name="dataSource" ref="dataSource"/>

    </bean>

    ?

    <!--aop 代理,對(duì)所有以 Logic 為后綴文件名的接口類進(jìn)行代理 -->

    <aop:config>

    ??? <aop:advisor pointcut="execution(* *..*Logic.*(..))" advice-ref="txAdvice"/>

    </aop:config>

    ?

    <!-- 數(shù)據(jù)庫事務(wù)代理,對(duì)類中的指定前綴的方法進(jìn)行事務(wù)控制 -->

    <tx:advice id="txAdvice">

    ??? <tx:attributes>

    ??????? <tx:method name="insert*" propagation="REQUIRED"/>

    ??????? <tx:method name="update*" propagation="REQUIRED"/>

    ??????? <tx:method name="delete*" propagation="REQUIRED"/>

    ??????? <tx:method name="upload*" propagation="REQUIRED"/>

    ??????? <tx:method name="*" propagation="SUPPORTS" read-only="true"/>

    ??? </tx:attributes>

    </tx:advice>


    pointcut 的語法說明如下:

    execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

    ?? 除了返回類型模式、名字模式和參數(shù)模式以外,所有的部分都是可選的;

    ?? 返回類型模式( ret-type-pattern )決定了方法的返回類型必須依次匹配一個(gè)連接點(diǎn),返回類型模式 * 代表了匹配任意的返回類型;

    ?? 名字模式( name-pattern )匹配的是方法名,可以使用 * 通配符作為所有或者部分命名模式;

    ?? 參數(shù)模式( param-pattern )稍微有點(diǎn)復(fù)雜, () 匹配了一個(gè)不接受任何參數(shù)的方法,而 (..) 匹配了一個(gè)接受任意數(shù)量參數(shù)的方法(零或者更多),模式 (*) 匹配了一個(gè)接受一個(gè)任何類型的參數(shù)的方法,模式 (*,String) 匹配了一個(gè)接受兩個(gè)參數(shù)的方法,第一個(gè)可以是任意類型,第二個(gè)則必須是 String 類型。

    ?

    下面給出一些常見切入點(diǎn)表達(dá)式的例子。

    ?? 任意公共方法的執(zhí)行: execution(public * *(..))

    ?? 任何一個(gè)以“ set ”開始的方法的執(zhí)行: execution(* set*(..))

    ?? AccountService 接口的任意方法的執(zhí)行: execution(* com.xyz.service.AccountService.*(..))

    ?? 定義在 service 包里的任意方法的執(zhí)行: execution(* com.xyz.service.*.*(..))

    ?? 定義在 service 包或者子包里的任意方法的執(zhí)行: execution(* com.xyz.service..*.*(..))

    ?

    表達(dá)式 execution(* *..BookManager.save(..)) 的解讀:

    ?? 第一顆 * 代表 ret-type-pattern 返回值可任意;

    ?? *..BookManager 代表任意 Pacakge 里的 BookManager 類,如果寫成 com.xyz.service.* 則代表 com.xyz.service 下的任意類, com.xyz.service..* com.xyz.service 則代表 com.xyz.service 及其子 package 下的任意類;

    ?? save 代表 save 方法,也可以寫 save* 代表 saveBook() 等方法;

    ?? (..) 匹配 0 個(gè)參數(shù)或者多個(gè)參數(shù)的,任意類型, (x,..) 第一個(gè)參數(shù)的類型必須是 X (x,,,s,..) 匹配至少 4 個(gè)參數(shù),第一個(gè)參數(shù)必須是 x 類型,第二個(gè)和第三個(gè)參數(shù)可以任意,第四個(gè)必須是 s 類型。

    6.4. 控制器配置

    控制器的配置文件為servlet-xxx.xml,xxx為URI請(qǐng)求的擴(kuò)展名,此文件可以在web.xml中配置,如果不配置,spring默認(rèn)查找的是xxx-servlet.xml文件,前后調(diào)轉(zhuǎn)一下可方便很多的同類文件排序查看。

      如果配置了多個(gè)處理器映射,并且配置了對(duì)同一請(qǐng)求的處理,那么哪個(gè)處理器映射(BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping)會(huì)被優(yōu)先查找映射關(guān)系呢?最好的方法是配置order屬性,DispatcherServlet 按順序采用映射處理器,數(shù)值小的會(huì)被優(yōu)先匹配。

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    ?????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    ?????? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    ?

    ??? <import resource="applicationContext.xml"/>

    ?

    ???? <bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    ??????? <property name="order" value="0"/>
    ???? </bean>

    ??? <bean name="/mainpage.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
    ??????? <property name="viewName" value="mainpage.jsp"/>
    ??? </bean>

    ??? <!--無攔截請(qǐng)求-->
    ??? <bean id="noInterceptors" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ??? <property name="order" value="2"/>
    ??????? <property name="mappings">
    ??????????? <props>
    ??????????????? <prop key="login.do">doController</prop>
    ??????????? </props>
    ??????? </property>
    ??? </bean>

    ??? <!--有攔截請(qǐng)求-->
    ??? <bean id="hasInterceptors" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ??? <property name="order" value="1"/>
    ??????? <property name="interceptors">
    ??????????? <list>
    ??????????????? <ref bean="authInterceptor"/>
    ??????????? </list>
    ??????? </property>
    ??????? <property name="mappings">
    ??????????? <props>
    ??????????????? <prop key="enter.do">doController</prop>
    ??????????????? <prop key="logout.do">doController</prop>
    ??????????? </props>
    ??????? </property>
    ??? </bean>
    ?

    ??? <!-- 請(qǐng)求與方法映射控制器 -->

    ??? <bean id="doController" class="com.fyyk.core.LogicController">

    ??????? <property name="logicClass" ref="doLogic"/>

    ??????? <property name="uriMethodMapping">

    ??????????? <props>

    ??????????????? <prop key="login">login</prop>

    ??????????????? <prop key="enter">enter</prop>

    ??????????????? <prop key="logout">logout</prop>

    ??????????? </props>

    ??????? </property>

    ??? </bean>

    ?

    </beans>

    6.5. 邏輯類配置

    邏輯類的配置文件為 applicationContext-xxx.xml ,此文件可以在 web.xml 中配置,如 applicationContext-admin.xml 文件,也可以配置合并在 applicationContext.xml 中:

    ??? <bean id="authInterceptor" class="com.fyyk.interceptor.AuthInterceptor">

    ??????? <property name="noLoginRedirect" value="/WEB-INF/jsp/noLogin.jsp"/>

    ??? </bean>

    ?

    ??? <bean id="doLogic" class="com.fyyk.logic.DoLogicImpl">

    ??????? <property name="dataSource" ref="dataSource"/>

    ??? </bean>


    評(píng)論

    # re: 單獨(dú)使用Spring建立簡(jiǎn)易開發(fā)框架(五) [未登錄]  回復(fù)  更多評(píng)論   

    2007-09-12 13:53 by Jerry
    Oracle 還能換成MySQL啊?

    # re: 單獨(dú)使用Spring建立簡(jiǎn)易開發(fā)框架(五)   回復(fù)  更多評(píng)論   

    2007-09-12 14:40 by James.Q
    框架本身是沒有問題的,對(duì)各種數(shù)據(jù)庫支持都可以,只是在寫業(yè)務(wù)SQL的時(shí)候需要主意,沒法兼容,另外翻頁的時(shí)候也是有針對(duì)性的。

    # re: 單獨(dú)使用Spring建立簡(jiǎn)易開發(fā)框架(五) [未登錄]  回復(fù)  更多評(píng)論   

    2009-09-01 17:27 by 小馬
    你總在牛A與牛C之間徘徊,~\(≧▽≦)/~

    主站蜘蛛池模板: 成人亚洲综合天堂| 国产91免费在线观看| 日本精品久久久久久久久免费| 亚洲人成色77777在线观看| 亚洲五月丁香综合视频| 国产精品亚洲自在线播放页码| 亚洲av永久综合在线观看尤物| 亚洲国产成a人v在线| 亚洲另类图片另类电影| youjizz亚洲| 亚洲自偷自偷在线成人网站传媒 | 国产又长又粗又爽免费视频| 精品久久久久久久免费人妻| 国产精品免费看久久久无码| 四虎永久在线免费观看| 亚洲精品一级无码鲁丝片 | 国产免费女女脚奴视频网| 一个人看的www在线观看免费| 色窝窝免费一区二区三区| 日韩一级免费视频| 亚洲Aⅴ无码一区二区二三区软件| 亚洲国产精品尤物yw在线| 亚洲色偷拍另类无码专区| 亚洲伊人久久大香线蕉苏妲己| 亚洲成a人片在线网站| 亚洲日本天堂在线| 香蕉国产在线观看免费| 中文字幕乱码一区二区免费| 亚洲精品在线免费看| 啦啦啦www免费视频| 亚洲精品无码激情AV| 亚洲一区中文字幕久久| 一区二区亚洲精品精华液| 免费无码AV一区二区| 久久精品视频免费播放| 在人线av无码免费高潮喷水| 亚洲国产成人久久精品99| 亚洲AV无码不卡在线播放| 亚洲国产成a人v在线观看| 又硬又粗又长又爽免费看 | 最近免费2019中文字幕大全|