- 浏览: 898546 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
关于Spring , Struts结合学习。
一、前言
刚刚接触了日本一个项目,用的框架名称是Northland Framework,主要用到以下部分
Struts、Spring、iBATIS、Velocity。Struts、Spring如何结合在一起?
二、 Spring 提供了三种整合 Struts 的方法:
使用 Spring 的 ActionSupport 类整合 Structs
使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor
将 Struts Action 管理委托给 Spring 框架
( 参见 Get a better handle on Struts actions, with Spring
对应还有译文:
三、我只关心第三种整合方法:
这种方法通过 Spring 提供的两个和 Struts 相关类来实现: org.springframework.web.struts. DelegatingActionProxy , org.springframework.web.struts. ContextLoaderPlugIn 。
ContextLoaderPlugIn 实现 Struts 的 PlugIn 接口,只要在 struts-config.xml 中有如下配置:
< action path = "/searchSubmit" >
type = "ca.nexcel.books.actions.DelegatingActionProxy"
input = "/searchEntry.do"
validate = "true"
name = "searchForm" >
< forward name = "success" path = "/WEB-INF/pages/detail.jsp" />
< forward name = "failure" path = "/WEB-INF/pages/search.jsp" />
</ action >
< plug-in className = "org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property = "contextConfigLocation" value = "/WEB-INF/beans.xml" />
</ plug-in >
|
ActionServlet 装载的时候就可以顺便装载和 Spring 相关的 beans.xml ,和 beans.xml 中相关的一个东西叫做 WebApplicationContext , ( 在 Spring 里关键就是取得 WebApplicationContext ,取得这个也就可以用 Spring 管理业务 ) ,在 ContextLoaderPlugIn 中是这样保存 WebApplicationContext :
String attrName = getServletContextAttributeName();
getServletContext().setAttribute(attrName, wac);
再看 DelegatingActionProxy ,它继承于 Struts 的 Action ,以后 struts-config.xml 中所有的
Action-mapping 都要指向它,只是每个 Action-mapping 的 path 不同,将来也是用这个 path 来区分究竟需要执行 beans.xml 中的那个类。如下代码:
public ActionForward execute(){
Action delegateAction = getDelegateAction(mapping);
return delegateAction.execute(mapping, form, request, response);
}
|
这里的 delegateAction 就是 beans.xml 中一个相关的类 (beans.xml 也要求类继承于 Struts 的 Action) 去看看怎么得到 delegateAction :
protected Action getDelegateAction(ActionMapping mapping) throws BeansException {
WebApplicationContext wac = getWebApplicationContext(getServlet(),
mapping.getModuleConfig());
String beanName = determineActionBeanName(mapping);
return (Action) wac.getBean(beanName, Action.class);
}
|
是如何取得 WebApplicationContext 呢:
wac=(WebApplicationContext)actionServlet.getServletContext().getAttribute( ContextLoaderPlugIn.SERVLET_CONTEXT_PREFIX);
|
SERVLET_CONTEXT_PREFIX 正是 前边提到的 ContextLoaderPlugIn 中 的 attrName 。
现在这个原理一目了然, ContextLoaderPlugIn 在 actionServlet 初始化过程中保存
起来留到后面供 DelegatingActionProxy 用。
四、在另一篇文章中提到在上面的方法中 OpenSessionInView Filter 不能用
( 参照 http://wyyhzc.itpub.net/) ,这个东西我也不熟悉,是不是有不少 Spring 的东西在这种方式中都不能用呢? 这就说到另一种取得 Spring WebApplicationContext 的方法:
在 web.xml 中配置 ContextLoaderListener :
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value >
/WEB-INF/beans.xml
</ param-value >
</ context-param >
< listener >
< listener-class > org.springframework.web.util.Log4jConfigListener </ listener-class >
</ listener >
< listener >
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
|
对应的 beans.xml 和前边那个一样, Log4jConfigListener 先不用管,去查看相关文档。
Web 服务启动的时候,我们去看看 ContextLoaderListener 作了什么:
WebApplicationContext = createWebApplicationContext(servletContext, parent);
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
|
同样是保存 WebApplicationContext ,但是 key 是 ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
怎么才能不用 ContextLoaderPlugIn 而只用 ContextLoaderListener ? 下面我修改
org.springframework.web.struts. DelegatingActionProxy 把它修改成
ca.nexcel.books.actions. DelegatingActionProxy 并且修改一下代码:
修改 getWebApplicationContext 方法
Return DelegatingActionUtils.findRequiredWebApplicationContext(actionServlet,
moduleConfig); 换成下边方法
|
|
ServletContext sc = actionServlet.getServletContext();
WebApplicationContext wac = null;
wac = WebApplicationContextUtils.getWebApplicationContext(sc);
return wac;
|
并且在 struts-config.xml 中将 action 的 type 指向自己的
ca.nexcel.books.actions. DelegatingActionProxy , PlugIn 删除 web.xml 加上刚才提到的 Listener ,启动 tomcat 运行一切正常。
五、我把 northland 的配置文件贴出来。
Struts-config.xml :
< action-mappings >
< action
path = "/list"
input = "/list.jsp"
name = "_list"
scope = "request"
type = "jp.co.nec.hnes.northland.web.struts.FlowAction"
>
< display-name > 一覧画面 </ display-name >
</ action >
< action
path = "/register"
input = "/register.jsp"
name = "_register"
scope = "request"
type = "jp.co.nec.hnes.northland.web.struts.FlowAction"
>
< display-name > 登録画面 </ display-name >
</ action >
|
|
Web.xml:
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value >
classpath:flowConfig.xml,
classpath:viewConfig.xml,
classpath:applicationContext.xml,
classpath:applicationContext-extra.xml
</ param-value >
</ context-param >
< listener >
< listener-class > org.springframework.web.util.Log4jConfigListener </ listener-class >
</ listener >
< listener >
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< servlet >
< servlet-name > ActionServlet </ servlet-name >
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
</ servlet >
|
从中可以看到
其中的 jp.co.nec.hnes.northland.web.struts.FlowAction 和
ca.nexcel.books.actions. DelegatingActionProxy 的功能差不多。
发表评论
-
struts1 vs struts2
2012-06-07 10:55 1035struts1 2001年6月发布str ... -
struts中通过action跳转到外网(框架页面)
2010-04-26 16:26 2274HttpSession session = arg2.getS ... -
struts中利用ExceptionHandler处理异常
2010-02-03 18:14 664在Struts1.X的版本中加入了对异常的处理 ... -
Struts+spring, 多模块Struts配置文件
2010-01-13 10:41 11391. web.xml ... <init-param&g ... -
struts1.2多模块开发
2010-01-13 10:24 1435一、多个配置文件的支持和模块的支持支持多个配置文件,是指你能够 ... -
struts1.2与spring整合手记
2010-01-12 16:51 1036相关文章: spring入门编程问题集锦 ... -
Struts action mapping (controller的inputforward属性)
2010-01-12 16:22 31011. Full action 这可以说是Struts ac ... -
Struts1.2 控制流程----面试时可用
2010-01-12 15:34 1049有的同学问我如何向面 ... -
深入Struts1.1(下)
2010-01-12 15:21 960在Struts 1.1中,除了DynaActionForm以外 ... -
深入Struts1.1(中)
2010-01-12 15:19 733ActionServlet 我们首先来 ... -
深入Struts 1.1(上)
2010-01-12 15:18 876作为基于MVC模式的Web应 ... -
struts1.x执行流程分析
2010-01-12 14:49 1429先来整体的了解一下Struts的工作流程. 在实现一个基于S ... -
一步一步学习 Struts
2009-11-05 16:22 788专栏: 一步一步跟我学Struts2 (17) 如何学习S ... -
Struts2 OGNL
2009-11-05 15:27 1240众所周知,Strut 2的Action类通过属性可以获得所有相 ... -
struts2验证信息重复出现解决方案
2009-10-17 10:33 1239今天遇到一个很蠢的问题,所以写下来给自己留个教训。 ... -
STRUTS2.0影射REST风格地址
2009-10-14 14:40 1037[摘要]: 介绍如何改写Struts2的Restful2Act ... -
strust2标签实践总结
2009-10-06 00:42 14021:输出action中属性值,在jsp页面中显示用:<s ...
相关推荐
spring3、struts2、mybatis和tiles结合的一个简单java web实现(XX学园管理系统),意在这几个框架的结合配置,供初学者学习参考。附件包含完成的代码和数据库脚本。
spring2+hibernate+struts结合总结 对学习spring+hibernate+struts 有很帮助
Struts2+Spring3+MyBatis结合项目 可以用来好好的学习!!
刚开始学Spring,今天做了Struts和Spring结合的例题 Struts和Spring做的快速开发的小例子,另外加上了例题文档做解释,适合初学者学习
本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的...
开发环境说明 IDE:MyEclipse 7 JDK:1.5.0_15 Web容器:Tomcat 6.0.20 由于上传文件尺寸的限制,Lib下的Jar运行...想完整学习Struts2+Spring+iBatis的同仁,可以在这个例子中学习或模仿最基本也是最核心的技术要点。
最近在学习MongoDB,结合一直在用的Struts2,Spring,Maven,搭建了一个框架
struts和spring结合的项目源代码 自己写的代码,共学习讨论使用,,直接在软件中运行
Struts2.0 + Spring + Hibernate + DWR 对于三大框架目前还在学习阶段,做得不好的地方欢迎来mail指正yukiceo@126.com,或http://blog.csdn.net/yukiceo 每天面对大量的知识,时间一长,容易造成某些知识点的生疏...
Struts2+Hibernate+Spring整合开发技术详解19章网上书店完整源码(内附数据库导出文件) 与书上最后一章内容完全对应 可以结合书上教程进行最后一章学习
该资源是自己做的oa项目,利用java struts2 spring hibernate 三大框架爱相结合的一个项目,希望有需要的朋友可以提供要改进的地方和值得学习的地方
spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 Compass将lucene、Spring、Hibernate三者结合
最近帮一个师弟写的一个简单系统,虽小,但是想学习三大框架集成的可以下载来看看
struts2 学习参考文档,spring 结合学习参考文档,希望对大家都有帮助
本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个...
《Struts 2实战》结合实例介绍了Struts 2框架,主要内容包括Action、Result、Interceptor等框架组件,基于注解的配置选项等新特征,Struts 2插件 FreeMarker,如何从Struts 1和WebWork 2迁移到Struts 2,Ajax标签、...
本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个模块...
Struts2+Spring+ibatis实现怎删改查以及分页的功能。本文档将项目的配置文件、源代码等全部实现。方便初学者学习ssi三大框架的整合,以及一个相对复杂的难题——与ssi框架结合的分页。该文档十分详细,按照代码结构...
Struts2是struts1与webwork结合的产物,与struts1有很大差别,虽然目前struts2在开发领域中的份额逐年下降,但是作为一款经典的MVC框架,其核心思想还是很有必要去研究学习的,通过本套Java视频教程的学习,在将来...