首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Struts跟Spring的整合

2012-09-01 
Struts和Spring的整合(一) 整合方式Struts和Spring的整合有很多种方式,如下3种解决方案。(1)使用Spring的Ac

Struts和Spring的整合

(一) 整合方式     Struts和Spring的整合有很多种方式,如下3种解决方案。(1)       使用Spring的ActionSupport类整合Struts(2)       使用Spring的DelegatingRequestProcessor覆盖Struts 的RequestProcessor.(3)       将Struts Action管理委托给Spring框架  :Struts2和Spring都有对象工厂ObjectFactorySpring和Hibernate都有Session工厂  SessionFactory 我们使用是第三种方式,也就是通过IoC模式让Spring对Struts的Action进行管理。         ObjectFactory 对象工厂   Spring强调使用接口编程。  (二)环境的搭建和基本配置      前提:创建好Struts环境  1 复制文件:复制文件以下三个文件到项目的lib目录下。     commons-logging.jar;     spring.jar ;     struts2-spring-plugin-2.0.14.jar       2 配置struts.objectFactory属性值:在struts.xml文件中配置常量。       <constant name="struts.objectFactory" value="spring"></constant>        说明:默认情况下所有由Struts2框架创建的对象都是有ObjectFactory实例化的,ObjectFactory提供了与其他Ioc容器如Spring集成的方法。在这里用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory。也就是说,处理用户请求的Action并不是由Struts2框架创建的,而是由Spring创建的。              3 配置Spring监听器:在web.xml文件中增加如下内容。        <listener>             <listener-class>                  org.springframework.web.context.ContextLoaderListener            </listener-class>        </listener>       完整的web.xml文件如下:<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"    xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <display-name>Struts Demo</display-name>     <filter>        <filter-name>struts2</filter-name>        <filter-class>            org.apache.struts2.dispatcher.FilterDispatcher        </filter-class>    </filter>     <filter-mapping>        <filter-name>struts2</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>4 定义Spring的配置文件:默认情况下,Spring配置文件为applicationContext.xml ,该文件需要保存到Web应用的Web-INF目录下(和web.xml同一目录)。<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"    "http://www.springframework.org/dtd/spring-beans.dtd"><beans default-autowire="byName"> </beans>5 建立登录页面login.jsp 程序片段如下:  <body>    This is my JSP page. <br>    <s:form id="id" action="LoginAction">       <s:textfield name="username" label="登录名称:"></s:textfield>       <s:password name="password" label="密码:"></s:password>       <s:submit></s:submit>    </s:form>  </body>6 建立业务层(Spring):LoginSerivce接口和其实现类      (1)com.service.LoginSerivce.java 程序package com.service; public interface LoginSerivce {    boolean checkok(String username,String password);}      (2)com.service.impl.package com.service.impl; import com.service.LoginSerivce; public class LoginServiceImpl implements LoginSerivce{    public boolean checkok(String username,String password){       if(username!=null && username.equals("sunlu") && password!=null && password.equals("123")){           return true;       }       else{           return false;       }    }}  7 建立Web层(Struts)的Action:BaseAction类及其继承类   (1)com.action. BaseActionpackage com.action; import com.opensymphony.xwork2.ActionSupport;import com.service.LoginSerivce; @SuppressWarnings("serial")public class BaseAction extends ActionSupport{    LoginSerivce loginSerivce;     public LoginSerivce getLoginSerivce() {       return loginSerivce;    }     public void setLoginSerivce(LoginSerivce loginSerivce) {       this.loginSerivce = loginSerivce;    }            }   (2)com.action. LoginActionpackage com.action; @SuppressWarnings("serial")public class LoginAction extends BaseAction{    private String username;    private String password;    private String msg;        public String getMsg() {       return msg;    }    public void setMsg(String msg) {       this.msg = msg;    }    public String getPassword() {       return password;    }    public void setPassword(String password) {       this.password = password;    }    public String getUsername() {       return username;    }    public void setUsername(String username) {       this.username = username;    }       public String execute()throws Exception{       if(loginSerivce.checkok(username, password)){           this.msg="整合成功,调用Spring容器中的Action!";           return SUCCESS;       }       else{           return INPUT;       }    }   }  8 部署(1)在struts.xml 文件中添加action <?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>    <include file="struts-default.xml" />    <package name="com" extends="struts-default">        <action name="LoginAction" value="spring"></constant></struts>    (2)在applicationContext.xml文件中添加  <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"    "http://www.springframework.org/dtd/spring-beans.dtd"><beans default-autowire="byName">   <bean id="loginSerivce"        LoginAction " ref="loginSerivce"></property>   </bean></beans>在这种方式中,我们让Action的实例化由Spring来完成,这时需要使用Spring的IoC功能将业务逻辑Serivce组件注入到Action对象中。这种方式有一个明显的缺陷:所有的Action都需要在applicationContext.xml中进行配置,而Struts.xml文件中还需要配置同样的Action。对于有成百上千个Action的一般应用,配置文件就会过于庞大臃肿。我们可以采用Spring的自动装配功能‘

热点排行