DelegatingActionProxy
使用 DelegatingActionProxy
使用 DelegatingRequestProcesso 非常简单方便,但有一个缺点:RequestProcessor 是Struts 的一个扩展点,也许应用程序本身就需要扩展RequestProcessor ,而DelegatingRequest Processor 已经使用了这个扩展点。
为了重新利用 Struts 的 RequestProcessor 这个扩展点,有以下两个方法:使应用程序的 RequestProcessor 不再继承 Struts 的 RequestProcessor ,改为继承DelegatingRequestProcessor 。
使用 DelegatingActionProxy。
前者常常有一些未知的风险,而后者是 Spring 推荐的整合策略。使用 DelegatingActionProxy 与DelegatingRequestProcessor 的目的只有一个,都是将请求转发给 Spring管理的 bean。
DelegatingRequestProcessor 可直接替换了原有的 RequestProcessor,并在请求转发给action 之前,转发给 Spring 管理的 bean; 而 DelegatingActionProxy 则被配置成 Struts 的action,即所有的请求先被 ActionServlet拦截,然后将请求转发到对应的 action,而 action的实现类全都是 DelegatingActionProxy; 最后由 DelegatingActionProxy 将请求转发给Spring 容器的 bean。
可以看出:使用 DelegatingActionProxy 比使用 DelegatingRequestProcessor 要晚一步转发到 Spring 的 contexto 但通过这种方式可以避免占用扩展点。与使用 DelegatingRequestProcessor 对比,使用 DelegatingActionProxy 仅需要去掉controller 配置元素,并将所有的 action 实现类改为 DelegatingActionProxy 即可。其详细的配置文件如:
<!--XML 文件版本,编码集--> |
DelegatingActionProxy 接受 ActionServlet 转发过来的请求,然后转发给ApplicationContext管理的bean,这是典型的链式处理。
通过配置文件可看出,在struts-config.xml文件中配置了大量DelegatingActionProxy实例, Spring 容器中也配置了同名的Action。即 Struts 的业务控制器分成了两个部分:
第一个部分是Spring 的 DelegatingActionProxy,这个部分没有实际意义,仅仅完成转发:
第二个部分是用户的Action实现类,负责实际的处理工作。
这种策略的性能比前一种的策略要差一些,因为需要多创建一个DelegatingActionProxy实例。而且在J2EE应用中的Action非常多,这将导致需要大量创建DelegatingActionProxy实例,在使用一次之后,要等待垃圾回收机制回收,从而降低了其性能。
DelegatingActionProxy 的执行效果如图7.6所示。
|
| 图 7.6 DelegatingActionProxy 整合策略登录成功的效果 |
DelegatingActionProxy的更多相关文章
- org.springframework.web.struts.DelegatingActionProxy
之前也不知道用的是哪个版本的spring jar 包,后来换了之后发现问题出来了, 00:08:00,364 ERROR RequestProcessor:296 - No action instan ...
- SSH加载顺序问题
http://bbs.csdn.net/topics/390299835 个人总结 1.项目启动首先加载WEB.xml文件 wen.xml文件中有 <!-- tomcat默认生成的地方是 ...
- struts1
1.简单应用示例 导入struts1的jar包,然后配置xml,写java和jsp /struts/WebRoot/Login.jsp <%@ page language="java& ...
- Hibernate总结
SSH原理总结 Hibernate工作原理及为什么要用: 原理: hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改 ...
- struts1老古董配置
<!--Struts1 struts-config.xml Demo --><?xml version="1.0" encoding="UTF-8&qu ...
- Struts+Spring+Hibernate整合入门详解
Java 5.0 Struts 2.0.9 Spring 2.0.6 Hibernate 3.2.4 作者: Liu Liu 转载请注明出处 基本概念和典型实用例子. 一.基本概念 St ...
- Spring学习笔记之整合struts
1.现有项目是通过 <action path="/aaaaAction" type="org.springframework.w ...
- Cannot retrieve definition for form bean null on action错误
Cannot retrieve definition for form bean null on action错误 1. 如果jsp页面中要用到<html:form action="& ...
- C3P0数据库连接池的相关bug解决
数据库连接池的几个常见bug: 1.警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76c7022e -- ...
随机推荐
- 团队作业-Beta冲刺第一天
这个作业属于哪个课程 <https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1> 这个作业要求在哪里 <https ...
- flume启动报错
执行flume-ng agent -c conf -f conf/load_balancer_server.conf -n a1 -Dflume.root.logger=DEBUG,console , ...
- HibernateDaoSupport类的底层中hql操作使用
spring的ApplicationContex.xml 中配置 sql 查询方法: 加载数据源的两种方式: <!--方式一:使用 c3p0 连接池 加载数据源 --> <bean ...
- java常考小程序
private static void nineNineMulitTable(){ /** * 9*9乘法表 */ for (int i = 1,j = 1; j <= 9; i++) { Sy ...
- 使用xcode workspace 多个project协同工作
一般的某个应用单独新建一个 project 就可以了,然后把所有的程序文件都放在里面,这个可以满足大部分普通的需求,但是有时候,项目有可能要使用其他的项目文件,或者引入其他的静态库文件,这个时候 wo ...
- ios之UITabelViewCell的自定义(xib实现2)
上篇文章介绍了如何用UITableView显示表格,并讲了几种UITableViewCell的风格.不过有时候我们需要自己定义 UITableViewCell的风格,其实就是向行中添加子视图.添加子视 ...
- 同时使用多个UITableView
1.xib\storyboard中给2个tableView设置constraints(等宽) 方法 : ①设置mainTableView的上\下\左\三部分的约束为0:subTableView上\下\ ...
- tkinter学习-事件绑定与窗口
阅读目录: 事件绑定 Toplevel组件 标准对话框 事件绑定: 说明:对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上. 事件序列: 说明:用户需要使用bind()方法将具 ...
- ps命令查看子进程
[root@centos7 log]# ps -f -e -o pid,ppid,pgid,comm PID PPID PGID COMMAND 5070 5068 5070 bash 7169 50 ...
- 【php】 php-fpm 配置见解
来源:php官方文档 Init script setup=== You will probably want to create an init script for your new php-fpm ...