`
ITFlyDragon
  • 浏览: 17657 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

2011-7-31_09-21-13_周日

阅读更多

2011-7-31-9:21:13-周日

 

我的个人电脑工作空间目录:D:\Workspaces\tq365

 

<!-- 登陆主页面直接跳转到open.jsp页面 -->
<jsp:forward page="open.jsp"/>

访问路径:
 web.xml --> spring.xml --> struts.xml

站在Web 应用层开发的角度而言,Spring中最重要的组件,除了MVC,还有另外一个令人欣赏的部分:持久层组件。

这里想要表达的意思就是:Webwork+Spring(Core+Persistence+Transaction Management)也许是目前最好的Web 开发组合。

崇尚简单至上的方案(JSP+JavaBean+JDBC),以及皇家正统的企业级策略(JSP+SLSB+CMP),在不同的出发点上,也都是不错的选择。

Webwork+Spring(WS)的组合:
  首先来看,WS组合中,Webwork和Spring各司何职?
  场景有点类似在Pizzahut 用餐,伺服人员(Webwork)负责接受客户定餐(请求),并将
 用户口头的定餐要求转化为统一的内部数据格式(Pizzahut 订单),然后将订单递交给厨师
 制作相应的餐点(执行Action),之后再从厨房将餐点送到客户餐位。而厨师具体如何操作,
 伺服并不参与。
  定单传递到厨师手上之后,厨师即按照烹饪流程(业务逻辑)开始制作餐点,烹饪的
 过程中,厨具必不可少,厨具可以选用乡间的柴灶、锅、碗、瓢、盆五件套,也可以选择
 自动化的配套厨具。而后者就是spring。

 webwork2-spring.jar 中包含了Spring与Webwork融合所需的类库。

51job、chinahr 这些人力资源网站上搜索一下Java Web 程序员应聘简历。几乎所有JavaWeb 开发人员都在简历上注明“精通Struts”

采用Struts+Spring (SS)组合:
通过plug-in我们实现了Spring Context的加载。
<struts-config>
 <plug-in
  className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
 </plug-in>
</struts-config>
我们还需要修改配置,将Struts Action交给Spring容器进行管理:
既然Action已经由Spring全权接管,那么我们就可以将此Action看作是Spring中的一个Bean,

这样,Spring Bean Name与Struts Action Path相关联,当Struts加载对应的Action时,
DelegatingActionProxy就根据传入的path属性,在Spring Context寻找对应的bean,并将其
实例返回给Struts。


推荐书籍:
 这里推荐笔者最欣赏的两本Struts书籍《Programming Struts》和《Jakarta-Struts Live》,
 前者的译版已经在国内发行,后者可从theserverside.com上免费下载。
 《Hibernate开发指南》http://www.xiaxin.net/Hibernate_DEV_GUIDE.rar
 《ibatis开发指南》http://www.xiaxin.net/ibatis_Guide.rar
 关于Spring Framework,请参见笔者另一篇文档:
 《Spring 开发指南》http://www.xiaxin.net/Spring_Dev_Guide.rar


<property name="transactionAttributes"> // 事务属性指:启动下面的pro操作时启动事务来进行处理!
 <props>
  <prop key="insert*">PROPAGATION_REQUIRED</prop>  
  <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
  <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
 </props>
</property>

在数据持久层的杰出贡献,可能是Spring最为闪亮的优点。
本质上来讲,Spring的事务管理是基于动态AOP

propagation_required propagation_required,readonly

Spring可以将任意Java Class 纳入事务管理

即使系统并没有采用Spring作为结构性框架,我们也可以单独使用Spring的JDBC部分(spring-dao.jar)来改善我们的代码。

9 SQL Injection: SQL语句中直接引入参数值而导致的系统漏洞,具体请参见以下论文:
http://www.governmentsecurity.org/articles/SQLInjectionModesofAttackDefenceandWhyItMatters.php

spring的持久层封装中的JDBC:DAO层中注入dataSource,transactionManager。

org.springframework.transaction.support.TransactionTemplate。
TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成功后的事务提交。

IUserDAO userDAO = (IUserDAO)factory.getBean("userDAOProxy");
Spring中的事务管理实际上是基于动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java Dynamic Proxy,
但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备进行代理的方法。
因此实现了面向接口的编程!至于接口到其实现类的调用则由java的 dynamic proxy(自动代理)来实现!

hibernate,ibatis底层都是使用jdbc连接数据库,所以它们的配置文件中的驱动都是jdbc的驱动!

配置文件中:SqlMapClient 之于 ibatis,类似于 Session 之于 Hibernate,Connection 之于 JDBC。前者配置的都是一个工厂类!

AOP:编译成【面向切面编程】更合适!

OOP与AOP的区别:
 OOD/OOP面向名词领域,AOP面向动词领域。
 OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。面向粗的方面!
 AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。面向细的方面!
 
 AOP和OOD/OOP并不冲突,我们完全可以在一个应用系统中同时应用OOD/OOP和AOP设计思想,
 通过OOD/OOP对系统中的业务对象进行建模,同时通过AOP对实体处理过程中的阶段进行隔离处理。
 即使不是OOD/OOP,而是在传统的POP(面向过程编程)中,AOP也能起到同样的作用。

 AOP具有源码组成无关性:简单来讲,就是应用代码可以脱离AOP组件独立编译。
 为了实现源码组成无关性,AOP往往通过预编译方式(如AspectJ)和运行期动态代理模式(如Spring AOP 和JBoss AOP)实现。

 处理逻辑(Advice),而不是“通知”:在某个连接点所采用的处理逻辑

“null!=tx”:这种写法可以避免空指针的异常!
查询:“JTA事务管理” 是什么?
Dynamic Proxy是面向接口的动态代理实现,其代理对象必须是某个接口的实现。
CGLib 与Spring AOP:
 Spring中,引入了CGLib作为无接口情况下的动态代理实现。
 换句话说,Dynamic Proxy返回的动态代理类,是目标类所实现的接口的另一个实现版本,它实现了对目标类的代理(如同UserDAOProxy与UserDAOImp的关系)。
 而CGLib返回的动态代理类,则是目标代理类的一个子类(代理类扩展了UserDAOImp类)。

目前最为实用的AOP应用,可能就是Spring中基于AOP实现的事务管理机制,也正是这一点,使得Spring AOP大放异彩。

spring中的AOP逻辑处理单元,也就是所谓的Advice,提供了针对PointCut的预处理、后处理过程等的支持。分为以下几种:
 1. Interception around advice // 环绕逻辑处理拦截器
 2. Before advice
 3. Throws advice
 4. After Returning advice
 5. Introduction advice  // 通过Introduction advice我们可以实现多线程访问中的类锁定。

Spring中采用了AOP联盟(AOP Alliance)12的通用AOP接口(接口定义位于aopalliance.jar)  http://aopalliance.sourceforge.net/

搞明白java里的动态代理是怎么回事!再搞明白spring里的动态机制!前后者的关系?

Hibernate/OJB,OJB是什么呢?

从ibatis映射文件可以看出,通过<insert>、<delete>、<update>、<select>四个节点,我们分别定义了针对TUser 对象的增删改查操作。

ibatis配置文件中Statement配置包含了数个与SQL Statement相关的节点,分别为:
 statement、insert、delete、update、select、procedure

ibatis实现了一对多的映射 和 动态查询条件映射!

对当前Session(可简单理解为当前线程)

 

分享到:
评论

相关推荐

    19-STM32F429_RTC_BKP.7z

    2. **日历功能**:RTC可以管理年、月、日、小时、分钟、秒和星期等日期和时间信息,支持闰年自动处理。 3. **闹钟功能**:用户可以设置多个闹钟事件,当时间匹配时,RTC会触发中断或事件线。 4. **备份寄存器**...

    1602P18B20PDS1302-digital-clock-.rar_DS1302 18B20

    它可以记录年、月、日、星期、小时、分钟和秒,常用于需要准确时间信息的电子产品中。 3. **18B20温度传感器**:DALLAS 18B20是一款数字温度传感器,具有独特的单线通信协议,能够提供精确的温度测量值。在电子时钟...

    rtc-hym8563.rar_HYM8563_rtc-HYM8563

    5. **日历功能**: 包括年、月、日、星期、小时、分钟和秒的完整日历功能,可以记录和读取当前时间。 6. **掉电保护**: 内置电池备份,在主电源断开后仍能保存时间数据。 "rtc-hym8563.c"文件可能包含以下内容: 1. ...

    iPhone17.3.1Tapo-test-beta(s)3.3.105_2024-03-21 10-27-14_(2024年3月21日 星期四 中国标准时间 10:27:14).encrypted.log

    iPhone17.3.1Tapo-test-beta(s)3.3.105_2024-03-21 10-27-14_(2024年3月21日 星期四 中国标准时间 10:27:14).encrypted.log

    外研版六年级总复习单选题及答案(三亚市第一小学)精选.doc

    具体到某一天时,如星期日,用介词"on"。 7. 题目:His mother is __________ nurse. 知识点:不定冠词"a/an"的使用。"nurse"以辅音音素开头,故用"a"。 8. 题目:Do you want _______ home? 知识点:固定搭配。...

    The-mobile-phone-system-.rar_mobile data traffic_phone_人流统计_地形通信

    你所在的移动通讯公司计划用微波发射器... 星期六的中午,郊区通信达到高峰。 由于只有10个发射器无法覆盖整个地区,所以你需要编写程序对呼叫需求数据进行分析,以便发射器的配置能够为最大数量的潜在客户提供服务。

    STM32-_RTC.rar_STM32钟_clock

    它能够跟踪年、月、日、小时、分钟、秒以及星期等日期和时间信息。 2. **RTC时钟源**:RTC的时钟源可以是外部晶振(如32.768kHz),也可以是内部RC振荡器。选择合适的时钟源对于RTC的精度至关重要。外部晶振通常更...

    T-sql 官方文档

    - **`@@DATEFIRST`**: 返回当前会话的星期第一天。 - **`CURRENT_TIMESTAMP`**: 返回当前的日期和时间。 - **`DATEADD`**: 增加或减少日期/时间表达式。 - **`DATEDIFF`**: 计算两个日期/时间之间的差值。 - **`...

    JavaScript-Date类型全面解析_.docx

    - `getDay()`:返回星期几,0表示星期日,6表示星期六。 - `getHours()`:返回24小时制的小时数。 - `getMinutes()`:返回分钟数。 - `getSeconds()`:返回秒数。 在实际开发中,这些方法可以组合使用以满足...

    final-project-cs493_team_17:由GitHub Classroom创建的final-project-cs493_team_17

    作业3 作业将于2018年6月4日星期一晚上11:59到期演示应在2018年6月15日星期五下午5:00之前完成这项任务的目标是使用MongoDB来存储应用程序数据,并开始将安全功能整合到我们的API中。 如下所述,此任务有几部分。 在...

    drive-download-20200511T044822Z-001_SWQX_calculo_moneyw3t_

    标题“drive-download-20200511T044822Z-001_SWQX_calculo_moneyw3t_”暗示这是一个关于数学计算的电子资料包,可能是一个学习资源或者课程材料,创建时间为2020年5月11日。描述中的“HOJA de calculo matematico”...

    en.STM32G4-WDG_TIMERS-Real-Time_Clock_RTC(STM32G4-实时时钟控制器).pdf

    时间的年、月、日、小时、分钟和秒采用二进制编码十进制(BCD)格式,以便于显示。而小数秒则以二进制格式提供。此外,该模块支持防篡改检测和备份寄存器功能,这些功能属于TAMP(温度警报和篡改检测)外设的一部分。 ...

    sql server 2000教程

    - `dw`:星期 - `hh`:小时 - `mi`:分钟 - `ss`:秒 - `ms`:毫秒 5. 系统函数: - `suser_name()`:返回用户登录名。 - `user_name()`:返回用户在数据库中的名字。 - `user`:同`user_name()`,返回当前...

    sql 2005 常用函数

    - `datepart(datepart,date_expr)`:返回`date_expr`的特定部分(如年、月、日等)。 - `datediff(datepart,date_expr1,date_expr2)`:计算两个日期之间`datepart`的差值。 - `dateadd(datepart,number,date_expr...

    江苏省永丰初级中学七年级英语上册Unit1ThisismeTaskSelf_assessment课时训练新版牛津版

    - have lessons: - 星期天你们有课吗? - 不,我们周六和周日不上学。 - That's great: - 我们去打羽毛球吧,好吗? - 那太好了。 - be good at: 安迪和米莉擅长游泳。他们五岁时就开始游泳了。 - play: 卡卡是...

    DONG-HO-HEN-GIO.rar_DS1307_dong ho_dong ho bao thuc_donghen.com_

    DS1307是一款低功耗、全静态的实时时钟芯片,用于保持时间(小时、分钟、秒、年、月、日和星期)。它具有内部振荡器和闰年补偿功能,可以提供精确的时间记录。在电子钟项目中,DS1307通过I2C接口与微控制器通信,...

    a-date-of-the-year.rar_The Dos

    描述中的“1、输入某一日期,判定该日期为星期几2、求三角形的面积”揭示了两个具体任务:日期计算和几何计算。 在DOS环境下,我们可以使用批处理文件(.bat)或BASIC语言来实现这些功能。批处理文件是基于命令行的...

    AVR控制的DS1302 C程序

    它可以提供秒、分、时、日、月、年的时间记录功能,并且还具有一定的温度检测能力。由于其体积小、功耗低、接口简单等优点,在许多嵌入式系统中被用作时间基准源。 ### C语言程序实现 在所提供的代码片段中,可以...

    dp18_ap6330整理完工20170209_1129.7z

    r18_ap6330的步骤.txt 2017/2/9 10:47 开始整理 原始SDK默认配置为rtl8723bs,现在要修改为:AP6330。 硬件平台:全志R18。 开发板:DP-18 SDK:Android6.0.1/Linux3.10.65(v2.1版本,发布日期20161008) ...

    a-date-of-the-year.rar_The Year

    星期的返回值通常是一个整数,其中0表示周一,1表示周二,以此类推,6表示周日。下面是一个简单的示例: ```python import datetime def get_weekday(year, month, day): date = datetime.date(year, month, day)...

Global site tag (gtag.js) - Google Analytics