1. spring整合struts的基本操作见我的博文:,这里面将spring与struts2框架整合起来,并且实现了action获取service,说明spring与struts2框架已经建立联系,互通了,但是这种使用web工厂的方式太麻烦了,在开发中并不会使用这种方法,所以我就要介绍spring整合struts2框架的另外一种方法。目前有两种方法,现在介绍第二种方式,第一种方式见我的上一篇博文:。
2. 把具体的Action类配置文件applicatonContext.xml的配置文件中,但是注意:struts.xml需要做修改:
我们需要在applicationContext.xml中定义action,action由spring来进行管理,在原有配置applicationContext.xml中添加下面这组语句:
完整的applicationContext.xml配置为:
3. 更改完applicationContext.xml后,由于我们在这里面定义了Action,所以我们在struts.xml中定义action的时候,在action标签中的class属性不用写全路径了,而填充的是spring中applicationContext.xml中对应Bean的Id。更改后的配置内容为:
4. 我们的Service同样使用上一篇博文的方式来进行获取,在Action中使用数据封装的方式进行获取,所以我们只需要在CustomerAction中定义CustomerService对象,然后定义其Set方法即可:
package com.huida.web;import org.apache.struts2.ServletActionContext;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import com.huida.domain.Customer;import com.huida.service.CustomerService;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class CustomerAction extends ActionSupport implements ModelDriven{ //手动实例化对象 //private Customer customer=new Customer(); private CustomerService customerService; public void setCustomerService(CustomerService customerService) { this.customerService = customerService; } /* * 保存客户的方法 */ public String save(){ System.out.println("Action中执行了save方法"); customerService.save(); return NONE; } @Override public Customer getModel() { return null; }}
5. 我们可以验证一下struts与spring整合是否成功。
启动服务器-->在浏览器中输入http://localhost:8080/ssh1-->在页面中点击客户管理-->新增客户-->点击保存按钮。在控制台上输出如下内容:
通过以上步骤我们便将struts与spring通过传统的方法整合起来了。
6.第二种方式需要有几个注意的地方:
(1)struts.xml对应的action标签中的class属性填充的是spring中applicationContext.xml中对应Bean的Id
(2)pring框架默认生成CustomerAction是单例的,而Struts2框架是多例的。所以需要配置 scope="prototype"
(3)CustomerService现在必须自己手动注入了。