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

首先让spring加入到web应用中,在web应用中一般是启动的时候初始化sping容器。我们知道servletContextListener可以做到这一点,该监听器在web应用启动时回调自定义方法--该方法就可以启动web容器。Sping提供了一个ContextLoaderListener该监听器实现了ServletContextListener接口,该类可以作为监听器使用。它在创建使自动查找web-inf下的applicationContext.xml配置文件。;

第一中整合方法:让Spring接管struts的业务控制器(也就是Action),换句话说就是让struts的action纳入spring的管理中。
[color=red] 我们知道Struts2的主要流程:先是请求到达Filter(也就是中央控制器),中央控制器通过解析struts.xml文件获取该请求是到哪一个业务控制器(也就是业务action),再通过反射创建这个业务控制器,我们这种整合就是让action的创建工作不再让struts的中央控制器去创建,而是用spring去创建,struts的中央控制器直接到spring的工厂中取Action即可。下面是具体的实例:
[/color]

[color=darkblue]注意:此种方法需要引进spring的插件:struts2-spring-plugin-2.2.1.jar,Spring管理Action时一定要改变Action bean的scope不能将action的bean的scope设置为单例模式,需要改为:prototype 和 request两种。[/color]

此方法的缺点:
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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值