ssh框架的项目全纪录

 一 整个项目的框架,文件夹分布

 

 

二 一些重要的配置文件

 

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 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 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 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 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了。只需要在程序里这样:

private static final Log log = LogFactory.getLog(AerraTradeAction.class);

log.warn()
or
log.info()

 

就可以使用了

 

# 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;

 

然后可以直接用那个对象,来调用方法使用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值