Struts与Spring的整合

学了一段时间的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容器进行管理。
<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-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>
    
    <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的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;
}
 
做完这些我们的小整合就可以进行了!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值