Spring 和 struts 整合的三种方式

来源:互联网 发布:网络市场监管存在问题 编辑:程序博客网 时间:2024/06/01 01:34
Spring 和 struts 整合的三种方式1,使用Spring 的 ActionSupport2, 使用Spring 的 DelegatingRequestProcessor 类。3,全权委托。无论用那种方法来整合第一步就是要为struts来装载spring的应用环境。 就是在 struts 中加入一个插件。struts-config.xml中<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">   <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/></plug-in>spring 的配置文件被作为参数配置进来。这样可以省略对web.xml 文件中的配置。确保你的applicationContext.xml 在WEB-INF目录下面1,使用Spring的ActionSupport .Spring 的ActionSupport 继承至 org.apache.struts.action.ActionActionSupport的子类可以或得 WebApplicationContext类型的全局变量。通过getWebApplicationContext()可以获得这个变量。这是一个 servlet 的代码:public class 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 = new User();     u.setName(loginForm.getName());   u.setPwd(loginForm.getPwd());       if(dao.checkLogin(u)){    return mapping.findForward("success");   }else{    return mapping.findForward("error");   }  }}applicationContext.xml 中的配置<beans><bean id="loginDao" class="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 中 <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> 通过 <controller >来替代                        org.apache.struts.action.RequestProcessor 的请求处理。public class LoginAction extends Action {//利用spring来注入这个对象。private LoginDao dao ;public void setDao(LoginDao dao) {   System.out.println("执行注入");   this.dao = dao;}public LoginDao getDao() {   return 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 = new User();     u.setName(loginForm.getName());   u.setPwd(loginForm.getPwd());     //直接用dao来调用spring会将这个对象实例化。   if(dao.checkLogin(u)){    return mapping.findForward("success");   }else{    return mapping.findForward("error");   }  }}这里的。LoginAction extends Action 说明 struts 每有和spring 耦合。看一下applicationContext.xml 中的配置。<beans><bean id="loginDao" class="com.cao.dao.LoginDao"/><bean name="/login" class="com.cao.struts.action.LoginAction">   <property name="dao">    <ref local="loginDao"/>   </property></bean></beans>这里 name="/login" 与struts 中的path匹配    class="com.cao.struts.action.LoginAction" 与struts 中的type匹配还要为 LoginAction 提供必要的setXXX方法。 获得ApplicationCotext和依赖注入的工作都在DelegatingRequestProcessor中完成。3,全权委托:Action 的创建和对象的依赖注入全部由IOC容器来完成。 使用Spring的DelegatingAcionProxy来帮助实现代理的工作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 className="org.springframework.web.struts.ContextLoaderPlugIn">   <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/></plug-in></struts-config>不同之处1, <action>中 type指向的是spring 的代理类2, 去掉struts-config.xml中 <controller >三种整和方式中我们优先选用 全权委托的方式。理由:1,第一种使得过多的耦合了Spring和Action .2,RequestProcessor类已经被代理 如果要再实现自己的实现方式(如:编码处理)怕有点麻烦。总结一下:整合工作中的步骤:1,修改struts-config.xml  2, 配置applicationContext.xml3, 为Action添加get/set方法 来获得依赖注入的功能

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕妇凌晨饿了怎么办 减肥想吃泡面怎么办 自考的实践考核怎么办 c1本怎么办从业资格证 办理资格证假的怎么办 高一学习差怎么办 职业资格证书理论考试不合格怎么办 职称证查不到怎么办 社保与工资不符怎么办 社保审计不过关怎么办 企安宝登录不上怎么办 苹果维修没发票怎么办 园林绿化资质取消后怎么办 出租车从业资格证到期怎么办 养老金认证身份证不符怎么办 硬盘指示灯不亮怎么办 做业务产品质量很差怎么办 没有户籍证明了怎么办 回执编号忘了怎么办 泳镜里面花了怎么办 网页打印预览空白怎么办 中专毕业证掉了怎么办 会计证年检忘了怎么办 会计准考证丢了怎么办 从业资格证没带怎么办 安全证过期了怎么办 安全员证掉了怎么办 局部抗浮不满足怎么办 职称代评被骗怎么办 租到了公租房怎么办 公租房不住了怎么办 公寓不退押金怎么办 找物业租房被骗怎么办 租房子被骗了怎么办 公租房怎么办入住手续 重庆公租房摇到号怎么办 重庆公租房摇到号后怎么办 我被网上起诉怎么办 摇号摇到了不买怎么办 保障房离婚了怎么办 深圳有房子户口怎么办