2025-02-10

 一 整個項目的框架,文件夾分佈
 
 

二 一些重要的配置文件
 
2.1 struts.xml
 
此配置文件主要申明瞭
 <!– 使用spring的工廠去替換struts2的默認工廠,也就是Action由spring來創建和維護 –>
 <constant name="struts.objectFactory" value="spring" />
然後引入一些
<include file="cn/citic/trade/login/loginStruts.xml"></include>
具體的struts配置還是利用上面的引入,分佈到具體的模塊去些,這裡隻是一個集合,方便管理。
 
Xml代碼 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
 "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <include file="struts-default.xml" /> 
    <!– 指定Web應用的默認編碼集,相當於調用HttpServletRequest的setCharacterEncoding方法 –> 
    <constant name="struts.i18n.encoding" value="UTF-8" /> 
    <constant name="struts.action.extension" value="action" /> 
    <!– 設置瀏覽器是否緩存靜態內容,默認值為true(生產環境下使用),開發階段最好關閉 –> 
    <constant name="struts.serve.static.browserCache" value="false" /> 
    <!– 當struts的配置文件修改後,系統是否自動重新加載該文件,默認值為false(生產環境下使用),開發階段最好打開 –> 
    <constant name="struts.configuration.xml.reload" value="true" /> 
    <!– 開發模式下使用,這樣可以打印出更詳細的錯誤信息 –> 
    <constant name="struts.devMode" value="false" /> 
    <!– 默認的視圖主題 –> 
    <constant name="struts.ui.theme" value="simple" /> 
    <!– 文件上傳時的臨時目錄 –> 
    <constant name="struts.multipart.saveDir" value="D:/temp" /> 
    <constant name="struts.multipart.maxSize" value="204800000" /> 
    <!– 使用spring的工廠去替換struts2的默認工廠,也就是Action由spring來創建和維護 –> 
    <constant name="struts.objectFactory" value="spring" /> 
 
    <package name="main" namespace="/" extends="json-default"> 
        <interceptors> 
            <interceptor name="sessionTimeOut" class="cn.citic.trade.interceptor.SessionInterceptor" /> 
            <interceptor name="trimInterceptor" class="cn.citic.trade.interceptor.TrimInterceptor" /> 
            <!– Session權限攔截器棧 –> 
            <interceptor-stack name="sessionTimeOutStack"> 
                <!– 去參數前後空格 –> 
                <interceptor-ref name="trimInterceptor" /> 
                <!– 使用系統默認的攔截器 –> 
                <interceptor-ref name="defaultStack" /> 
                <!– 使用自定義的攔截器 –> 
                <interceptor-ref name="sessionTimeOut" /> 
            </interceptor-stack> 
        </interceptors> 
 
    </package> 
 
    <!– 引用功能模塊對應的Strusw配置文件 –> 
    <include file="cn/citic/trade/login/loginStruts.xml"></include> 
    <include file="cn/citic/trade/merchant/merchantStruts.xml"></include> 
    <include file="cn/citic/trade/user/userStruts.xml"></include> 
    <include file="cn/citic/trade/trade/tradeStruts.xml"></include> 
    <include file="cn/citic/trade/report/reportStruts.xml"></include> 
    <include file="cn/citic/trade/permission/permissionStruts.xml"></include> 
    <include file="cn/citic/trade/credit/creditStruts.xml"></include> 
    <!– 二期需求 –> 
    <include file="cn/citic/trade/aerra/aerraStruts.xml"></include> 
    <include file="cn/citic/trade/tradetype/tradeTypeStruts.xml"></include> 
</struts> 
 
 
 2.2 某個模塊的struts配置文件,xxxStruts.xml
 
在這個配置文件,主要申明瞭某個模塊用哪個Action類來控制和這個控制類處理之後的頁面跳轉結果頁面。由於是利用Spring來管理struts,配置文件裡寫的處理類名字,其實是在Spring的bean配置文件裡面申明好的一個id名字
 
Xml代碼 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <package name="aerra" namespace="/" extends="main"> 
 
        <!– xxxx交易流水功能管理 –> 
        <action name="aerra_*" class="aerraTradeAction" 
            method="{1}"> 
            <!– 登錄超時和Session權限的攔截器棧 –> 
            <interceptor-ref name="sessionTimeOutStack" /> 
            <result name="timeout">/timeout.jsp</result> 
 
            <result name="uploadSuccess">/WEB-INF/aerra/aerra_upload_messages.jsp</result> 
            <result name="uploadError">/WEB-INF/aerra/aerra_upload_messages.jsp</result> 
 
            <result name="list">/WEB-INF/report/bank_fee_income_list.jsp</result> 
            <result name="addUI">/WEB-INF/report/bank_fee_income_add.jsp</result> 
            <result name="editUI">/WEB-INF/report/bank_fee_income_edit.jsp</result> 
            <result name="success">/WEB-INF/report/ajaxDone.jsp</result> 
            <result name="error">/WEB-INF/report/ajaxDone.jsp</result> 
        </action> 
 
    </package> 
</struts> 
 
 其中的<package name="aerra" namespace="/" extends="main">裡面的name="aerra"是模塊名, namespace="/"反映在url上就是模塊名之前的路徑 觸發的時候是url/aerra 這樣
而<action name="aerra_*" class="aerraTradeAction" method="{1}">的 name="aerra_*" 是指隻要請求的地址裡模塊是以aerra_開頭的,就進入class="aerraTradeAction"這個類來處理,而這個 erraTradeAction 是由spring管理的,在spring的bean配置文件面進行申明。
 
2.3 applicationContext.xml
 
這個配置文件配置瞭c3p0連接池,註入hibernate的mapping映射文件,註入瞭各個模塊對應的SpringBean配置文件(裡面申明瞭Aciton類和操作數據庫接口實現類),還有申明瞭會話工廠sessionFactory,在接口實現類裡面直接用sessionFactory就可以操作數據庫相關,比如實例化連接池然後操作數據庫之類。
 
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:context="http://www.springframework.org/schema/context" 
    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.5.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-2.5.xsd 
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 
 
    <context:annotation-config /> 
 
    <!– C3p0數據源 ,做成瞭單例模式 –> 
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
        destroy-method="close"> 
        <property name="driverClass" value="net.sourceforge.jtds.jdbc.Driver" /> 
 
        <property name="jdbcUrl" value="jdbc:jtds:sqlserver://localhost:1433/citic" /> 
 
        <property name="user" value="sa" /> 
        <property name="password" value="xxxxxx" /> 
        <!– 每60秒檢查所有連接池中的空閑連接。Default:0 –> 
        <property name="idleConnectionTestPeriod" value="60" /> 
        <!– 初始化時獲取的鏈接數,取值應在minPoolSize與maxPoolSize之間。Default:3 –> 
        <property name="initialPoolSize" value="2" /> 
        <!– 連接池中保留的最小連接數 –> 
        <property name="minPoolSize" value="1" /> 
        <!– 連接池中保留的最大連接數。Default:15 –> 
        <property name="maxPoolSize" value="20" /> 
        <!– 最大空閑時間,120秒內未使用則連接被丟棄。右為0則永不丟棄。Default:0 –> 
        <property name="maxIdleTime" value="120" /> 
        <!– 當連接池中的連接耗盡時,c3p0一次同時獲取的連接數。Default:3 –> 
        <property name="acquireIncrement" value="5" /> 
    </bean> 
 
    <!– 會話工廠 –> 
    <bean id="sessionFactory" 
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
        <!– 註入數據源 –> 
        <property name="dataSource" ref="dataSource" /> 
        <!– 指定 Hibernate 的映射文件 –> 
        <property name="mappingResources"> 
            <list> 
                <!– 交易類型表:二期需求 –> 
                <value>cn/citic/trade/tradetype/bean/TradeType.hbm.xml</value> 
                <!– 用戶信息表 –> 
                <value>cn/citic/trade/user/bean/UserInfo.hbm.xml</value> 
                <value>cn/citic/trade/merchant/bean/BigMerchantInfo.hbm.xml</value> 
                <value>cn/citic/trade/merchant/bean/SmallMerchantInfo.hbm.xml</value> 
                <value>cn/citic/trade/trade/bean/MerchantTradeInfoTemp.hbm.xml</value> 
                <value>cn/citic/trade/trade/bean/SecondCountInfo.hbm.xml</value> 
                <value>cn/citic/trade/credit/bean/CreditSummonsInfo.hbm.xml</value> 
                <value>cn/citic/trade/merchant/bean/MccMainbiz.hbm.xml</value> 
                <value>cn/citic/trade/trade/bean/MerchantSummaryByMonths.hbm.xml</value> 
                <!– 權限模塊 –> 
                <value>cn/citic/trade/permission/bean/PermissionOperate.hbm.xml</value> 
                <value>cn/citic/trade/permission/bean/PermissionRole.hbm.xml</value> 
                <value>cn/citic/trade/permission/bean/PermissionGroup.hbm.xml</value> 
                <value>cn/citic/trade/permission/bean/PermiessionGroupRole.hbm.xml</value> 
                <value>cn/citic/trade/permission/bean/PermissionRoleOperate.hbm.xml</value> 
                <value>cn/citic/trade/report/bean/BankIncomeAccount.hbm.xml</value> 
                <value>cn/citic/trade/report/bean/BankFeeIncome.hbm.xml</value> 
                <value>cn/citic/trade/aerra/bean/AerraTradeInfo.hbm.xml</value> 
            </list> 
        </property> 
        <!– 設置Hibernate屬性 –> 
        <property name="hibernateProperties"> 
            <value> 
                hibernate.dialect=org.hibernate.dialect.SQLServerDialect 
                hibernate.hbm2ddl.auto=update 
                hibernate.show_sql=false 
                hibernate.format_sql=false 
            </value> 
        </property> 
    </bean> 
 
    <!– 配置關於Hibernate的事務管理器,以使用Spring提供的事務管理功能 –> 
    <bean id="txManager" 
        class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
        <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
 
    <!– 使用基於註解方式來配置事務 –> 
    <tx:annotation-driven transaction-manager="txManager" /> 
 
    <!– 用於註入分頁用到的PageDaoImpl實例–> 
    <bean id="pageDao" class="cn.citic.trade.utils.page.PageDaoImpl"> 
        <property name="sessionFactory" ref="sessionFactory"></property> 
    </bean> 
 
    <!– 導入各部份功能對應的applicationContext文件 –> 
    <import resource="cn/citic/trade/login/loginBeans.xml" /> 
    <import resource="cn/citic/trade/merchant/merchantBeans.xml" /> 
    <import resource="cn/citic/trade/user/userBeans.xml" /> 
    <import resource="cn/citic/trade/trade/tradeBeans.xml" /> 
    <import resource="cn/citic/trade/report/reportBeans.xml" /> 
    <import resource="cn/citic/trade/permission/permissionBeans.xml" /> 
    <import resource="cn/citic/trade/credit/creditBeans.xml" /> 
    <!– 二期需求:交易類型碼 –> 
    <import resource="cn/citic/trade/tradetype/tradeTypeBeans.xml" /> 
    <import resource="cn/citic/trade/aerra/aerraBeans.xml" /> 
 
</beans> 
 
2.4 某個模塊的springBean配置文件
 
這裡配置的是這個模塊的action申明 接口實現類申明 然後用spring進行註入,以後直接調用配置文件裡面的id名字,就可以實現這些類,也不用自己申明,服務器在啟動的時候,已經找到這些配置文件進行實例化瞭,註入就可以使用
 
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:context="http://www.springframework.org/schema/context" 
    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.5.xsd 
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 
 
    <!–service bean –> 
    <!– 機構差錯交易流水功能管理接口 –> 
    <bean id="aerraTradeService" 
        class="cn.citic.trade.aerra.service.impl.AerraTradeServiceBean" /> 
 
    <!–action bean –> 
    <!– 機構差錯交易流水功能Action –> 
    <bean id="aerraTradeAction" class="cn.citic.trade.aerra.action.AerraTradeAction" 
        scope="prototype" /> 
 
</beans> 
 
 
2.5 log4j.properties配置文件
加入log4j的lib之後,通過這個配置文件,就可以使用log4j來打印log瞭。隻需要在程序裡這樣:
Java代碼 
private static final Log log = LogFactory.getLog(AerraTradeAction.class); 
 
log.warn() 
or 
log.info() 
 
就可以使用瞭
 
Xml代碼 
# Logger – 日志寫出器,供程序員輸出日志信息 
#log4j.rootLogger=DEBUG,CONSOLE,FILE,ROLLING_FILE,DATABASE,MAIL 
log4j.rootLogger=INFO,CONSOLE,DRF 這裡配置打印類型,加上info 就可以打印log.info的信息瞭,沒加的不顯示 
#log4j.rootLogger=ERROR,CONSOLE 
#log4j.rootLogger=WARN,CONSOLE,FILE,ROLLING_FILE,DATABASE,MAIL 
#log4j.rootLogger=ERROR,CONSOLE,FILE,ROLLING_FILE,DATABASE,MAIL 
#log4j.rootLogger=FATAL,CONSOLE,FILE,ROLLING_FILE,DATABASE,MAIL 
 
# CONSOLE 
# ConsoleAppender – 目的地為控制臺的Appender 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.Threshold=DEBUG 
log4j.appender.CONSOLE.Target=System.out 
# Layout – 日志格式化器,用來把程序員的logging request格式化成字符串 
# PatternLayout – 用指定的pattern格式化logging request的Layout 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%c.java:%L] %m%n 
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n 
 
#應用於文件 
# FileAppender – 目的地為文件的Appender 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=${catalina.home}/logs/CiticTradeFile.log 
log4j.appender.FILE.Append=false 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
#log4j.appender.FILE.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%c.java:%L] %m%n 
log4j.appender.FILE.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n 
 
 # 應用於文件回滾 
# RollingFileAppender – 目的地為大小受限的文件的Appender 
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold=ERROR 
log4j.appender.ROLLING_FILE.File=${catalina.home}/logs/rolling.log 
# 文件最大尺寸 
log4j.appender.ROLLING_FILE.MaxFileSize=1024KB 
# 備份數 
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n 
 
# DailyRollingFileAppender(每天產生一個日志文件) 
log4j.appender.DRF=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.DRF.Threshold=WARN 
log4j.appender.DRF.DatePattern='.'yyyy-MM-dd 
log4j.appender.DRF.File=${catalina.home}/logs/CiticTradeDRF.log 
log4j.appender.DRF.Append=true 
log4j.appender.DRF.layout=org.apache.log4j.PatternLayout 
log4j.appender.DRF.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n 
 
#應用於數據庫 
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DATABASE.Threshold=FATAL 
log4j.appender.DATABASE.URL=jdbc:microsoft:sqlserver://xxxxx;DatabaseName=citic 
log4j.appender.DATABASE.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver 
log4j.appender.DATABASE.user=sa 
log4j.appender.DATABASE.password=xxxxx 
log4j.appender.DATABASE.sql=INSERT INTO TRADE_MY_LOG (USER_NO,USER_NAME,LOG_DATE,LOG_TIME,LOG_CLASS,LOG_METHOD,LOG_LEVEL,LOG_CONTENT,REMARK) VALUES ('%X{MDC_USER_NO}','%X{MDC_USER_NAME}','%d{yyyy-MM-dd HH:mm:ss,SSS}','%d{yyyy-MM-dd HH:mm:ss,SSS}','%c.java:%L','%M','%p','%m%n','') 
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n 
  在Action裡面使用其他接口或其他類,也很簡單,直接註入就可以
 @Resource
 private AerraTradeService aerraTradeService;
 
然後可以直接用那個對象,來調用方法使用瞭

作者“穿襯衫Coding”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *