Spring 学习点滴,《Spring in Action》笔记(六)

  1. Spring 提供了丰富的控制器层次,方便根据实际需求选择实现或继承那一种控制器。不像 Struts 和 WebWork 比较平坦的 Action 层次。比如 ThowawayController/MultiActionController/SimpleFormController 等。 (P254)

82. 继承 AbstractController 要覆盖的方法是 handleRequestInternal(request,response);new ModelAndView("counrseList","courses",courses) 第一个参数是 view 的逻辑名,第二第三个参数是传递给 view 的名称/数值对,那要向 View 传递多个参数就还是要用 request.setAttribute() 了。(P256) 阅读全文 >>

Spring 学习点滴,《Spring in Action》笔记(五)

第八章. 建立 Web 层


71. Spring 的 MVC 和 Struts 的 MVC 基本一致
    Spring 的控制流程是:请求->DispatcherServlet->从 HandlerMapping 中查询到处理该请求的 Controller-> Controller 的 handleRequest 方法调用业务方法,最后返回 ModelAndView (ModelAndView告诉了 DispatcherServlet 转向到哪个视图)
    Struts 的控制流程是:请求->ActionServlet->从 ActionMapping 中查询到处理该请求的 Controller (Action类)->Action 的execute 方法调用业务方法,最后返回 ActionForward (ActionForward告诉了 ActionServlet 该转向到哪个视图)(P243) 阅读全文 >>

Spring 学习点滴,《Spring in Action》笔记(四)

  1. 更为精彩的是自动代理的方式来总体配置各分散类中方法的事物属性,结合使用 DefaultAdvisorAutoProxyCreator, TransactionAttributeSourceAdvisor 和 TransactionInterceptor (我还需要详细理清楚)(P181)

62. 当使用自动代理时,MethodMapTransationAttributeSource 就能很多的派上用场了,它的 methodMap 属性中可以指定哪个类的哪个方法,可以使用通配符(P182)

第七章. 访问企业服务

阅读全文 >>

掌握一种Java模板技术 – Velocity

原来的项目中基本都是用 JSP+Tag  来展示内容,有时也有 Jasper Report 做报表,报表也算是一种模板技术,只是有些重量级。看过 Spring 的书籍,都会对 Velocity 和 FreeMaker 有介绍,带动了我对先前看过的 *.vm 文件的研究提上了日程,了解之后,已觉相见恨晚。

下面讲利用 Velocity 怎么更好解决目前项目的一个简单问题:系统在进行支付了支付后,自己按设定的信息模板发送一条短信给责任人。信息模板是:

{单据责任人}:您的 {单据号} 号{单据类型}在 {操作日期} 日已支付 阅读全文 >>

Spring 学习点滴,《Spring in Action》笔记(三)

第十章. 使用其他 Web 框架


41. Spring 提供了两种与 Struts 集成的方式
    1) 让你的 Action 继承 org.springframework.web.struts.ActionSupport
    2) 将请求委托给作为 Spring Bean 管理的 Struts action 来自理(P312)

42. 为了让 Struts 能访问 Spring 管理的 Bean,必须在 struts-config.xml 中注册一个知道 Spring 上下文的 ContextLoaderPlugIn,用的是 WebApplicationContext:(P312) 阅读全文 >>

Spring 学习点滴,《Spring in Action》笔记(二)

第四章. 征服数据库


31. Spring 把数据访问流程中的固定部分和可变部分分开,分别映射成两截然不同的类,模板(Template)和回调(Callback),模板管事物控制、资源管理以及异常处理;回调实现特定于应用的部分--创建 statement、绑定参数、以及整理结果集。模板方法模式的优秀应用(P123)

32. JdbcTemplate template = new JdbcTemplate(myDataSource); 构造。 所有 Spring Dao 模板类是线程安全的,可以为每一个 DAO 配置一个 JdbcTemplate 属性,也可以让 DAO 类继承 JdbcDaoSupport,然后在 DAO 类中用 getJdbcTemplate() 获取到 JdbcTemplate 进行数据库操作。书中的做法是给每个 Dao 加一个 JdbcTemplate 属性,记录的日志略有不同,实际中注意(P127) 阅读全文 >>

Spring 学习点滴,《Spring in Action》笔记(一)

第二章:装配 Bean


 

1. <ref>标签中的 bean, local, parent 三个属性的区别(P53)

2. <list><value...</list>和<set><value...</set>可以换着用都可以为 List, Set 以及数组属性赋值(P55)

3. <map>属性用 spring  进行装匹时 key 值只能是字符串类型,不过一般能满足要求(P55)

4. 装配 map 属性要用 <entry key="key1"><value>foo</value></entry>, 而装匹 properties 属性可以写成 <prop key="key1">foo</prop>, 这是因为 properties 的值总是字符串,而 map 中很随意(P55) 阅读全文 >>

试图在不修改Log4J源码情况下,用静态方法打印正确日志信息失败

在开源的项目中使用 Log4j一般 都是在类中添加一静态变量,如
 protected static Log log = LogFactory.getLog(RequestProcessor.class); //通用日志组件

 protected static Logger log = Logger.getLogger(RequestProcessor.class); //直接申明为Log4j的logger

原来有一个项目是做了一个自定义了 MyLogger 类, 其中的 debug, info 等到方法直接就是调用 log4j 的 logger 的对应方法. 别的代码中调用 MyLogger 的静态方法打印日志时, 依据log4j.properties的配置显示 %l  定位信息就始终是 MyLogger

如: 2007-05-23 12:18:46,828 [DEBUG] com.unmi.MyLogger.debug(MyLogger.java:12) Hello MyLogger 阅读全文 >>

提交多行数据到Struts的ActionForm的List属性中

WEB 应用中一般都会处理主从表的信息, 或者称之为头层与行层的一对多的关系数据,如订单头/订单明细. 对于这种关系数据提交到后台的 Struts 的 ActionForm 的话, 这个 ActionForm 就要好好的设计一下, 不然会给自已带来许多额外的代码. 比如有的人的处理方法就是把页面提交到后台的毫无关系的散装数据非常吃力的拼凑一对多的关系对象出来.

下面举一个如今非常现实的关于股票的例子, 简单的应用场景是: 记录某个帐户所持有的股票信息,提交到后台,然后显示出来. 输入页面如下图

帐户信息包括帐户名和资金帐号;持有股票的每一行信息包括股票代码, 股票名称, 成本价, 股票数量. 股票行可以动态增删. 阅读全文 >>

Retrotranslator让你用JDK1.5的特性写出的代码能在JVM1.4中运行

JDK1.5出来多年了(2004年10月正式发行),就连6.0正式版在 http://java.sun.com上已是赫然在目,紧跟着的各应用服务器和 Java IDE 厂商的都准备就绪. 可是相信很多开发者跟我一样却碍于公司用的是老版本的应用服务器,如WebSphere Application Server,,WebLogic等只能支持到1.4的JDK,要升级应用服务器成本和风险都有担心,所以项目中只能用1.4 的JDK,一直无法体验到 JDK 1.5 的新特性带来的便利.

有些同事机器里一直还是躺着 JDK 1.4,我可能比他们好一点就是直接装了一个 JDK 1.5,然后在 Java IDE 中设置编译器的 Compiler compliance level为 1.4(实质就是javac –target 1.4).这样避免了用JDK1.5编译的Class 放在1.4的JVM中运行出现49.0的字节码版本太高的错误,这样做只不是50步和100步的差距,照例用不了JDK1.5 的新特性. 阅读全文 >>