`
Supanccy2013
  • 浏览: 223227 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts2.2.1整合Spring3.0的两种方法

    博客分类:
  • SSH
阅读更多
首先让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>



分享到:
评论

相关推荐

    struts2.2.1+spring3.0+hibernate3.0框架整合

    在实际整合过程中,通常会使用Spring的`struts-plugin.xml`配置文件将Struts2与Spring集成,实现Action的自动装配。同时,Spring的`hibernate.cfg.xml`配置文件用来设置数据库连接信息,并配置SessionFactory。此外...

    Spring 3.0+Hibernate 3.6+Struts2.2.1详解

    在本项目中,我们探讨了如何...总结起来,Spring 3.0、Hibernate 3.6和Struts2.2.1的组合,为开发高效、可维护的企业级Web应用提供了一种强大而灵活的方法。通过合理的配置和设计,可以构建出满足各种需求的复杂系统。

    struts2_spring3.0_Junit4.7_Maven2.2.1_整合运行说明_培训.pdf )

    本文档主要介绍了如何将Struts2、Spring3.0、JUnit4.7和Maven2.2.1这几种技术框架整合在一起,以构建一个功能完善的Java EE项目。该文档的目标是帮助开发人员理解如何在实际项目中应用这些框架,并确保它们能够协同...

    Struts2.2.1+Spring3.1.0.M2+Hibernate3.5.1整合配置demo

    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全注解整合包

    这个"struts2.2.1+spring 3.0.3+hibernate3.6+dwr3.0全注解整合包"是将这些框架结合在一起,使用注解方式配置,简化了传统的XML配置文件,提高了开发效率和代码的可读性。以下是关于这四个框架及其整合的知识点: 1...

    整合struts2.2.1+spring3.0.4+hibernate3.6选择jar包

    ### 整合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包

    标题中的"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学习示例

    通过学习这个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完美整合方案

    本方案提供了一种集成化的开发环境,即"MyEclipse7.5+flex4+spring3.0.5+struts2.2.1+hibernate3.6.0+blazeds4.0.0.14931完美整合方案",它将多个流行的技术框架整合在一起,为Web应用程序开发提供了一个强大的平台...

    struts2-spring-plugin-2.2.1.jar

    这个插件的主要目的是简化在基于Struts2的应用程序中整合Spring的功能,如依赖注入(DI)、AOP(面向切面编程)以及事务管理等。下面我们将深入探讨Struts2、Spring框架以及它们之间的集成。 **Struts2框架** ...

    struts-2.2.1 spring-3.0.4 hibernate-3.6.0 JPA整合

    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.2.1+_hibernate3.6+spring3.0.5)整合配置

    SSH(Struts2、Hibernate和Spring)是一种流行的Java企业级应用程序开发框架的组合,用于构建高效、可维护的Web应用。下面将详细介绍如何整合Struts2.2.1、Hibernate3.6和Spring3.0.5。 首先,确保准备好所有必要的...

    Struts2.2.1关键jar包

    Struts2提供了注解和配置两种方式来定义Action。 2. **Interceptor(拦截器)**:拦截器是Struts2的一个强大特性,它允许在Action执行前后插入自定义逻辑。例如,日志、事务管理、权限验证等都可以通过拦截器实现。...

    SSH整合(struts 2.2.1,hibernate 3.5.2,spring 3.0.5)

    SSH整合是Java开发中一种常见的框架集成方式,它结合了Struts 2.2.1、Hibernate 3.5.2和Spring 3.0.5这三个强大的开源框架,以实现高效、灵活的企业级Web应用开发。SSH整合的核心目标是通过各框架间的协同工作,提高...

    Struts2.2.1帮助文档

    Struts2.2.1 api, Struts2.2.1帮助文档, CHM格式文件

    struts-2.2.1 + spring-3.0.4+ hibernate-3.6.0.rar

    Struts 2.2.1、Spring 3.0.4 和 Hibernate 3.6.0 是三个非常关键的开源框架,在Java企业级应用开发中广泛使用。它们构成了所谓的"SSH"(Struts、Spring、Hibernate)集成框架,极大地提高了开发效率和代码可维护性。...

    SSH2(struts2.2.1 + hibernate3.6 +spring3.0.4)整合的例子

    struts2.2.1 + hibernate3.6 +spring3.0.4 整合例子

    Struts_2+Spring_3+Hibernate整合开发.part5.rar

     本书重点介绍如何整合Struts 2.2+Spring 3.0+Hibernate 3.6进行Java EE开发,主要包括三部分,第一部介绍Java EE开发的基础知识,以及如何搭建开发环境。第二部分详细讲解Struts 2.2、Spring 3.0和Hibernate 3.6三...

Global site tag (gtag.js) - Google Analytics