以前都是用webwork,最近因为遗留项目的维护,捣腾起struts1.x,原先的代码到处充斥着ApplicationContext.getBean的代码,实在没法容忍,上网找了struts和spring集成的例子,基本上都是struts1.3以前版本的代码,很不优雅。struts1.3和之前版本相比,使用command-chain来处理请求,有点类似于webwork的拦截器,下面介绍下整个实现思路,欢迎批评指正。
1、首先需要一个ServletContextListener,用于获取Spring的ApplicationContext实例(使用Quake Wang的jert的代码),具体请参考附件源码
2、定义ComponentAutowireInterceptor实现ActionCommon接口,以实现spring bean的注入,这里为了方便,直接从CreateAction继承:
/**
* $Revision: 1.0 $
* Created: 2007-8-17
* $Date: 2007-8-17 $
*
* Author: Keven Chen
*/
package struts.demo.command;
import org.apache.struts.action.Action;
import org.apache.struts.chain.commands.servlet.CreateAction;
import org.apache.struts.chain.contexts.ActionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.comwave.webui.core.container.Application;
/**
* @author Keven Chen
* @version $Revision 1.0 $
*
*/
public class ComponentAutowireInterceptor extends CreateAction {
protected Action createAction(ActionContext context, String type) throws Exception {
Action action = super.createAction(context, type);
if(action !=null){
Application.getInstance().getContainer().autowireComponent(action);
System.out.println("装配Action");
}
return action;
}
}
3、配置web.xml和chain-config.xml配置片段(完整配置请参考附件代码)
web.xml
....
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext*.xml</param-value>
</context-param>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener> <listener-class>com.comwave.webui.core.web.listener.DefaultApplicationSetupListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>struts/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>chainConfig</param-name>
<param-value>struts/chain-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
....
chain-config.xml
....
<!--command className="org.apache.struts.chain.commands.servlet.CreateAction"/-->
<command className="struts.demo.command.ComponentAutowireInterceptor"/><!--替换原先的CreateAction-->
....
Struts的Action无需实现任何接口,也不需要特别的配置,就可以自动实现spring bean的注入。
分享到:
相关推荐
Strtus2+spring+hibernateStrtus2+spring+hibernateStrtus2+spring+hibernate
这是struts1.3结合hibernate3.2综合整合的小型案例,只有两个模块的功能,分别是用户登录模块,用户发帖子模块。 业务逻辑并不复杂,但是却是一个学习hibernate和struts的不错学习案例。
strtus2+spring3+ibaties2 项目整合 登录管理 项目实现了增删改查!值得一看
原程序strtus2+spring 订票系统
struts+spring 集成
利用Strtus2+hibernate+spring实现的用户管理小项目(内含mysql数据库脚本和所需的所有jar包),另外里面自己也做了一些封装,这个项目的说明可以参考我发表的博客"对SSH的一些认知
strtus2+Spring+hibernate整合通过实体类生成数据库表
Spring和strtus的xml文件的修改
这个插件是在strtus2和spring集成必备的一个插件
针对struts2与ibatis,spring的整合做比较详细的说明,是初学者比较适合的例子
NULL 博文链接:https://liwei113114.iteye.com/blog/1884260
struts1+spring 一套完整的框架 配置好数据库就可以直接使用
以前在公司基于struts2+spring+hibernate+jqgrid做的一个...1.3、 预期读者和阅读建议 本需求规格说明书的读者范围为: 公司领导:组织需求评审、确定需求方向; 开发小组:项目经理、程序员、测试等工作的基准。
Strtus2+Hibernate+spring常用开发包
加快了开发速度,但是也有一些不足之处,比如由于三种框架的配置文件较多,也给我们带来了一些不便,特别是对于较小的应用来说更是如此,本文主要是对Strtus2、Spring、iBatis三个开源框架进行一个集成
使用maven集成spring,struts2,hibernate三大框架,mysql数据库 密码账号 都在配置文件里 不懂可以联系我qq:1193298924
struts2+spring2+ibatis简单登录例子
SSH配置源码分析,总结,面试常问到,配置详解,原理,机制。
一个简单的spring+struts+ibatis整合的实例,实现了用户登录,用户登录成功则显示欢迎信息,失败则显示用户名或密码错误,该实例非常简单基础,特别适合新人学习,工程包含了必要的资源包,部署到服务器中及可运行,...
用strtus制作登陆页面 用strtus制作登陆页面用strtus制作登陆页面 用strtus制作登陆页面 用strtus制作登陆页面用strtus制作登陆页面 用strtus制作登陆页面