SSH开发实践part4:Spring整合Struts

1  

  好了,前面spring与hibernate的整合开发我们基本上讲完了,现在要开始服务层的开发,也就是处理事务的action,在这里我们需要引入spring与struts的整合。也就是将action也作为一个bean交由spring进行管理。当然首先我们要完成相关的配置。

 

2  配置

 第一步当然是现在项目中引入struts包,也可以通过IDE快速的引入。

 然后就是修改web.xml的配置信息:

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  依次简单解释一下:

  第一个是通过配置ContextLoaderListener监听器,使容器启动时,自动加载applicationContext配置,因为它实现了ServletContextListener这个接口,容器启动时会自动执行它实现的方法。

  然后配置我们applicationcontext.xml所在位置,如果是默认位置的话也可以不用配置。

  最后两个大家都比较熟悉了,就是struts拦截器。

 

3  编写服务层

  同样的,按照分层设计的思想,这里我们同样采样接口开发的设计模式。先编写服务器层接口类,然后在编写具体的实现类。

  比如这里我们编写了一个关于员工的服务层接口:

public interface EmpService {
    
    public static final int LOGIN_FAIL=0;
    
    public static final int LOGIN_EMP=1;
    
    public static final int LOGIN_MGR=1;
    
    
    public int login(Manager mgr);
    
    public String punch(Employee emp);
    
    public Set<AttendType> getAllAttendType();
    
    public boolean addApplication(Employee emp);
}

  接口中定义了一些常量以及方法,然后我们在实现类中进行具体的实现:

public class EmpServiceImp implements EmpService{
    
    private EmployeeDAO empDao;
    private ManagerDAO mgrDao;
    
    
    public EmployeeDAO getEmpDao() {
        return empDao;
    }

    public void setEmpDao(EmployeeDAO empDao) {
        this.empDao = empDao;
    }

    public ManagerDAO getMgrDao() {
        return mgrDao;
    }

    public void setMgrDao(ManagerDAO mgrDao) {
        this.mgrDao = mgrDao;
    }

    @Override
    public int login(Manager mgr) {
        // TODO Auto-generated method stub
        if( empDao.findByNameAndPass(mgr).size() >= 1){
            return LOGIN_EMP;
        }else if(mgrDao.findMgrByNameAndPass(mgr).size() >= 1){
            return LOGIN_MGR;
        }else{
            return LOGIN_FAIL;
        }
    }

    @Override
    public String punch(Employee emp) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Set<AttendType> getAllAttendType() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean addApplication(Employee emp) {
        // TODO Auto-generated method stub
        return false;
    }
    
}

  这里需要注意的是:我们使用的DAO类(比如EmployeeDAO)都是接口层,而不是具体的实现类,也就是说这个时候我的action是不知道到时候要调用哪个dao实现类的。

怎么办呢?自然想到spring对于bean对象的管理,我们可以在配置文件中配置,像action实现类中注入其所需的dao实现类。

 

4  注入配置

  ok这里就比较简单啦,又回到了spring的配置上:

    <bean id="daoTemplate" abstract="true" lazy-init="true" p:sessionFactory-ref="sessionFactory"/>
    <bean id="EmployeeDao" class="com.souvenir.daoImp.EmployeeDaoImp" parent="daoTemplate"/>
    <bean id="PaymentDao" class="com.souvenir.daoImp.PaymentDaoImp" parent="daoTemplate"/>
    <bean id="ManagerDao" class="com.souvenir.daoImp.ManagerDaoImp" parent="daoTemplate"/>

......

<!-- action配置 -->
    <bean id="EmpManager" class="com.souvenir.serviceImp.EmpServiceImp">
        <property name="empDao" ref="EmployeeDao" />
        <property name="mgrDao" ref="ManagerDao" />
    </bean>

  通过配置可以看出我们向action实现类中注入了两个bean对象,其分别对应我们之前定义好的dao实现类。

 

5  ok,至此关于SSH集成开发配置的内容就结束了,归根到底其核心还是通过spring来管理dao与action这些bean对象。

  剩下的事就是前端开发然后调用action进行处理,也就是struct的配置啦,这里就不再赘述了。

 

posted @ 2014-07-05 23:57  大魔王萨格拉斯  阅读(213)  评论(0编辑  收藏  举报