第一种方式getter和setter
1、在struts中添加
2、applicationContext.xml中
注意代码中的粗斜体部分,这个name 的取值一定要和Struts 配置文件action 中的path 的
值相对应,否则整合就会失败:
括message,以及以后可以加入的Service 层对象了,也就是说你现在可以完全把它看作
一个普通的JavaBean 来处理就行了,想加入AOP 什么的都可以。在这里为了测试方便,
我们把message 属性注入一个”Spring Struts”的值。
3、不需要在web.xml中注入
4、在Action中添加getter和setter
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
并且使用访问
System.out.println(getMessage());
第二种方式:
方式二:使用ContextLoaderPlugIn,替换Struts Action 的类型并在Spring 中配置对
应的类型。
1、这种方式下的Action类的源码和上面11.7.1 给Action类加入message属性一节所介绍
的是一样的
2、Spring的配置文件也和11.7.3 在Spring配置文件中加入Action的bean定义一
节所介绍的内容一样。
3、不需要在web.xml中注入
4、唯一不同的是Struts 的配置文件, 注意看下面的配置文件
struts-config.xml源码:
****
去掉
/>
但是要将action中的type="org.springframework.web.struts.DelegatingActionProxy"
经测试成功
第一个不同点,就是Action 类的type 从原来的
com.yourcompany.struts.action.UserLoginAction 变成了现在的由Spring 所提供的代理类
org.springframework.web.struts.DelegatingActionProxy,这个类也是Struts Action 类的一
个子类,只不过它的幕后工作就是从Spring 配置文件中查找定义的name 为/userLogin 的
bean 定义来作为真正的Action 对象,然后委托给它来处理剩下的业务逻辑。
第二个不同点,
就是删除了下面这句配置语句:
说代码改动量也不太大,实际开发中可以采用。
第三种方法(开发中不提倡)
使用Spring 提供的ActionSupport 类。这种方式,因为Action 类的代码要做
大量修改,已经违背了Spring 提倡的无侵入这个理念,而且的确出现代码改动量太多的这
个问题,因此在实际开发中不提倡使用这种方式。
3、不需要在web.xml中注入
4、struts.xml中发生变化
恢复type为type="com.yourcompany.struts.action.UserLoginActionSupport"
而且插件为
相比较起没加入 Spring 之前的Struts 的配置文件,其不同之处就如代码中粗斜体部分
所示,加入了一个插件配置。那么在这种方式下,不需要在Spring 的配置文件中加入Action
类的bean 定义,相对比的,您需要首先继承自ActionSupport 类,然后通过在Action 类中
写代码来自己查找Bean 类:
--------------上面的说法是不需要在Spring 的配置文件中加入Action类的bean 定义
/** 基于 Spring ActionSupport 的登录类。*/
public class UserLoginActionSupport extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//*********
ApplicationContext ctx = this.getWebApplicationContext();
StudentManager studentManager = (StudentManager) ctx
.getBean("studentManager");
System.out.println("登录检查="
+ studentManager.checkLogin("spring hibernate 标注事务测试", "密码
"));
//*********
// 更多业务代码
return mapping.findForward("success");
}
--------------继承ActionSupport 类
代码中的粗斜体部分就是新增的内容,主要就是获得Spring 的核心容器类:
ApplicationContext(可以认为和BeanFactory 这个类工厂是一回事),然后从里面获取定义
好的bean 类,之后调用上面的业务逻辑。其实这种方式和自己亲手写代码创建BeanFactoy
然后加载对象是差不多的,对现有代码的改动也比较大,既有继承,还有额外代码,还得导
入Spring 的包,Spring 文档上说推荐这种做法,我怎么看也看不出这样到底有多少方便的
地方。
提示:如果您需要其它类型的Action,例如DispatchAction 等等,那么需要继承自对
应的Spring 版本的类―― ActionSupport,DispatchActionSupport,
LookupDispatchActionSupport,MappingDispatchActionSupport,只不过是类名后加
了一个Support,这些类位于包org.springframework.web.struts 下面。
第四种
最后, 我们再介绍 Struts1 加载Spring 的另一种方式,修改web.xml 配置加载spring
上下文环境,其配置方式如下:
通过listener 加载:
或者利用severlet 类在启动时加载:
注意:使用这种方式的时候,就不要在 Strurts 的配置文件中写那个 plugin 配置信息
了。
建立类StudentManager 和 它的方法checkLogin
package com.liuchangjiong.struts.action;
public class StudentManager {
public String checkLogin(String string, String string2) {
return string+string2;
}
}
注意在applicationContext.xml中声明,注意是id,与上面都是name
而且该类不用在struts.xml中声明