- 浏览: 915071 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1061struts1 2001年6月发布str ... -
struts中通过action跳转到外网(框架页面)
2010-04-26 16:26 2302HttpSession session = arg2.getS ... -
struts中利用ExceptionHandler处理异常
2010-02-03 18:14 697在Struts1.X的版本中加入了对异常的处理 ... -
Struts+spring, 多模块Struts配置文件
2010-01-13 10:41 11721. web.xml ... <init-param&g ... -
struts1.2多模块开发
2010-01-13 10:24 1466一、多个配置文件的支持和模块的支持支持多个配置文件,是指你能够 ... -
struts1.2与spring整合手记
2010-01-12 16:51 1057相关文章: spring入门编程问题集锦 ... -
Struts action mapping (controller的inputforward属性)
2010-01-12 16:22 31301. Full action 这可以说是Struts ac ... -
Struts1.2 控制流程----面试时可用
2010-01-12 15:34 1081有的同学问我如何向面 ... -
深入Struts1.1(下)
2010-01-12 15:21 988在Struts 1.1中,除了DynaActionForm以外 ... -
深入Struts1.1(中)
2010-01-12 15:19 755ActionServlet 我们首先来 ... -
深入Struts 1.1(上)
2010-01-12 15:18 908作为基于MVC模式的Web应 ... -
struts1.x执行流程分析
2010-01-12 14:49 1456先来整体的了解一下Struts的工作流程. 在实现一个基于S ... -
一步一步学习 Struts
2009-11-05 16:22 814专栏: 一步一步跟我学Struts2 (17) 如何学习S ... -
Struts2 OGNL
2009-11-05 15:27 1261众所周知,Strut 2的Action类通过属性可以获得所有相 ... -
struts2验证信息重复出现解决方案
2009-10-17 10:33 1271今天遇到一个很蠢的问题,所以写下来给自己留个教训。 ... -
STRUTS2.0影射REST风格地址
2009-10-14 14:40 1060[摘要]: 介绍如何改写Struts2的Restful2Act ... -
strust2标签实践总结
2009-10-06 00:42 14381:输出action中属性值,在jsp页面中显示用:<s ...
相关推荐
总结起来,"spring3、struts2、mybatis结合的一个简单web实现"项目展示了如何将这些框架集成到一起,以构建一个完整的Java Web应用。Struts2处理请求,Spring管理业务逻辑和依赖,MyBatis处理数据持久化,而Tiles则...
Struts的拦截器(Interceptor)可以与Spring结合,实现更复杂的业务逻辑。iBatis则通过SqlSessionFactory和SqlSession对象,根据配置的XML映射文件执行SQL,返回数据供业务层使用。 总的来说,Spring Struts iBatis...
Java EE是企业级应用开发的重要框架,而"精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码"的资源提供了丰富的实践学习材料,旨在帮助开发者深入了解和掌握Java后端开发技术。这个项目案例涵盖了四...
Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,而Struts2则以其优秀的MVC设计模式著称,两者结合可以构建出高效、可维护的Web应用。本文将基于"spring+struts2整合源码"的标题和描述,详细讲解Spring和...
Struts与Spring的结合可以提供更强大的控制流管理和业务逻辑处理。 4. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它将Java对象与数据库表之间的映射自动化,从而简化了数据库操作。Hibernate通过...
本文将深入探讨Spring与Struts结合时可能会遇到的问题以及相应的解决策略,帮助开发者更好地理解和应对这些挑战。 Spring框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...
在 Spring 和 Struts2 结合使用时,通常会使用 Struts2 作为前端控制器,负责接收和处理 HTTP 请求,然后通过 Spring 的 DI 功能来管理和调度业务逻辑层的对象。Spring 可以作为服务层的容器,管理 DAO(数据访问...
这个名为"spring_struts2_myBatis.zip"的压缩包提供了一个整合这三个框架的小型应用示例,为开发者提供了学习和实践的机会。 首先,Spring框架作为Java企业级应用的核心组件,它以依赖注入(DI)和面向切面编程...
这个整合工程提供了一个完整的流程,帮助开发者了解如何以XML配置方式将这三个组件结合在一起,同时配合博客的图文教程,使得学习过程更为直观易懂。 首先,Struts是Apache的一个开源项目,它是一个基于MVC(Model-...
同时,Spring4的Spring MVC模块可以与Struts2结合使用,提供另一种MVC实现方式,以应对更复杂的应用场景。 Hibernate则是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在电子商务系统...
在"Spring + Struts +Hibernate简单学习源码"中,我们可以看到一个综合性的Java Web项目,它利用这三个框架构建了一个功能完整的应用。以下是对这个项目中涉及的知识点的详细解释: 1. **Spring框架**: - **依赖...
Struts2可以与CXF结合,通过Action跳转到不同的服务接口,从而提供动态的服务调用能力。 【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。...
本资源以Eclipse作为集成开发环境,结合Spring、Struts和Hibernate这三个核心框架,构建了一个完整的Java Web项目案例。下面将对这些知识点进行详细的阐述。 1. **Java EE**:全称为Java Platform, Enterprise ...
在"Spring与Struts 2整合.zip"这个压缩包中,可能包含了一系列的配置文件、源代码和示例项目,帮助开发者了解和学习如何将这两个框架有效地结合在一起。通过学习和实践这些材料,开发者可以掌握在实际项目中整合...
在提供的"spring+struts集成学习笔记和项目源码"中,你将有机会深入理解这些概念,通过实际操作来学习如何将Spring的优秀特性与Struts的高效处理机制结合起来,构建出高效稳定的Web应用。源码分析和实践操作是加深...
在"spring_struts_2"这个项目中,开发者可能已经实现了上述的整合过程,创建了示例应用,展示了如何在实际开发中结合使用Spring和Struts。通过学习和研究这个项目,你可以更深入地理解这两者之间的协同工作方式,...
Struts和Spring是两个在Java Web开发中广泛使用的开源框架,它们各自有着独特的优势,并且可以协同工作,提高开发效率和应用的可维护性。在这个登陆教程中,我们将深入探讨这两个框架如何结合来实现一个简单的用户...
6. **整合应用**:将Spring、Struts和Hibernate结合使用,可以构建出强大的企业级应用。Spring作为容器管理组件,可以协调Struts的视图和控制层,以及Hibernate的数据持久化层。这种组合被称为“SSH”架构,是Java ...
Spring 和 Struts2 是两种非常重要的 Java Web 开发框架,它们在企业级应用开发中有着广泛的应用。Spring 主要是依赖注入(DI)和面向切面编程(AOP)的实现,而 Struts2 是一个基于 Model-View-Controller(MVC)...
《Spring、Struts和Hibernate API详解》 在Java Web开发领域,Spring、Struts和Hibernate是三大主流框架,它们各自负责不同的职责,共同构建出高效、灵活的企业级应用。本资料集包含了这三大框架的API文档,以CHM...