学了一段时间的Struts与Spring,老师让把Struts与Spring整合,于是今天尝试做了一个登陆,模拟使用SQLSERVER验证登陆,下面讲讲自己的心得吧!
工欲善其事必先利其器,要想整合Struts与Spring,我们就得先搭建Struts与Spring环境,其实我们强大的MyEclipse已经给我们提供了十分便捷的方法:
1、 创建工程web project 命名为 StrutsAndSpring
2、 添加Struts支持
项目文件夹单击右键 Myeclipse Add Struts capabilities… 点选Struts1.3
勾选Install Struts TLDs finish
3、 添加Spring 支持
项目文件夹单击右键Myeclipse Add Spring capabilities… 选择所需jar包(视情况而定,也可需要时在添加Build path,我选择了四个,最好是了解不同包的功能,只添加使用的,节省资源。AOP,Core,Persistence Core,Persistence JDBC.
之后按照我创建了两个JSP页面,分别是成功与失败后的页面,然后添加了Form,和Action.
然后创建了一个数据层和业务层,数据层中主要是模拟对数据库的操作,而业务层就是用来给用户调用的。为了便于扩展,数据层使用了一个接口类,loginDao.java,loginDao4SqlServer.java实现了loginDao.java接口。
首先我们修改web.xml,加入listener:
<listener>
<listener-class>org.springframework.web.context.
ContextLoaderListener</listener-class>
</listener>
为了在Struts中加载Spring context,需要在struts-config.xml文件中加入如下部分:
<struts-config>
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
</struts-config>
通过Struts的plug-in在Struts和Spring之间提供了良好的结合点。通过plug-in我们实现了Spring context的加载,不过仅仅加载Spring context并没有什么实际的意义,还应该经过配置将Struts的Action交给Spring容器进行管理。
<struts-config>
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
</struts-config>
通过Struts的plug-in在Struts和Spring之间提供了良好的结合点。通过plug-in我们实现了Spring context的加载,不过仅仅加载Spring context并没有什么实际的意义,还应该经过配置将Struts的Action交给Spring容器进行管理。
<action-mappings>
<action path="/login"
type="com.suda.struts.action.LoginAction"
name="loginForm">
<forward name="success" path="/success.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
<action path="/login"
type="com.suda.struts.action.LoginAction"
name="loginForm">
<forward name="success" path="/success.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
</action-mappings>
<!--设置spring代理-->
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
在form bean这个节点上与传统的Struts配置没有什么区别,而在Action上面则发生了变化。在传统的action节点上type属性写入action类的完整类名,而和Spring结合后在这点上是使用了Spring提供的 DelegatingActionProxy 作为action的type属性,DelegatingActionProxy同样是org.apache.struts.action.Action的一个子类,它将把调用请求转交给真正的Action实现。通过这样的方式,Spring获得了Action实例的管理权,它将对Action进行调度,并为Struts提供所需的Action实例。这样,就可以将Action看作是Spring的一个bean,它就可以享受Spring的所有服务,如依赖注入、实例管理、事务管理等。
在applicationContext.xml中相应的配置如下的节点:
<beans>
<bean id="loginDao4SqlServer" class="com.suda.spring.dao.LoginDao4SqlServer"></bean>
在form bean这个节点上与传统的Struts配置没有什么区别,而在Action上面则发生了变化。在传统的action节点上type属性写入action类的完整类名,而和Spring结合后在这点上是使用了Spring提供的 DelegatingActionProxy 作为action的type属性,DelegatingActionProxy同样是org.apache.struts.action.Action的一个子类,它将把调用请求转交给真正的Action实现。通过这样的方式,Spring获得了Action实例的管理权,它将对Action进行调度,并为Struts提供所需的Action实例。这样,就可以将Action看作是Spring的一个bean,它就可以享受Spring的所有服务,如依赖注入、实例管理、事务管理等。
在applicationContext.xml中相应的配置如下的节点:
<beans>
<bean id="loginDao4SqlServer" class="com.suda.spring.dao.LoginDao4SqlServer"></bean>
<bean id="userManager" class="com.suda.spring.manager.UserManager">
<property name="loginDao" ref="loginDao4SqlServer"/>
</bean>
<bean name="/login" class="com.suda.struts.action.LoginAction">
<property name="login">
<ref bean="userManager"/>
</property>
</bean>
</beans>
最后这个bean的配置是关键,这个名为"/login"的bean与Struts中的
<action path="/login" ……>
……
</action>节点相对应,这样,Spring Bean Name与Struts Action Path相关联,当Struts加载对应的Action时,DelegatingActionProxy就根据传入的path属性,在Spring Context寻找对应bean,并将其实例返回给Struts。与此同时,还可以看到,"/login" bean 中包含了一个login引用,Spring 在运行期将根据配置为其提供login实例,以及围绕login的事务管理服务。这样一来,对于Struts 开发而言,我们既可以延续Struts 的开发流程,也可以享受Spring 提供的事务管理服务。
至此,SS组合已经将Struts MVC以及Spring中的Bean管理、事务管理融为一体。我们就获得了一个全面、成熟、高效、自顶而下的Web 开发框架。
<action path="/login" ……>
……
</action>节点相对应,这样,Spring Bean Name与Struts Action Path相关联,当Struts加载对应的Action时,DelegatingActionProxy就根据传入的path属性,在Spring Context寻找对应bean,并将其实例返回给Struts。与此同时,还可以看到,"/login" bean 中包含了一个login引用,Spring 在运行期将根据配置为其提供login实例,以及围绕login的事务管理服务。这样一来,对于Struts 开发而言,我们既可以延续Struts 的开发流程,也可以享受Spring 提供的事务管理服务。
至此,SS组合已经将Struts MVC以及Spring中的Bean管理、事务管理融为一体。我们就获得了一个全面、成熟、高效、自顶而下的Web 开发框架。
具体到我们的登录,我们通过在Action的execute中处理:
private UserManager login;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String username=loginForm.getUsername();
String password=loginForm.getPassword();
if (login.validate(username, password)) {
return mapping.findForward("success");
}else {
return mapping.findForward("failure");
}
}
public UserManager getLogin() {
return login;
}
public void setLogin(UserManager login) {
this.login = login;
}
做完这些我们的小整合就可以进行了!