`

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;

 

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

  • 大小: 84.4 KB
分享到:
评论

相关推荐

    SSH框架整合项目源码

    在这个“SSH框架整合项目源码”中,可以看到如何将这三个框架协调工作,形成一个完整的开发体系。发布系统通常包括用户登录、权限管理、内容发布、审核、查询等功能。开发者可能已经对这些功能进行了优化,例如提高...

    ssh框架项目源码ssh框架项目源码ssh框架项目源码

    ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh...

    SSH框架搭建源码

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个压缩包文件"SSHdemo"提供了一个SSH框架搭建登录功能的示例,帮助开发者了解并实践如何整合这三个框架来构建一个...

    SSH框架项目的优化

    SSH 框架项目优化 SSH 框架项目优化是指在 Struts 框架下,如何对项目进行优化,以提高项目的性能和可维护性。下面将介绍 SSH 框架项目优化的相关知识点。 一、Struts 框架优化 1. 使用基类继承:在 Struts 框架...

    ssh框架纯净版

    4. **使用说明【必读】.txt**:这个文件非常重要,它应该包含了如何配置和运行SSH框架项目的详细步骤,包括环境搭建、项目导入、数据库连接设置、配置文件解析、以及如何运行和测试应用程序等内容。 在实际开发中,...

    商贸项目SSH框架实现代码

    这个“商贸项目SSH框架实现代码”提供了完整的源码,对于学习和理解SSH框架的工作原理及实际应用具有很高的价值。 1. **Spring框架**:Spring是核心的IoC(Inversion of Control)和AOP(Aspect Oriented ...

    SSH框架项目实战

    这个“SSH框架项目实战”显然是一份关于如何使用这三个框架进行实际项目开发的教程或示例代码。接下来,我们将深入探讨SSH框架的核心概念、相互作用以及在实际项目中的应用。 1. **Struts2**:Struts2是一个基于MVC...

    完整ssh框架详细项目

    在这个名为"完整ssh框架详细项目"的压缩包中,你将找到一个实际操作的示例,帮助你理解和应用SSH框架。 **Spring框架**是整个项目的基石,它负责管理应用程序的组件,提供依赖注入(DI)和面向切面编程(AOP)。DI...

    基于ssh框架 项目实例

    基于ssh框架项目实例

    ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架

    ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ...

    完全基于注解方式SSH框架项目设计.pdf

    在文档提供的信息中,作者雷筱珍通过“完全基于注解方式SSH框架项目设计”这篇文章,向读者详细阐述了SSH框架项目设计中注解应用的具体方法。文章中提到的参考文献,如《Struts, Hibernate, Spring集成开发宝典》和...

    四个SSH框架实战项目源码加笔记

    这个压缩包文件包含了四个基于SSH框架的实战项目源码以及相关的学习笔记,这对于深入理解SSH框架的集成与应用具有极大的帮助。 1. **Struts框架**:Struts是一个开放源代码的Web应用程序框架,它基于MVC设计模式,...

    idea配置ssh框架

    本文将详细介绍如何在IntelliJ IDEA中配置SSH框架,并通过一系列步骤来实现项目的搭建过程。 #### 二、环境准备 在开始配置之前,请确保已经安装并配置好了以下工具: - **IntelliJ IDEA**:最新版本或支持SSH框架...

    基于SSH框架的web项目

    【基于SSH框架的Web项目】是一个综合性的开发实践,它主要使用了Struts2、Spring和Hibernate这三大流行开源框架,构建了一个功能完善的Web应用程序。SSH框架组合在Java Web开发中广泛使用,提供了模型-视图-控制器...

    ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架

    ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...

    ssh框架项目

    SSH框架项目是一个基于Java技术的Web开发框架,主要由Spring、Struts2和Hibernate三个开源组件组成。这个项目特别适合初学者,特别是那些对Java编程有一定了解但对SSH框架还不熟悉的新手小白。通过学习和实践这个...

    SSH框架项目源代码

    在这个"SSH框架项目源代码"中,你可以看到如何将这三个框架整合到一个空项目中,从而理解它们的交互方式。通过学习这些源代码,你可以深入理解SSH框架的实现原理,以及如何在实际项目中进行应用。对于初学者来说,这...

    韩顺平.SSH框架视频教程-项目实战-校内网(含源代码、设计文档、关系图和数据库脚本)

    韩顺平.SSH框架视频教程-项目实战-校内网(含源代码、设计文档、关系图和数据库脚本) 网盘地址 已整理。 韩顺平.SSH框架视频教程-项目实战-校内网(含源代码、设计文档、关系图和数据库脚本) 网盘地址 已整理。

    ssh2框架练习项目及代码

    在"ssh2框架练习项目及代码"中,我们可以深入学习和实践SSH2框架的核心功能和应用场景。 Spring框架是SSH2的核心,它提供了一个全面的基础设施,支持从简单的Bean管理到复杂的AOP(面向切面编程)和事务管理。...

    ssh框架项目银行系统源码

    这个项目是一个基于SSH框架实现的简单银行系统,旨在帮助开发者更好地理解和运用SSH框架进行实际项目开发。 首先,Struts2是MVC(模型-视图-控制器)设计模式的一个实现,它提供了处理HTTP请求、控制应用流程、组织...

Global site tag (gtag.js) - Google Analytics