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类中定义属 ...
随机推荐
- php组合
为了提高代码的复用性,降低代码的耦合(组合实现的两种方式) 模式一: <?php //组合模式一 class Person{ public function eat(){ echo " ...
- Xcode6中如何去掉默认的Main.storyboard
xcode 6取消了 Empty Application 模板来创建一个工程,创建出来的有工程多了Main.storyboard,默认加载Main.storyboard,但是有很多人还想用代码来实现U ...
- @html.ActionLink的几种参数格式
一 Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法, ...
- day04关于MySqL—Android小白的学习笔记
Mysql入门 1. 数据库基本知识(了解) 1.1.数据库介绍 1.1.1.什么是数据库?数据库的作用是什么? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户 ...
- xss跨站脚本测试
测试的时候会涉及到xss测试,下面简要整理下xss的知识 xss跨站脚本特点就是能注入恶意的HTML/JS代码到用户浏览器,劫持用户会话 常用alert来验证网站存在漏洞 如果确认存在漏洞,会随着注入 ...
- mysql 数据库迁移
公司的视频转码服务 使用mysql作为 任务队列, 其中mysql 是我们自己维护的 单例. 后来应业务部门建议,我们计划将现有的mysql 向dba进行迁移,以下记录一下 数据库迁移过程中的东西. ...
- SOAP Webservice和RESTful Webservice
http://blog.sina.com.cn/s/blog_493a845501012566.html REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的 ...
- Python 爬虫 字符集乱码问题
解决办法: http://worldant.blog.sohu.com/251745784.html 爬虫爬下来的源代码和网页的源代码不一样,可以先把爬下来的代码输出或保存在文件中,然后再写正则匹配表 ...
- CLR via C# 3rd - 07 - Constants and Fields
1. Constants A constant is a symbol that has a never-changing value. When defining a constant ...
- javascript获取浏览器窗口大小
var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var h= ...