Spring实例Action的两种方式:

1、DelegatingActionProxy类整个Action由Spring实例
2、DelegatingRequestProcessor类extends RequestProcessor重写processActionCreate方法,由Spring创建

web.xml
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

SSH整合第一式:缺点:麻烦一个方法对应一个<bean>如何实现整合的:
重写了Action类的execute方法,使用Spring容器来实例bean,查找bean的名字是<action path="">的值
①struts-config.xml
<action ……
      path="/doSave"
      type="org.springframework.web.struts.DelegatingActionProxy">
</action>
②applicationContext.xml
<bean name="/doSave" class="com.yourcompany.struts.action.UserinfoAction">
      <property name="manager" ref="userInfoManager"></property>
</bean>
注解:name="/doSave" 取得时<action path="/doSave" />

SSH整合第二式:第一式的延伸,使用MyDelegatingActionProxy类继承DelegatingActionProxy和DispatchAction类
缺点:实现起来太繁琐;优点:一个Action类对应一个<bean>
①struts-config.xml
<action ……
      type="com.yourcompany.struts.action.UserinfoAction">
</action>
②applicationContext.xml
<bean name="com.yourcompany.struts.action.UserinfoAction" class="com.yourcompany.struts.action.UserinfoAction">
      <property name="manager" ref="userInfoManager"></property>
</bean>
③Action extends MyDelegatingActionProxy
注解:
1、如果不继承DispatchAction类的话就会产生死循环调用execute方法的问题。
DelegatingActionProxy类的作用:改变Action类的创建方式,改成由Spring容器创建的
DispatchAction类的作用:把execute方法分解成多个普通方法执行
2、屏蔽死循环问题必须在MyDelegatingActionProxy类重写execute方法一下是此类的关键代码:
public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  Action delegateAction = getDelegateAction(mapping);
  String parameter = getParameter(mapping, form, request, response);
  String name = getMethodName(mapping, form, request, response, parameter);
  return dispatchMethod(mapping, form, request, response, name,
    delegateAction);
 }

SSH整合第三式:使用DelegatingRequestProcessor类
缺点:一个方法一个<bean>
①struts-config.xml
<action ……
      type="com.yourcompany.struts.action.UserinfoAction">
</action>
<controller>
  <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>
②applicationContext.xml
<bean name="/doSave" class="com.yourcompany.struts.action.UserinfoAction">
      <property name="manager" ref="userInfoManager"></property>
</bean>
注解:name="/doSave" 取得时<action path="/doSave" />

SSH整合第四式:自定义MyDelegatingRequestProcessor类extends DelegatingRequestProcessor,重写determineActionBeanName方法,return mapping.getType();
优点:一个Action对应一个<bean>,[推荐,常用]
①struts-config.xml
<action ……
      type="com.yourcompany.struts.action.UserinfoAction">
</action>
<controller>
  <set-property property="processorClass" value="MyDelegatingRequestProcessor类路径"/>
</controller>
②applicationContext.xml
<bean name="com.yourcompany.struts.action.UserinfoAction" class="com.yourcompany.struts.action.UserinfoAction">
      <property name="manager" ref="userInfoManager"></property>
</bean>

SSH整合第五式:继承ActionSupport、DispatchActionSupport、MappingDispatchActionSupport
①struts-config.xml
<action ……
      type="com.yourcompany.struts.action.UserinfoAction">
</action>
②applicationContext.xml
<bean name="com.yourcompany.struts.action.UserinfoAction" class="com.yourcompany.struts.action.UserinfoAction" />
<bean id="userinfoManager" class="com.yourcompany.struts.action.UserinfoAction" />
注解:UserInfoAction extends MappingDispatchActionSupport实现onInit方法
manager=(IUserInfoManager) getWebApplicationContext().getBean("userInfoManager");
不需要set方法

问1:这段代码在什么时候执行,起什么作用?
<controller>
    <set-property property="processorClass" value="org.springframework.web.struts.DelegatingActionProxy"/>
</controller>
答:在ActionServlet类的process方法中
RequestProcessor processor = getProcessorForModule(config);读取返回一个RequestProcessor对象,如果没有配置的话就会采取默认的,也就是Struts的核心类RequestProcessor

问2:ContextLoaderPlugIn类的作用,如何使用?
答:在struts-config.xml中配置
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLication" value="/WEB-INF/classes/applicationContext.xml"/>
  </plug-in>
相当于再web.xml中配置
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath*:applicationContext.xml</param-value>
</context-param>
道理是相同的。
一般是配置在web.xml中。

转载于:https://blog.51cto.com/unknown/999223

Spring整合Struts的几种最常见方式相关推荐

  1. spring 整合struts

    1.例子:未被spring整合 struts.xml 的配置文件 <constant name="struts.enable.DynamicMethodInvocation" ...

  2. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  3. Spring整合Struts2的两种方式

    https://blog.csdn.net/cuiyaoqiang/article/details/51887594 转载于:https://www.cnblogs.com/pegasus827/p/ ...

  4. spring配置详解-三种对象创建方式_

    新建一个包,b_create,关于Spring创建对象的方式,咱们首先先介绍默认方式,我复制一个配置文件过来,在这个包下创建一个配置文件,把这些注释可以删掉了,现在咱们看到的情况,是常见的情况,这种情 ...

  5. 用Spring更好地处理Struts动作三种整合

    http://java.chinaitlab.com/Spring/525537_2.html 为什么 Spring 这么了不起? Spring 的创立者 Rod Johnson 以一种批判的眼光看待 ...

  6. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。...

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

  7. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ

    什么是RabbitMQ 1.1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. ⚫ MQ,消息队列,存储消息的中间件 ⚫ ...

  8. JMS--ActiveMq与spring整合(二)

    原文地址:http://blog.csdn.net/haoxingfeng/article/details/9167895 在我们和Spring 整合的时候,对于消费者而言我们有三种不同类型的监听器可 ...

  9. Spring中IoC两种接口和两种依赖注入方式的比较

    spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...

最新文章

  1. 一种注册表沙箱的思路、实现——注册表的一些基础知识
  2. 前端的面试之旅(一)
  3. cpu和显卡瓶颈测试软件,《怪物猎人:世界》CPU测试:4核成瓶颈、6核才够用
  4. 关于jupyter几个不得不知道的tips
  5. python人脸识别程序如何嵌入到app_只用Python就能写安卓,简单几步实现人脸识别的App...
  6. arma matlab函数,MATLAB中ARMA模型预测差分问题
  7. 《流畅的Python》读书笔记——Python函数装饰器和闭包
  8. python爬虫+谷歌翻译json字符串
  9. 熟悉matlab工作环境实验报告,MATLAB上机实验实验报告
  10. 双线macd指标参数最佳设置_经典实用的双线MACD指标
  11. 用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度
  12. 小白的 Python学习笔记 之 input()
  13. mysql8安装成功后忘记密码,密码重置
  14. 虚拟服务器伪静态怎么设置,虚拟主机如何设置伪静态
  15. 电脑网络重置后如何连接网络
  16. C#FFmpeg视频采集与推送RTMP服务器代码思路整理
  17. python 计时_python运行计时
  18. Eplan P8 窗口宏/符号宏、页宏、宏值集的创建与插入 <四>
  19. STC8学习--看门狗
  20. 查看QQ是否隐身,轻而易举。 - [工具+源码]

热门文章

  1. C#Dictionary源码
  2. cookie、 sessionStorage 、localStorage之间的区别和使用
  3. Nginx反向代理实现HTTPS网站
  4. 学习笔记--Spark
  5. PHP框架CodeIgniter之连接MS Sqlserver2014及URL Rewrite问题解决
  6. Http协议 详解(转载)
  7. C#量转换为汉字表达
  8. 添加三维动画 demo
  9. cocos2dx 2.2.5 hitWidget-onTouchEnded(pTouch, pEvent); 异常
  10. 精致3D图片切换效果,最适合企业产品展示