• 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的配置啦,这里就不再赘述了。

  • 相关阅读:
    [转]多线程更新Processbar
    不能因技术后天的死 而迷茫了今天的“学” 生
    NSIS 安装包制作相关
    [转]yslow 评分标准
    c# winform 打印 窗体 及 窗体控件内容 的 初级尝试
    严重认知自身成长 与诸博友共勉
    [转]NSIS 的 Modern UI 教程
    爱的幸福
    遍历WinForm窗体 根据语言类型设置其控件Text显示
    多借鉴 多思考
  • 原文地址:https://www.cnblogs.com/souvenir/p/3818091.html
Copyright © 2020-2023  润新知