SSH使用Maven构建分层聚合项目

参考:http://www.cnblogs.com/whgk/p/7121336.html

项目代码下载地址:https://download.csdn.net/download/cyn_653620/10866776

一、maven父工程与子模块的拆分与聚合原理

问题描述:将ssh工程拆分为多个模块开发

1.1、拆分原理

创建一个maven project(pom),然后在创建四个子模块(maven moudule),其中四个子模块,分别为 domain、dao、service、web,也就是将四层的内容分别独立为一个项目,进一步将耦合性降低,其中如何将他们连接起来了,看下图。

SSH使用Maven构建分层聚合项目_第1张图片

为什么需要创建parent父工程来管理其下四个子模块呢?并让其子模块继承他呢?

  继承是为了消除重复,如果将domain、dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定spring的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义

  将四层都独立分开来了,web层如何调用service层代码?service层又如何调用dao层的代码呢?

  这个在没有maven之前是不可以这样做的,但是有了maven一切都不一样了,web层调用service层的代码其实很简单,因为service是一个完整的项目,那么我们在web层这个项目中想要使用别得项目中的代码,只需要通过maven的pom.xml文件编写对应的坐标,将其jar包加入进来即可达到目的,因此,看图中,ssh-web依赖ssh-service,ssh-service依赖ssh-dao,其中的原理就是我说的这样,所以才能将这四层分开成独立的项目,并且进一步抽取其公有依赖的jar包,统一交由父工程来管理,这就maven带来的效果。

 

1.2、聚合原理

  项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:domain、dao、service、web四个工程最终会打一个独立的war运行

      

二、案例实现

问题描述:使用maven将ssh项目进行分模块,并且实现从web到domain层的数据实体的CRUD进行测试。

2.1、创建maven-parent父模块

 

   SSH使用Maven构建分层聚合项目_第2张图片    

      

 点击next

SSH使用Maven构建分层聚合项目_第3张图片

点击next

SSH使用Maven构建分层聚合项目_第4张图片

                  

创建好之后的父工程如图  

 SSH使用Maven构建分层聚合项目_第5张图片

 

 从它的目录结构可以看出,父工程本身不写代码,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置通用jar的坐标了。

 在父工程的pom.xml中抽取一些重复的配置的,比如:锁定jar包的版本、设置编译版本等,一般这种都不需要我们自己临时配置,网上或者公司都有已经写好了的,每次使用就直接丢过来即可。


  4.0.0
  com.cyn
  crm_ssh_parent
  0.0.1-SNAPSHOT
  pom
  使用maven进行管理的基于ssh的客户关系管理系统
   

  
      
         4.2.4.RELEASE
        2.3.24
        5.0.7.Final
        1.6.6
        1.2.12
        1.2.3
        3.0.1
        0.9.1.2 
        5.1.6
    
    
    
        
            
                org.springframework
                spring-context
                ${spring.version}
            
            
                org.springframework
                spring-aspects
                ${spring.version}
            
            
                org.springframework
                spring-orm
                ${spring.version}
            
            
                org.springframework
                spring-test
                ${spring.version}
            
            
                org.springframework
                spring-web
                ${spring.version}
            
            
                org.hibernate
                hibernate-core
                ${hibernate.version}
            
            
                org.apache.struts
                struts2-core
                ${struts2.version}
            
            
                org.apache.struts
                struts2-spring-plugin
                ${struts2.version}
            

        
    

  
    
            org.apache.httpcomponents
            httpclient
            4.4
        
        
            com.alibaba
            fastjson
            1.1.37
        
        
            commons-beanutils
            commons-beanutils
            1.9.1
        
        
        
          commons-fileupload
          commons-fileupload
          1.3.1
        

        
        
          jstl
          jstl
          1.2
        

        
         
         


       
        
            org.aspectj
            aspectjweaver
            1.6.8
        

         
            org.springframework
            spring-aop
            ${spring.version}
        

        
          org.springframework
          spring-context
          ${spring.version}
        

        
          org.springframework
          spring-context-support
          ${spring.version}
        

        
          org.springframework
          spring-web
          ${spring.version}
        

        
          org.springframework
          spring-orm
          ${spring.version}
        

        
          org.springframework
          spring-beans
          ${spring.version}
        

        
          org.springframework
          spring-core
          ${spring.version}
        



    
        
            org.apache.struts
            struts2-core
            ${struts2.version}
            
                
                    javassist
                    javassist
                
            
        
        
            org.apache.struts
            struts2-spring-plugin
            ${struts2.version}
        
        
            org.apache.struts
            struts2-json-plugin
            ${struts2.version}
        
        
            org.apache.struts
            struts2-convention-plugin
            ${struts2.version}
        
    


    
        
            org.hibernate
            hibernate-core
            ${hibernate.version}
        
        
            org.hibernate
            hibernate-entitymanager
            ${hibernate.version}
        
        
            org.hibernate
            hibernate-validator
            5.2.1.Final
        
    

        
            c3p0
            c3p0
            ${c3p0.version}
        

        

    
        
            log4j
            log4j
            ${log4j.version}
        

        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        

        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        
    

    
    

        
            commons-lang
            commons-lang
            2.6
        

        
            org.codehaus.xfire
            xfire-core
            1.2.6
         

        
           dom4j
           dom4j
           1.6
        

        

        
          junit
          junit
          3.8.1
          test
        

        
            mysql
            mysql-connector-java
            ${mysql.version}
        
       
        
            javax.servlet
            servlet-api
            2.5
            provided
        
        
            javax.servlet.jsp
            jsp-api
            2.0
            provided
        
        
            net.sf.ehcache
            ehcache-core
            2.6.6
        
  
  
  
    crm_ssh_parent
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.2
                
                    1.7
                    1.7
                    UTF-8
                    true
                
            
        
    
  

2.2、创建maven-dao子模块

 SSH使用Maven构建分层聚合项目_第6张图片

 

点next进入如下图

SSH使用Maven构建分层聚合项目_第7张图片

                   

点击next,如下图

 

SSH使用Maven构建分层聚合项目_第8张图片

                    

点击finish,完成,查看父工程中的pom.xml文件

最后多出一段这个


    crm_ssh_dao
  

查看crm_ssh_dao中的pom.xml文件,会发现多了一个 parent结点,并且内部所包含的结点,其实就是父工程的坐标


    crm_ssh_parent
    com.cyn
    0.0.1-SNAPSHOT
    ..

1.查看crm_ssh_dao的目录结构

SSH使用Maven构建分层聚合项目_第9张图片

因为是在dao层,和数据库打交道,那么就在这个项目中,需要配置数据源,至于实体,另开一个domain专门管理实体,和hibernate的实体和数据库的映射关系。

SSH使用Maven构建分层聚合项目_第10张图片

2.applicationContext-dao.xml文件配置内容



    
    
	
	

	
		
		
		
		

		
		
	
	
	   
    
        
        
        
        
    
 

3.db.properties配置内容

jdbc.user=root
jdbc.password=199420
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
jdbc.initPoolSize=5
jdbc.maxPoolSize=10

2.3、创建maven-domain子模块

方法同crm_ssh_dao模块创建方法一样,模块名称为crm_ssh_domain。

查看crm_ssh_domain的详细目录结构

SSH使用Maven构建分层聚合项目_第11张图片

2.hibernate.cfg.xml文件配置内容




    
        org.hibernate.dialect.MySQLDialect

        true
        true
        
        update
        
        
    

2.4、创建ssh_service子模块

  方法同ssh_dao模块创建方法一样,模块名称为crm_ssh_service。

  看crm_ssh_service和crm_ssh_parent的pom.xml文件,会出现和crm_ssh_dao创建时一样的情况,crm_ssh_service多出一个parents结点,crm_ssh_parent多个一个module结点

1.查看crm_ssh_service的详细目录结构

SSH使用Maven构建分层聚合项目_第12张图片

2.applicationContext-service.xml文件配置内容



    
	

    
    
        
    
    
    
	

2.5、创建ssh_web子模块

  方法同maven-dao模块创建方法,模块名称为crm_ssh_web,注意:打包方式为war,而不再是jar包了,因为该层需要放到tomcat中去。与浏览器交互,就是web项目了,所以打成war包

   和前面一样,crm_ssh_parent的pom.xml中增加一个module结点,而crm_ssh_web的pom.xml中增加一个parent结点

   这个也很简单,就是跟写普通的struts2是一样的,只不过是和spring的结合,有什么对象,都通过spring来给予,并且这里多做一个事情,就是将之前的applicationContext配置文件进行结合,看下图

SSH使用Maven构建分层聚合项目_第13张图片

applicationContext-web.xml文件配置内容




	
    

	
    

struts.xml配置文件内容(目前版本为注解动态匹配)




	
    
    
    
    
    
    
    
    
    

web.xml文件配置内容(配置struts2的过滤器和spring的监听器)



    crm_ssh_web
    
        login.jsp
    

    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        contextConfigLocation
        classpath:applicationContext.xml
    

    
    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    
    
        struts2
        /*
    

前端界面文件包含login.jsp和hello.jsp

1)login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>



    
    登录页面


    


用户名:
密码:

2)hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="utf-8"%>



    
    Hello,SSH


    

Hello,${user.username}

2.6、总结与启动

父工程和子模块都写完之后,目录结构如图:

SSH使用Maven构建分层聚合项目_第14张图片

你可能感兴趣的:(学习,ssh框架)