struts整合spring:Spring和Struts整合的 3种方式

  1使用Spring ActionSupport

  2使用Spring DelegatingRequestProcessor 类

  3全权委托

  无论用那种思路方法来整合第步就是要为struts来装载spring应用环境 就是在 struts 中加入个插件

  struts-config.xml中

<plug-in Name="org.springframework.web.struts.ContextLoaderPlugIn">
 <-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
  spring 配置文件被作为参数配置进来这样可以省略对web.xml 文件中配置确保你applicationContext.xml 在WEB-INF目录下面

  1、使用SpringActionSupport .

  Spring ActionSupport 继承至org.apache.struts.action.Action

  ActionSupport子类可以或得 WebApplicationContext类型全局变量通过getWebApplicationContext()可以获得这个变量

  这是个 servlet 代码:

public LoginAction extends org.springframework.web.struts.ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request, HttpServletResponse response) {
 LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
        //获得 WebApplicationContext 对象       
 WebApplicationContext ctx = this.getWebApplicationContext;
 
 LoginDao dao = (LoginDao) ctx.getBean("loginDao");
 User u = User;
 
 u.Name(loginForm.getName);
 u.Pwd(loginForm.getPwd);
 
 
 (dao.checkLogin(u)){
  mapping.findForward("success");
 }{
   mapping.findForward("error");
 }
 
}
}
applicationContext.xml 中配置
<beans>
<bean id="loginDao" ="com.cao.dao.LoginDao"/>
</beans>
  这中配置方式同直接在web.xml文件配置差别不大注意:Action继承自 org.springframework.web.struts.ActionSupport 使得struts和spring耦合在

  但实现了表示层和业务逻辑层解耦(LoginDao dao = (LoginDao) ctx.getBean("loginDao"))

  2、使用Spring DelegatingRequestProcessor 类

  DelegatingRequestProcessor 继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面思路方法

  sturts-config.xml 中 

  processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> 通过 来替代

  org.apache.struts.action.RequestProcessor 请求处理

public LoginAction extends Action {
//利用spring来注入这个对象
private LoginDao dao ;
public void Dao(LoginDao dao) {
 .out.prln("执行注入");
 this.dao = dao;
}
public LoginDao getDao {
  dao;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request, HttpServletResponse response) {
 LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
 //这样改这行代码似乎没有必要了
 //WebApplicationContext ctx = this.getWebApplicationContext;
 //LoginDao dao = (LoginDao) ctx.getBean("loginDao");
 User u = User;
 
 u.Name(loginForm.getName);
 u.Pwd(loginForm.getPwd);
 
 //直接用dao来spring会将这个对象例子化
 (dao.checkLogin(u)){
  mapping.findForward("success");
 }{
   mapping.findForward("error");
 }
 
}
}
这里
LoginAction extends Action 介绍说明 struts 每有和spring 耦合

applicationContext.xml 中配置
<beans>
<bean id="loginDao" ="com.cao.dao.LoginDao"/>
<bean name="/login" ="com.cao.struts.action.LoginAction">
 <property name="dao">
  <ref local="loginDao"/>
 </property>
</bean>
</beans>
  这里 name="/login" 和struts 中path匹配

  ="com.cao.struts.action.LoginAction" 和struts 中type匹配

  还要为 LoginAction 提供必要XXX思路方法 获得ApplicationCotext和依赖注入工作都在DelegatingRequestProcessor中完成

  3全权委托:

  Action 创建和对象依赖注入全部由IOC容器来完成使用SpringDelegatingAcionProxy来帮助实现代理工作

  org.springframework.web.struts.DelegatingActiongProxy继承于org.apache.struts.action.Action .

  全权委托配置方式同 方式 2 类似 (applcationContext.xml文件配置和 Action类实现方式相同)

<struts-config>
 <data-sources />
 <form-beans >
  <form-bean name="loginForm"
 type="com.cao.struts.form.LoginForm" />
 </form-beans>
 <global-exceptions />
 <global-forwards />
<action-mappings >
  <!-- type指向是spring 代理类 -->
  <action
   attribute="loginForm"
   input="login.jsp"
   name="loginForm"
   path="/login"
   scope="request"
  type="org.springframework.web.struts.DelegatingActionProxy" >
   
   <forward name="success" path="/ok.jsp" />
   <forward name="error" path="/error.jsp" />
  </action>
</action-mappings>
 
 <message-resources parameter="com.cao.struts.ApplicationResources" />
<plug-in Name=
"org.springframework.web.struts.ContextLoaderPlugIn">
 <-property property="contextConfigLocation"
 value="/WEB-INF/applicationContext.xml"/>
</plug-in>
</struts-config>
区别的处
1 <action>中 type指向是spring 代理类
2 去掉struts-config.xml中 <controller >




   3种整和方式中我们优先选用 全权委托方式

  理由:

  1种使得过多耦合了Spring和Action .

  2RequestProcessor类已经被代理 如果要再实现自己实现方式(如:编码处理)怕有点麻烦

  整理总结下:

  整合工作中步骤:

  1修改struts-config.xml

  2 配置applicationContext.xml

  3 为Action添加get/思路方法 来获得依赖注入功能



Tags:  struts2spring strutsspring struts2整合spring struts整合spring

延伸阅读

最新评论

发表评论