上QQ阅读APP看书,第一时间看更新
14.5 整合Spring完成登录案例
前面介绍了如何在Strtus 2中安装Spring插件,并介绍了Struts 2和Spring框架的整合策略。下面介绍如何通过整合Struts 2和Spring框架来完成登录案例。
14.5.1 修改控制器Action及配置
下面通过整合Spring来改进以前的登录案例。首先修改登录控制器LoginAction,为其添加类型为LoginCheck的属性lc,并为该属性添加setter方法。该属性用来接收注入的业务逻辑组件,代码如下所示。
package net.hncu.action; import net.hncu.service.LoginCheck; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String uname; private String upassword; private LoginCheck lc; // 获得uname值 public String getUname() { return uname; } // 设置uname值 public void setUname(String uname) { this.uname = uname; } // 获得password值 public String getUpassword() { return upassword; } // 设置password值 public void setUpassword(String upassword) { this.upassword = upassword; } public void setLc(LoginCheck lc) { this.lc = lc; } public String execute() throws Exception { // 调用业务逻辑组件来判断 if (lc.isLogin(getUname(), getUpassword())) { // 如果为合法用户,在request范围中添加属性login,其属性值为true ServletActionContext.getRequest().setAttribute("login", "true"); return SUCCESS; } else { return ERROR; } } }
14.5.2 依赖注入业务逻辑组件
修改Spring配置文件“applicationContext.xml”,配置登录控制器对应的实例,并将业务逻辑组件注入到Action实例中,代码如下所示。
<? xml version="1.0" encoding="UTF-8"? > <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="loginCheck" class="net.hncu.service.LoginCheck"></bean> <! -- 创建控制器实例 --> <bean id="loginAction" class="net.hncu.action.LoginAction"> <property name="lc" ref="loginCheck"></property> </bean> </beans>
在“struts.xml”文件中配置LoginAction,其中class属性并不是Action类的实际处理类,而是对应Spring容器中的Bean实例,代码如下所示。
<? xml version="1.0" encoding="UTF-8" ? > <! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <! -- struts为配置文件根元素--> <struts> <! -- Action必须放在指定的包名空间中--> <package name="struts2" extends="struts-default"> <! -- 定义login的Action,其实现类为net.hncu.struts2.action.LoginAction--> <action name="login" class="loginAction"> <! -- 定义处理结果与视图资源之间的关系--> <result name="success">/login_success.jsp</result> <result name="error">/login_failure.jsp</result> <result name="input">/login.jsp</result> </action> </package> </struts>