spring+struts四种整合
来源:互联网 发布:淘宝买耐克真货退假货 编辑:程序博客网 时间:2024/05/17 02:39
第一种方式getter和setter
1、在struts中添加
<!--代理类-->
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
<message-resources parameter="com.liuchangjiong.struts.ApplicationResources" />
<!-- 必须放在message的下面 添加插件-->
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>
2、applicationContext.xml中
<bean name="/register" class="com.liuchangjiong.struts.action.RegisterAction">
<property name="message">
<value>Spring Struts</value>
</property>
</bean>
注意代码中的粗斜体部分,这个name 的取值一定要和Struts 配置文件action 中的path 的
值相对应,否则整合就会失败:
<action path="/userLogin" ......
。既然现在这个Action 类处于Spring 的配置和管理之下,自然就可以注入任意的属性,包
括message,以及以后可以加入的Service 层对象了,也就是说你现在可以完全把它看作
一个普通的JavaBean 来处理就行了,想加入AOP 什么的都可以。在这里为了测试方便,
我们把message 属性注入一个”Spring Struts”的值。
3、不需要在web.xml中注入
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
4、在Action中添加getter和setter
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
并且使用访问
System.out.println(getMessage());
第二种方式:
方式二:使用ContextLoaderPlugIn,替换Struts Action 的类型并在Spring 中配置对
应的类型。
1、这种方式下的Action类的源码和上面11.7.1 给Action类加入message属性一节所介绍
的是一样的
2、Spring的配置文件也和11.7.3 在Spring配置文件中加入Action的bean定义一
节所介绍的内容一样。
3、不需要在web.xml中注入
4、唯一不同的是Struts 的配置文件, 注意看下面的配置文件
struts-config.xml源码:
****
去掉
<controller
processorClass="org.springframework.web.struts.DelegatingRequestProcessor"
/>
但是要将action中的type="org.springframework.web.struts.DelegatingActionProxy"
经测试成功
第一个不同点,就是Action 类的type 从原来的
com.yourcompany.struts.action.UserLoginAction 变成了现在的由Spring 所提供的代理类
org.springframework.web.struts.DelegatingActionProxy,这个类也是Struts Action 类的一
个子类,只不过它的幕后工作就是从Spring 配置文件中查找定义的name 为/userLogin 的
bean 定义来作为真正的Action 对象,然后委托给它来处理剩下的业务逻辑。
第二个不同点,
就是删除了下面这句配置语句:<controller processorClass="
org.springframework.web.struts.DelegatingRequestProcessor" />。那么这种方式总体上来
说代码改动量也不太大,实际开发中可以采用。
第三种方法(开发中不提倡)
使用Spring 提供的ActionSupport 类。这种方式,因为Action 类的代码要做
大量修改,已经违背了Spring 提倡的无侵入这个理念,而且的确出现代码改动量太多的这
个问题,因此在实际开发中不提倡使用这种方式。
3、不需要在web.xml中注入
4、struts.xml中发生变化
恢复type为type="com.yourcompany.struts.action.UserLoginActionSupport"
而且插件为
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>
相比较起没加入 Spring 之前的Struts 的配置文件,其不同之处就如代码中粗斜体部分
所示,加入了一个插件配置。那么在这种方式下,不需要在Spring 的配置文件中加入Action
类的bean 定义,相对比的,您需要首先继承自ActionSupport 类,然后通过在Action 类中
写代码来自己查找Bean 类:
--------------上面的说法是不需要在Spring 的配置文件中加入Action类的bean 定义
/** 基于 Spring ActionSupport 的登录类。*/
public class UserLoginActionSupport extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//*********
ApplicationContext ctx = this.getWebApplicationContext();
StudentManager studentManager = (StudentManager) ctx
.getBean("studentManager");
System.out.println("登录检查="
+ studentManager.checkLogin("spring hibernate 标注事务测试", "密码
"));
//*********
// 更多业务代码
return mapping.findForward("success");
}
--------------继承ActionSupport 类
代码中的粗斜体部分就是新增的内容,主要就是获得Spring 的核心容器类:
ApplicationContext(可以认为和BeanFactory 这个类工厂是一回事),然后从里面获取定义
好的bean 类,之后调用上面的业务逻辑。其实这种方式和自己亲手写代码创建BeanFactoy
然后加载对象是差不多的,对现有代码的改动也比较大,既有继承,还有额外代码,还得导
入Spring 的包,Spring 文档上说推荐这种做法,我怎么看也看不出这样到底有多少方便的
地方。
提示:如果您需要其它类型的Action,例如DispatchAction 等等,那么需要继承自对
应的Spring 版本的类―― ActionSupport,DispatchActionSupport,
LookupDispatchActionSupport,MappingDispatchActionSupport,只不过是类名后加
了一个Support,这些类位于包org.springframework.web.struts 下面。
第四种
最后, 我们再介绍 Struts1 加载Spring 的另一种方式,修改web.xml 配置加载spring
上下文环境,其配置方式如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
通过listener 加载:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener
-class>
</listener>
或者利用severlet 类在启动时加载:
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-c
lass>
<load-on-startup>1</load-on-startup>
</servlet>
注意:使用这种方式的时候,就不要在 Strurts 的配置文件中写那个 plugin 配置信息
了。
建立类StudentManager 和 它的方法checkLogin
package com.liuchangjiong.struts.action;
public class StudentManager {
public String checkLogin(String string, String string2) {
return string+string2;
}
}
注意在applicationContext.xml中声明,注意是id,与上面都是name
<bean id="studentManager" class="com.liuchangjiong.struts.action.StudentManager">
</bean>
而且该类不用在struts.xml中声明
- spring+struts四种整合
- Spring读书笔记(四)与Struts整合
- Spring读书笔记(四)与Struts整合
- 用maven整合struts+spring+hibernate之四 添加事务管理
- struts整合spring整合hibernate
- Spring 整合 Struts 的两种方式
- Spring整合Struts三种方式
- struts整合Spring(2种方法)
- Struts 和 Spring 整合3种方法
- Struts 和 Spring 整合3种方法
- struts 与spring整合两种方式
- Struts整合Spring三种方式
- Spring整合Struts的三种方法
- 整合 struts spring hibernate
- Spring , Struts整合方法
- 整合Struts 与Spring
- 整合Struts 与Spring
- struts整合spring
- 如何异步调用方法
- Windows Phone开发(35):使用Express Blend绘图
- Mac下显示隐藏文件
- encode decode
- 企业库中 DatabaseFactory.CreateDatabase 方法创建数据库实例的 逻辑过程
- spring+struts四种整合
- 利用XAMPP 在win7环境安装apache, php, mysql
- 如何在搜索结果出来之前,让页面显示“等待中...” _asp.net技巧
- 软件工程总结
- treeset详解(须自己再去看源码)
- c#中Split分割字符串的几种方法
- python生成pdf文件
- ow to install PL/SQL developer on linux
- 在UIAlertView上面添加输入框