首先让spring加入到web应用中,在web应用中一般是启动的时候初始化sping容器。我们知道servletContextListener可以做到这一点,该监听器在web应用启动时回调自定义方法--该方法就可以启动web容器。Sping提供了一个ContextLoaderListener该监听器实现了ServletContextListener接口,该类可以作为监听器使用。它在创建使自动查找web-inf下的applicationContext.xml配置文件。;
第一中整合方法:让Spring接管struts的业务控制器(也就是Action),换句话说就是让struts的action纳入spring的管理中。
我们知道Struts2的主要流程:先是请求到达Filter(也就是中央控制器),中央控制器通过解析struts.xml文件获取该请求是到哪一个业务控制器(也就是业务action),再通过反射创建这个业务控制器,我们这种整合就是让action的创建工作不再让struts的中央控制器去创建,而是用spring去创建,struts的中央控制器直接到spring的工厂中取Action即可。下面是具体的实例:
注意:此种方法需要引进spring的插件:struts2-spring-plugin-2.2.1.jar,Spring管理Action时一定要改变Action bean的scope不能将action的bean的scope设置为单例模式,需要改为:prototype 和 request两种。
此方法的缺点:
1,Spring管理Action,必须将每一个需要被管理的Action配置在applicationContext.xml文件中,而Struts的配置文件中也要配置每一个伪Action,配置两边未免冗余。
2,Action的业务逻辑租价接受容器注入,将导致代码的可读性降低。
1,Actin类:
package com.dd.action;
import com.dd.service.StrutsSpringLoginService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class StrutsSpringLogin extends ActionSupport {
private String username;
private String password;
private String tip;
private StrutsSpringLoginService sss;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public StrutsSpringLoginService getSss() {
return sss;
}
public void setSss(StrutsSpringLoginService sss) {
this.sss = sss;
}
public String execute() throws Exception {
if(sss.validateLogin(getUsername(),
getPassword()).equals("success")){
setTip("服务器提示:登录成功");
ActionContext.getContext().getSession().put("username",
getUsername());
return SUCCESS;
}else{
setTip("服务器提示:登录失败");
return ERROR;
}
}
}
2,service类:
package com.dd.service;
public class StrutsSpringLoginService {
public String validateLogin(String username,String password){
if(username.equals("chenchaoyang") ||
password.equals("chenchaoyang")){
return "success";
}else{
return "error";
}
}
}
3,配置文件strut-spring.xml(注:该文件应该用incluce标签包含到struts.xml文件中去)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 配置的package的name不能和主文件struts中的package名称相同 -->
<package name="struts-spring" extends="struts-default">
<!-- 注意该Action的class属性值并不是一个具体的类,而是一个伪类,它表示的是spring配置文件中id为strutsSpringLogin的配置bean
这就是struts2与Spring第一种配置的关键配置点
-->
<action name="strutsSpringLogin" class="strutsSpringLogin">
<result name="success">/strutsSpringLoginSuccess.jsp</result>
<result name="error">/strutsSpringLoginError.jsp</result>
</action>
</package>
</struts>
4,applicationContext.xml配置文件:
<bean id="strutsSpringLogin" class="com.dd.action.StrutsSpringLogin">
<property name="sss" ref="strutsSpringLoginService"></property>
</bean>
<bean id="strutsSpringLoginService"
class="com.dd.service.StrutsSpringLoginService">
</bean>
5,登录页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body><%--struts标签key对应的是国际化资源文件中的key --%>
<s:form action="strutsSpringLogin">
<s:textfield name="username" key="user"></s:textfield>
<s:textfield name="password" key="pass"></s:textfield>
<s:submit key="login"></s:submit>
</s:form>
</body>
</html>
6,登录成功页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
strutsSpring登录成功
<s:property value="tip"/>
</body>
</html>
7,登录失败页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
strutsSpring登录失败
<s:property value="tip"/>
</body>
</html>
二:struts,spring的第二种整合方法:spring的自动装配。
所谓自动装配就是让spring插件自动将业务逻辑组建注入struts2的Action中,而无需使用ref显示指定以来Bean,spring容器会自动检查xml配置文件内容,为主调bean注入依赖bean,自动装配可以减少配置文件的工作量,但会减低依赖关系的透明性和清晰性。通过使用自动装配,可以让spring插件自动将业务逻辑组建注入struts2的action中。
下面是实例:
1,Action类;
package com.dd.action;
import com.dd.service.StrutsSpringAutoWireLoginService;
import com.dd.service.StrutsSpringLoginService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class StrutsSpringAutoWireLogin extends ActionSupport {
private String username;
private String password;
private String tip;
private StrutsSpringAutoWireLoginService sss;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public StrutsSpringAutoWireLoginService getSss() {
return sss;
}
public void setSss(StrutsSpringAutoWireLoginService sss) {
this.sss = sss;
}
public String execute() throws Exception {
if(sss.validateLogin(getUsername(), getPassword()).equals("success")){
setTip("服务器提示:登录成功");
ActionContext.getContext().getSession().put("username", getUsername());
return SUCCESS;
}else{
setTip("服务器提示:登录失败");
return ERROR;
}
}
}
2,service
package com.dd.service;
public class StrutsSpringAutoWireLoginService {
public String validateLogin(String username,String password){
if(username.equals("chenchaoyang") || password.equals("chenchaoyang")){
return "success";
}else{
return "error";
}
}
}
3,struts的配置文件
<!-- 配置的package的name不能和主文件struts中的package名称相同 -->
<package name="struts-spring" extends="struts-default">
<!-- 注意该Action的class属性值并不是一个具体的类,而是一个伪类,它表示的是spring配置文件中id为strutsSpringLogin的配置bean
这就是struts2与Spring第一种配置的关键配置点
-->
<action name="strutsSpringLogin" class="strutsSpringLogin">
<result name="success">/strutsSpringLoginSuccess.jsp</result>
<result name="error">/strutsSpringLoginError.jsp</result>
</action>
<!-- 下面的Action是采用自动装配的struts和spring整合,注意自动装配的方式配置action的class是真实的类,而不是伪类,切这个action依旧是spring来创建的。 -->
<action name="strutsSpringAutoWireLogin" class="com.dd.action.StrutsSpringAutoWireLogin">
<result name="success">/strutsSpringAutoWireLoginSuccess.jsp</result>
</action>
</package>
4,spring的配置文件
<!-- 注意下面的这个bean是采用自动装配至action中的配置方式。它的id必须是action中的属性的名字 -->
<bean id="sss" class="com.dd.service.StrutsSpringAutoWireLoginService"></bean>
5,用户入口页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body><%--struts标签key对应的是国际化资源文件中的key --%>
这个实例是:struts spring已自动装配的方式整合
<s:form action="strutsSpringAutoWireLogin">
<s:textfield name="username" key="user"></s:textfield>
<s:textfield name="password" key="pass"></s:textfield>
<s:submit key="login"></s:submit>
</s:form>
</body>
</html>
6,登录成功页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
strutsSpring自动装配登录成功
<s:property value="tip"/>
</body>
</html>
分享到:
相关推荐
在实际整合过程中,通常会使用Spring的`struts-plugin.xml`配置文件将Struts2与Spring集成,实现Action的自动装配。同时,Spring的`hibernate.cfg.xml`配置文件用来设置数据库连接信息,并配置SessionFactory。此外...
在本项目中,我们探讨了如何...总结起来,Spring 3.0、Hibernate 3.6和Struts2.2.1的组合,为开发高效、可维护的企业级Web应用提供了一种强大而灵活的方法。通过合理的配置和设计,可以构建出满足各种需求的复杂系统。
本文档主要介绍了如何将Struts2、Spring3.0、JUnit4.7和Maven2.2.1这几种技术框架整合在一起,以构建一个功能完善的Java EE项目。该文档的目标是帮助开发人员理解如何在实际项目中应用这些框架,并确保它们能够协同...
Struts2.2.1+Spring3.1.0.M2+Hibernate3.5.1是经典的Java企业级开发框架组合,通常被称为SSH框架。这个整合配置Demo旨在演示如何将这三个强大的框架集成在一起,实现MVC(模型-视图-控制器)架构,提供数据持久化和...
这个"struts2.2.1+spring 3.0.3+hibernate3.6+dwr3.0全注解整合包"是将这些框架结合在一起,使用注解方式配置,简化了传统的XML配置文件,提高了开发效率和代码的可读性。以下是关于这四个框架及其整合的知识点: 1...
### 整合Struts2.2.1+Spring3.0.4+Hibernate3.6:选择合适的JAR包 在构建Java Web应用程序时,整合Struts2、Spring和Hibernate是非常常见的做法。这三个框架分别负责处理不同的层面:Struts2用于MVC(Model-View-...
标题中的"spring3.0.5_hibernate3.5.3_struts2.2.1整合jar包"指的是一个集合了Spring 3.0.5、Hibernate 3.5.3和Struts 2.2.1框架的整合包。这个资源是经过作者亲自测试的,被认为是最优的选择。它不仅提供了这三个...
通过学习这个JSP+Struts2.2.1+Spring3.0.5+Hibernate3的学习示例,你可以掌握如何在实际项目中有效地整合这些框架,理解它们如何协同工作以提升开发效率和代码质量。这将为你在Java Web开发领域打下坚实的基础。
本方案提供了一种集成化的开发环境,即"MyEclipse7.5+flex4+spring3.0.5+struts2.2.1+hibernate3.6.0+blazeds4.0.0.14931完美整合方案",它将多个流行的技术框架整合在一起,为Web应用程序开发提供了一个强大的平台...
这个插件的主要目的是简化在基于Struts2的应用程序中整合Spring的功能,如依赖注入(DI)、AOP(面向切面编程)以及事务管理等。下面我们将深入探讨Struts2、Spring框架以及它们之间的集成。 **Struts2框架** ...
Struts 2.2.1、Spring 3.0.4、Hibernate 3.6.0 和 JPA 整合是Java开发中的常见技术栈,主要用于构建企业级Web应用程序。这个压缩包文件“struts-2.2.1 spring-3.0.4 hibernate-3.6.0 JPA整合”提供了一个基础的集成...
SSH(Struts2、Hibernate和Spring)是一种流行的Java企业级应用程序开发框架的组合,用于构建高效、可维护的Web应用。下面将详细介绍如何整合Struts2.2.1、Hibernate3.6和Spring3.0.5。 首先,确保准备好所有必要的...
Struts2提供了注解和配置两种方式来定义Action。 2. **Interceptor(拦截器)**:拦截器是Struts2的一个强大特性,它允许在Action执行前后插入自定义逻辑。例如,日志、事务管理、权限验证等都可以通过拦截器实现。...
SSH整合是Java开发中一种常见的框架集成方式,它结合了Struts 2.2.1、Hibernate 3.5.2和Spring 3.0.5这三个强大的开源框架,以实现高效、灵活的企业级Web应用开发。SSH整合的核心目标是通过各框架间的协同工作,提高...
Struts2.2.1 api, Struts2.2.1帮助文档, CHM格式文件
Struts 2.2.1、Spring 3.0.4 和 Hibernate 3.6.0 是三个非常关键的开源框架,在Java企业级应用开发中广泛使用。它们构成了所谓的"SSH"(Struts、Spring、Hibernate)集成框架,极大地提高了开发效率和代码可维护性。...
struts2.2.1 + hibernate3.6 +spring3.0.4 整合例子
本书重点介绍如何整合Struts 2.2+Spring 3.0+Hibernate 3.6进行Java EE开发,主要包括三部分,第一部介绍Java EE开发的基础知识,以及如何搭建开发环境。第二部分详细讲解Struts 2.2、Spring 3.0和Hibernate 3.6三...