Struts2中Action由自己与由Spring管理的区别
struts2单独使用时action由struts2自己负责创建;与spring集成时,action实例由spring负责创建。这导致在两种情况下struts.xml配置文件的略微差异。假如:LoginAction在包cn.edu.jlu.cs.action中。1. struts2单独使用时,action的class属性为LoginAction的全路径名,如下:...<action name="login" class="cn.edu.jlu.cs.action.LoginAction"><result name="studentSuccess">/student/studentindex.jsp</result>...2. struts2与spring集成时,class属性是spring的applicationContext.xml中配置的bean的id属性值。---------------------------------------------------------------------------------------//struts.xml...<action name="login" class="LoginAction"><result name="studentSuccess">/student/studentindex.jsp</result>...----------------------------------------------------------------------------------------//applicationContext.xml...<bean id="LoginAction" class="cn.edu.jlu.cs.action.LoginAction" />...----------------------------------------------------------------------------------------struts2-spring-plugin-2.1.6.jar这个插件在产生action的时候,会自动的按照名字把action的属性注入进去,即使不在spring配置文件中为相关的action(bean)注入属性或者在action类中用注解注入,它也会按照action类中属性的名字从当前容器(??Spring)中找有没有这个名字的bean并注入进来,或者显示的给定一个名字注入。所以action的id(spring配置文件中的)不要和它类里边的变量名相同如果在struts.xml文件中配置action的class是指向action的实际类,那么action的产生由struts控制,此时action类中的相关变量会按照名称从容器中注入一个相应的bean,如果找不到对应名称的bean,一旦调用这个action就会出错。但是如果此时为变量加上一个@Resource注解,struts容器产生过action后就会从Spring容器中找相应的bean注入。如果class指向的是一个伪控制器(对应spring配置文件中action的bean),那么action的产生由spring控制。此时action类中的相关变量··必须··用注解@Resource或者xml的方式自定义注入相应的bean,不象之前会按照名字从spring容器中自动查找注入bean,否则程序运行出错。 更贴切点说应该是有struts-spring的插件来控制和spring容器控制,有插件来控制,则Action的实例由插件来产生,而启动spring容器的自动装配功能,将所需要的业务组件自动装配到Action实例中。该策略中,spring只负责管理依赖关系。优点:配置简单。缺点:1、Action与业务组件耦合度降到了代码层次,要求Action中的属性名要和配置文件中业务组件的id保持一致,耦合度高。2、由spring自动装配,依赖关系不明了,可读性差。 第二种,由spring容器控制,Action配看做一个普通的bean实例,需改变scope的默认值。struts.xml中Action的class属性对应spring容器中一个Action实例的id。优点:实现了高度的解耦。缺点:1、配置文件冗余、臃肿。不仅需要在struts.xml中配置Action的信息还需要在spring的配置文件中配置个Action的信息Struts2中Action由自己与由Spring管理的区别的更多相关文章
- Struts2中Action取得表单数据的几种方法
Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
- struts2中Action到底是什么,怎么理解
struts2中Action到底是什么,怎么理解 1.配置完web.xml2.创建视图页面login.jsp3.创建业务控制器LoginAction类(解释说:创建业务控制器LoginAction类, ...
- jap页面获取struts2中action中变量的值
在jsp页面中可以通过ONGL表达式获取struts2中action处理后的变量的值,这是因为每一个action在初始化后都会放到strackcontext中,可以通过ONGL表达式取到值. 注意要在 ...
- Struts2中Action接收参数的方法
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...
- Struts2中Action接收参数的方法主要有以下三种:
Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式): a.定义:在Action类中定义属性,创建get和set方法: b.接 ...
- 基于用户登陆的struts2中action的分类详解
在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...
- Struts2中Action自己主动接收參数
Struts2中Action接收參数的方法主要有下面三种: 1.使用Action的属性接收參数:(通过属性驱动式) a.定义:在Action类中定义属性,创建get和set方法. b. ...
- Struts2中Action接收参数
Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数: a.定义:在Action类中定义属 ...
随机推荐
- C#的IPAddress IPEndPoint
以前觉得什么都能记住 翻一遍书就能去考试了,现在回过头来想一些东西,突然有种模糊的陌生感,应了那句好记性不如烂笔头.做笔记终归是利大于弊的.麻烦一点但是却受用. 突然想从头开始,看一些过去的书,补一些 ...
- C# 调用cmd命令行路径中带空格问题
今天打包winform程序,程序中本身有一处需要调用cmd.exe,打包安装在C:\Program Files目录下,然后调用cmd的地方,就弹出了C:\Program不是内部或外部命令,也不是可运行 ...
- 命令行模式 svn版本管理
linux 下svn 在命令行模式下的操作安装完svn服务并配置了环境变量之后,要创建一个存放工厂(项目)的仓库repositories用于版本控制(比如我的repositories的路径为 path ...
- 嵌入式linux应用程序移植方法总结
嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...
- Shell脚本检测文件夹是否已被挂载的方法
方法1: if grep -qs '/mnt/foo' /proc/mounts; then echo "It's mounted." else echo "It's n ...
- 新冲刺Sprint3(第五天)
一.Sprint介绍 实现商品.服务信息存入数据库,实现商品图片传输(服务器传输),点击商品.服务进入商品.商品详情.商品.服务按此标准建立数据库. 二.Sprint周期 看板: 燃尽图:
- 2016年中国大学生程序设计竞赛(合肥)-重现赛1001 HDU 5961
传递 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- jade转化为html
网址:http://www.html2jade.org/ 刚到一家新的公司 ,上一个前段PHP写的代码基本都是jade写的,看的一脸懵逼,第一次遇到jade代码,并且我一直用的是atom开发工具,安装 ...
- template 不能分别在.h和.cpp中定义模板
先上代码: #ifndef SEQLIST_H #define SEQLIST_H #include <iostream> ; template <typename type> ...
- Ionic2学习笔记
Component nav: <ion-nav [root] = 'rootComponent'></ion-nav> ....import {Nav} from 'ionic ...