Java Web整合开发(14) -- Struts 1.x 概述

整合Spring与Struts1的三种方法总结

无论用那种方法来整合,第一步就是要装载spring的应用环境,有三种方式:

#1. struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" 
  "http://struts.apache.org/dtds/struts-config_1_2.dtd"
><struts-config><plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/></plug-in></struts-config>

spring 的配置文件被作为参数配置进来。这样可以省略对web.xml 文件中的配置。确保你的applicationContext.xml 在WEB-INF目录下面

#2. web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

#3. web.xml(低版本tomcat)

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><servlet><servlet-name>SpringContextServlet</servlet-name><servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class></servlet>
</web-app>

 

1.使用Spring 的 ActionSupport 。

Struts的Action继承Spring的ActionSupport类,这样Struts 1.x就融入Spring框架中了。

Spring 的ActionSupport 继承至 org.apache.struts.action.Action, ActionSupport的子类可以获得 WebApplicationContext类型的全局变量。通过getWebApplicationContext()可以获得这个变量。

public class LoginAction extends org.springframework.web.struts.ActionSupport {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub//获得 WebApplicationContext 对象WebApplicationContext ctx = this.getWebApplicationContext();LoginDao dao = (LoginDao) ctx.getBean("loginDao");if (dao.checkLogin(u)) {return mapping.findForward("success");} else {return mapping.findForward("error");}}
}

applicationContext.xml

<beans><bean id=”loginDao” class=”com.cao.dao.LoginDao”/>
</beans>

这中配置方式同直接在web.xml文件配置差别不大。注意:Action继承自 org.springframework.web.struts.ActionSupport 使得struts和spring耦合在一起。
但实现了表示层和业务逻辑层的解耦(LoginDao dao = (LoginDao) ctx.getBean(“loginDao”))。


2.使用Spring 的 DelegatingRequestProcessor 类。

DelegatingRequestProcessor  继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面的方法。

sturts-config.xml

<struts-config><controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
</struts-config>

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><bean id="loginDao" class="com.cao.dao.LoginDao"/><bean name="/login" class="com.cao.struts.action.LoginAction"><property name="dao"><ref local="loginDao"/></property></bean></beans>

这里name=”/login”与struts中的path匹配class=”com.cao.struts.action.LoginAction”与 struts中的type匹配还要为LoginAction提供必要的setXXX方法。获得ApplicationCotext和依赖注入的工作都在 DelegatingRequestProcessor中完成。


3.全权委托。

Action 的创建和对象的依赖注入全部由IOC容器来完成。使用Spring的DelegatingAcionProxy来帮助实现代理的工作.
org.springframework.web.struts.DelegatingActiongProxy继承于org.apache.struts.action.Action.全权委托的配置方式同 方式 2 类似 (applcationContext.xml文件的配置和 Action类的实现方式相同)。

1) <action>中 type指向的是spring 的代理类

sturts-config.xml

<struts-config><form-beans ><form-bean name="loginForm" type="com.cao.struts.form.LoginForm" /></form-beans><action-mappings ><!– type指向的是spring 的代理类 –><actionattribute="loginForm"input="login.jsp"name="loginForm"path="/login"scope="request"type="org.springframework.web.struts.DelegatingActionProxy" ><forward name="success" path="/ok.jsp" /><forward name="error" path="/error.jsp" /></action></action-mappings><plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/></plug-in>
</struts-config>

2) 去掉struts-config.xml中 <controller >

 

三种整和方式中我们优先选用 全权委托的方式。
理由:
1,第一种使得过多的耦合了Spring和Action .
2,RequestProcessor类已经被代理 如果要再实现自己的实现方式(如:编码处理)怕有点麻烦。

总结一下:
整合工作中的步骤:
1.修改struts-config.xml
2. 配置applicationContext.xml
3.为Action添加get/set方法 来获得依赖注入的功能。

转载于:https://www.cnblogs.com/thlzhf/p/4374652.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WiFi行业将走向何方?

WiFi技术无处不在&#xff0c;人们很难想象&#xff0c;如果离开了无线网络&#xff0c;生活将会变成什么样子。随着配备全新、大流量数据应用软件的智能移动设备日益增加&#xff0c;越来越多的用户不仅用这些设备打电话&#xff0c;还用它们开展其他活动&#xff0c;这无疑大…

layui 数字步进器_图解全新奔驰S级:从“传统豪华”向“数字豪华”转型

全新奔驰S级的全球首发&#xff0c;中国这次也同步进行亮相。而且在全球首发之前的6个小时&#xff0c;就邀请了中国媒体提早进行品鉴。讲真&#xff0c;虽然之前我也不看好新S级&#xff0c;尤其是此前不知道在哪里泄露出来的图片&#xff0c;看着这台车的气场远不及W222来得强…

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

--概述这个项目演示了如何在WPF中使用各种Prism功能的示例。如果您刚刚开始使用Prism&#xff0c;建议您从第一个示例开始&#xff0c;按顺序从列表中开始。每个示例都基于前一个示例的概念。此项目平台框架&#xff1a;.NET Core 3.1Prism版本&#xff1a;8.0.0.1909提示&…

Android之Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originall

1 问题 在页面实现了popupWindows,旋转屏幕的时候提示下面的错误 Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originally added here 很明显,窗口内存泄漏,因为旋转屏幕的时候,依次会调用activity的onPause方法onStop方法onDestr…

地图投影系列介绍(二)----地理坐标系

3、地理坐标系 地球的形状与大小确定之后,还必须确定椭球体与大地水准面的相对关系,这项工作称为椭球定位与定向。与大地水准面符合得最好的一个地球椭球体,称为参考椭球体,是地球形体三级逼近。 说到这里,我们需要对这几个词汇做区分:

同一个工作组无法查看计算机,win7系统在同一个工作组看不到其他电脑的解决方法...

很多小伙伴都遇到过win7系统点击右键保存图片时没有另存为选项该的困惑吧&#xff0c;一些朋友看过网上零散的win7系统点击右键保存图片时没有另存为选项该的处理方法&#xff0c;并没有完完全全明白win7系统点击右键保存图片时没有另存为选项该是如何解决的&#xff0c;今天小…

bootstrap 开源框架demo_5 个接私活必备的 Java 开源项目!

公众号关注 “GitHubDaily”设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01;大家好&#xff0c;我是 Guide 哥&#xff0c;一个三观比主角还正的技术人。今天推荐几个 Java 项目快速开发脚手架&#xff0c;解放双手 ✋ 从现在开始。以下推荐项目都是码云上的优质项目&…

C#隐藏桌面图标和任务栏

最近因为项目需要需要实现桌面图标和任务状态栏的隐藏功能&#xff0c;实现的方式很多&#xff0c;比如修改注册表值&#xff0c;调用windows API函数等。经过一番的查阅&#xff0c;这个功能暂时实现了&#xff0c;或许不是很好的方法&#xff0c;但是我预期的效果达到了&…

Html中如何让超链接a、图片img居中

一.问题来源 修改博客页面时&#xff0c;突然想到 二、解决办法 2.1原来办法 在img和a中加入align"center"&#xff0c;发现不行 2.2百度答案 <div align"center">...</div> 用<p align"center"> 用<td align"center&…

CacheManager - 用 C# 编写的 .NET 的开源缓存抽象层

简介CacheManager 是用 C# 编写的 .NET 的开源缓存抽象层。它支持各种缓存提供程序并实现了许多高级功能CacheManager 是用 C# 编写的 .NET 的开源缓存抽象层。它支持各种缓存提供程序并实现了许多高级功能。CacheManager 包的主要目标是让开发人员的生活更容易处理&#xff0c…

安卓手机如何复制粘贴不重叠_复制的文字粘贴时怎么重叠了 - 卡饭网

PS复制的文字粘贴时怎么重叠了PS复制的文字粘贴时怎么重叠了 在不同的地方复制来的文字,自带的格式很多都没有办法直接在ps里面保持得一模一样的,复制后的文字重叠在一起,是因为行距太小了,在ps里修改一下即可,方法如下: 把文字粘贴后,发现文字重叠: 点击界面上方的"窗口&…

这些Intel Atom处理器千万别升Windows 10创意者更新:不兼容

Windows 10创意者更新已经发布&#xff0c;目前的升级方式包括使用Windows 10易升、官方临时链接和MSDNITELLYOU的直链。不过&#xff0c;微软已经给出警告&#xff0c;Intel Clover Trail家族的处理器暂时不支持Windows 10创意者更新&#xff0c;万勿升级&#xff0c;涉及的型…

Android之解决点击PopupWindow外部不消失并且不穿透事件

1 问题 需要实现PopupWindow内部可以点击,但是外部点击不会消失 2 初步解决办法 设置PopupWindow的mFocusable属性mOutsideTouchable属性,我们知道如果我们不想穿透事件,也就是说,不想出现点击Popuowindow外部的文本框或者按钮生效,我们需要获取Popuowindow的焦点,也就是设置…

地图投影系列介绍(三)----地图投影

4、地图投影 4.1 投影实质 将地球椭球面上的点映射到平面上的方法,称为地图投影。 为什么要进行投影? – 地理坐标为球面坐标,不方便进行距离、方位、面积等参数的量算。 – 地球椭球体为不可展曲面。 – 地图为平…

华中科技大学计算机学院2020直博生名单,华中科技大学各院系2020年博士研究生“申请-考核”制拟录取名单公示...

原标题&#xff1a;华中科技大学各院系2020年博士研究生“申请-考核”制拟录取名单公示根据教育部相关通知要求&#xff0c;结合学校2020年博士“申请-考核”制招生录取工作实际&#xff0c;经各学院研究生招生工作领导小组审核&#xff0c;现陆续发布各院系博士研究生“申请-考…

文档大小超出上传限制怎么办_压缩PDF大小该怎么操作?压缩PDF的软件有哪些?...

压缩PDF大小该怎么操作&#xff1f;工作中使用的任何设备的储存空间都是有限制的&#xff0c;为了能让自己的电脑储存更多的文件&#xff0c;我们可以将多个PDF文件进行压缩再存储。那么我怎么压缩PDF文件呢&#xff1f;下面就小编就来告诉大家压缩PDF文件的好办法。方法一&…

jquery动态改变图片

动态改变图片&#xff1a; var bb 1;var aa4; $("div[page" bb "] dd").eq(aa).children("img").attr("src", "images/zy_033.jpg") <div class"Pc4_con_list1" page"1"> <dl class"P…

2015 Spark 将走向哪里?

在刚刚过去的spark submit上&#xff0c;Matei Zahara简单回顾了下2014年spark的发展&#xff0c;可用一个词来概括那就是"Amazing"!!! 那么2015年&#xff0c;spark 将主要精力放在哪些方面呢&#xff1f; 一个是数据科学&#xff0c;即提供更高级的API接口&#xf…

rocketmq还要eventbus_EventBus源码详解,看这一篇就够了

之前写过一篇关于EventBus的文章&#xff0c;大家的反馈还不错(EventBus3.0使用详解)&#xff0c;如果你还没有使用过EventBus&#xff0c;可以去那篇文章看看。当时刚接触EventBus,对它的理解也仅仅是停留在表面&#xff0c;写那篇文章也是记录下EventBus的一个简单的使用的过…

Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro

1 问题 编译chromium的源代码的时候,在主类的actitivity里面插入了加载webview的代码 编译错误提示如下 library class android.webkit.WebViewClient depends on program class android.net.http.SslError 2 原因 日志看见有SslError,猜测应该是混淆导致,因为我们加的是web…