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(可简单理解为当前线程)
发表评论
-
microsoft.xmldom在struts中的使用
2011-10-10 17:49 850在js中定义url: function query(form ... -
myeclipse6.5从svn上下载项目
2011-10-09 14:25 16561、myeclipse6.5 通过集成的svn插件,从svn服 ... -
2011年8月8日 9:55:48
2011-08-08 15:19 623bingAccount.xml 的 cacheModel 没 ... -
2011-8-5_13-29-05_周五
2011-08-08 15:17 6622011-8-5_13-29-05_周五 sprin ... -
2011-8-4_08-29-52_周四
2011-08-08 15:16 5792011-8-4_08-29-52_周四 如果出现4 ... -
2011-8-3_15-43-14_周三
2011-08-08 15:14 5912011-8-3_15-43-14_周三 jsp中的 ... -
2011-8-2_09-15-06_周二
2011-08-08 15:13 5322011-8-2_09-15-06_周二 ... -
2011-8-1_18-03-51_周一
2011-08-08 15:11 5572011-8-1_18-03-51_周一 在分页显示中改变 ... -
2011-7-30-18:34:19-星期六
2011-08-08 15:06 3692011-7-30-18:34:19-星期六 1、速 ...
相关推荐
2. **日历功能**:RTC可以管理年、月、日、小时、分钟、秒和星期等日期和时间信息,支持闰年自动处理。 3. **闹钟功能**:用户可以设置多个闹钟事件,当时间匹配时,RTC会触发中断或事件线。 4. **备份寄存器**...
它可以记录年、月、日、星期、小时、分钟和秒,常用于需要准确时间信息的电子产品中。 3. **18B20温度传感器**:DALLAS 18B20是一款数字温度传感器,具有独特的单线通信协议,能够提供精确的温度测量值。在电子时钟...
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
具体到某一天时,如星期日,用介词"on"。 7. 题目:His mother is __________ nurse. 知识点:不定冠词"a/an"的使用。"nurse"以辅音音素开头,故用"a"。 8. 题目:Do you want _______ home? 知识点:固定搭配。...
你所在的移动通讯公司计划用微波发射器... 星期六的中午,郊区通信达到高峰。 由于只有10个发射器无法覆盖整个地区,所以你需要编写程序对呼叫需求数据进行分析,以便发射器的配置能够为最大数量的潜在客户提供服务。
它能够跟踪年、月、日、小时、分钟、秒以及星期等日期和时间信息。 2. **RTC时钟源**:RTC的时钟源可以是外部晶振(如32.768kHz),也可以是内部RC振荡器。选择合适的时钟源对于RTC的精度至关重要。外部晶振通常更...
- **`@@DATEFIRST`**: 返回当前会话的星期第一天。 - **`CURRENT_TIMESTAMP`**: 返回当前的日期和时间。 - **`DATEADD`**: 增加或减少日期/时间表达式。 - **`DATEDIFF`**: 计算两个日期/时间之间的差值。 - **`...
- `getDay()`:返回星期几,0表示星期日,6表示星期六。 - `getHours()`:返回24小时制的小时数。 - `getMinutes()`:返回分钟数。 - `getSeconds()`:返回秒数。 在实际开发中,这些方法可以组合使用以满足...
作业3 作业将于2018年6月4日星期一晚上11:59到期演示应在2018年6月15日星期五下午5:00之前完成这项任务的目标是使用MongoDB来存储应用程序数据,并开始将安全功能整合到我们的API中。 如下所述,此任务有几部分。 在...
标题“drive-download-20200511T044822Z-001_SWQX_calculo_moneyw3t_”暗示这是一个关于数学计算的电子资料包,可能是一个学习资源或者课程材料,创建时间为2020年5月11日。描述中的“HOJA de calculo matematico”...
时间的年、月、日、小时、分钟和秒采用二进制编码十进制(BCD)格式,以便于显示。而小数秒则以二进制格式提供。此外,该模块支持防篡改检测和备份寄存器功能,这些功能属于TAMP(温度警报和篡改检测)外设的一部分。 ...
- `dw`:星期 - `hh`:小时 - `mi`:分钟 - `ss`:秒 - `ms`:毫秒 5. 系统函数: - `suser_name()`:返回用户登录名。 - `user_name()`:返回用户在数据库中的名字。 - `user`:同`user_name()`,返回当前...
- `datepart(datepart,date_expr)`:返回`date_expr`的特定部分(如年、月、日等)。 - `datediff(datepart,date_expr1,date_expr2)`:计算两个日期之间`datepart`的差值。 - `dateadd(datepart,number,date_expr...
- have lessons: - 星期天你们有课吗? - 不,我们周六和周日不上学。 - That's great: - 我们去打羽毛球吧,好吗? - 那太好了。 - be good at: 安迪和米莉擅长游泳。他们五岁时就开始游泳了。 - play: 卡卡是...
DS1307是一款低功耗、全静态的实时时钟芯片,用于保持时间(小时、分钟、秒、年、月、日和星期)。它具有内部振荡器和闰年补偿功能,可以提供精确的时间记录。在电子钟项目中,DS1307通过I2C接口与微控制器通信,...
描述中的“1、输入某一日期,判定该日期为星期几2、求三角形的面积”揭示了两个具体任务:日期计算和几何计算。 在DOS环境下,我们可以使用批处理文件(.bat)或BASIC语言来实现这些功能。批处理文件是基于命令行的...
它可以提供秒、分、时、日、月、年的时间记录功能,并且还具有一定的温度检测能力。由于其体积小、功耗低、接口简单等优点,在许多嵌入式系统中被用作时间基准源。 ### C语言程序实现 在所提供的代码片段中,可以...
r18_ap6330的步骤.txt 2017/2/9 10:47 开始整理 原始SDK默认配置为rtl8723bs,现在要修改为:AP6330。 硬件平台:全志R18。 开发板:DP-18 SDK:Android6.0.1/Linux3.10.65(v2.1版本,发布日期20161008) ...
星期的返回值通常是一个整数,其中0表示周一,1表示周二,以此类推,6表示周日。下面是一个简单的示例: ```python import datetime def get_weekday(year, month, day): date = datetime.date(year, month, day)...