搭建简单的ssm分布式项目
一. 创建父项目容器
- 创建父项目容器
- 什么都不选
- 输入项目名称,项目所在路径,点击Finish创建
4.配置Maven
5. 创建成功
5. 在父容器的pom.xml文件中添加整个项目所需要的依赖jar包,对依赖jar包做大统一管理,父项目中创建的指定服务,使用jar包引用父容器中的就可以
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ssm</groupId>
<artifactId>ssm-parent</artifactId>
<!-- 打包方式,容器是pom-->
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!--父项目容器中包含的子项目,子项目容器等-->
<modules>
<module>ssm-common</module>
<module>ssm-manager</module>
<!--正常情况下下面三个应该在ssm-manager的pom中-->
<module>ssm-manager/ssm-mapper</module>
<module>ssm-manager/ssm-server</module>
<module>ssm-manager/ssm-web</module>
</modules>
<!-- <packaging>pom</packaging>-->
<!-- 集中定义依赖组件版本号,
后续如果项目中还要添加依赖,
将依赖的版本在此处添加,
在需要依赖的地方,使用${依赖版本号}获取 -->
<properties>
<!-- junit 依赖 -->
<junit.version>4.12</junit.version>
<!-- spring 依赖 -->
<spring-version>4.3.4.RELEASE</spring-version>
<!-- hibernate 数据验证框架依赖 -->
<hibernate-validator.version>5.3.3.Final</hibernate-validator.version>
<!-- spring-mybatis 依赖 -->
<mybatis-spring.version>1.3.0</mybatis-spring.version>
<!-- mybatis 依赖 -->
<mybatis.version>3.4.1</mybatis.version>
<!-- servlet api 依赖 -->
<servlet.version>3.0.1</servlet.version>
<!-- jsp 依赖 -->
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<!-- slf4j 依赖 -->
<slf4j-log4j12.version>1.7.22</slf4j-log4j12.version>
<!-- json 相关依赖 -->
<jackson.version>2.8.5</jackson.version>
<!-- 数据库连接池相关依赖 -->
<druid.version>1.0.27</druid.version>
<!-- mysql 依赖 -->
<mysql.version>5.1.8</mysql.version>
<!-- ibatis 依赖 -->
<ibatis.version>3.0</ibatis.version>
<!-- 分页工具依赖 -->
<pagehelper.version>4.1.6</pagehelper.version>
<!-- 文件上传依赖 -->
<commons-fileupload.version>1.3.2</commons-fileupload.version>
<!-- redis 依赖 2.9.1 版本为了兼容 springdata-redis -->
<jedis.version>2.9.1</jedis.version>
<!-- spring data redis 依赖使用 1+最新版本因为 2+需要 spring5+版本 -->
<springdata-redis.version>1.8.18.RELEASE</springdata-redis.version>
<!-- solr 依赖 -->
<solrj.version>7.6.0</solrj.version>
<!-- jdk 依赖 -->
<jdk.version>1.8</jdk.version>
<!-- Apache 其他依赖 -->
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
<poi.version>3.15</poi.version>
<commons-net.version>3.3</commons-net.version>
<commons-logging.version>1.2</commons-logging.version>
<!-- dubbo 依赖 -->
<dubbo-version>2.6.0</dubbo-version>
<!-- zookeeper 依赖 -->
<zookeeper-version>3.4.13</zookeeper-version>
<!-- zkclient 依赖 -->
<zkclient-version>0.1</zkclient-version>
<!--google kaptcha图像验证码-->
<kaptcha-version>0.0.9</kaptcha-version>
<!-- alipay支付宝依赖 -->
<alipay.version>3.4.49.ALL</alipay.version>
<!-- javamail邮箱依赖 -->
<javamail.version>1.6.2</javamail.version>
<!-- spring amqp Rabbitmq消息队列依赖 -->
<spring-amqp.version>1.7.11.RELEASE</spring-amqp.version>
<!-- spring rabbit amqp依赖 -->
<spring-amqp-rabbit.version>1.7.11.RELEASE</spring-amqp-rabbit.version>
</properties>
<!-- 只定义依赖的版本,并不实际依赖 , -->
<dependencyManagement>
<dependencies>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<!--版本号获取上面定义的版本号即可,如果需要更换版本,只需要更换上面-->
<version>${servlet.version}</version>
<!-- provided 作用域表示:
只在编译和测试的时候 运行时,
如果容器已经提供了该 jar 包,
直接调用容器 jar 包即可。 -->
<scope>provided</scope>
</dependency>
<!-- jsp 相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- 使用 hibernate 的数据验证框架 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<!-- Jackson Json 处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${standard.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- junit 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-log4j12.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--ibatis 依赖-->
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-core</artifactId>
<version>${ibatis.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!-- Redis 客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- spring data redis 依赖 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${springdata-redis.version}</version>
</dependency>
<!-- solr 客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solrj.version}</version>
</dependency>
<!-- Apache 其他组件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons-logging.version}</version>
</dependency>
<!-- dubbo 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo-version}</version>
</dependency>
<!-- zookeeper 依赖 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper-version}</version>
</dependency>
<!-- zkclient 依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient-version}</version>
</dependency>
<!-- google kaptcha 图形验证码 -->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha-version}</version>
</dependency>
<!-- alipay 支付宝依赖 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>${alipay.version}</version>
</dependency>
<!-- javamail邮箱依赖 -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>${javamail.version}</version>
</dependency>
<!-- spring rabbit amqp依赖 -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>${spring-amqp-rabbit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
二. 在父项目容器中创建指定的项目模块
父容器中创建指定功能模块,在Spring中存有页面,用来接收客户端请求的为war项目打包时需要打为war包. 没有页面,专门用来提供服务供其它方调用的为jar项目,打包时需要打为jar包(另外还有容器时,pom.xml设置为pom),通常一个功能模块的完成需要有接收请求的Controller层,Api接口层,处理逻辑的Service层,跟数据库交互的Dao层,在分布式模块化的项目中,整个功能模块为一个服务,一般会在父项目容器中再创建一个子容器,这个子项目容器就看为是这个功能模块的功能容器,然后在这个子项目容器中创建需要的Controller层,Api接口层,Service层与Dao层,每一层都是以一个项目来创建
在容器中创建项目模块: 右键需要创建项目的容器 —> new —> Module
三. 父项目容器中创建ssm-common 子模块
该模块下存放了其它所有功能模块需要的工具类,枚举,对外接收数据的dto等,选择quickstar,由于这个模块会被各个服务使用,所以将这个common单独定义为一个项目,放在功能容器的外部,有功能模块需要调用,直接引用这个common的依赖即可
- 右键父项目容器,创建Module
- 勾选Maven,选择quickstar
- 输入模块名称
- 创建成功
- 添加该模块需要用到的依赖(由于是common,用来专门存放工具类相关的,一般不需要太多依赖)
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--父项目-->
<parent>
<artifactId>ssm-parent</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ssm</groupId>
<artifactId>ssm-common</artifactId>
<!--指定打包时,打为什么包jar,或war-->
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<!-- TODO project name -->
<name>ssm-common</name>
<description></description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--由于父项目容器的pom文件中指定的依赖版本,
此处则不需要再次指定,但有子模块添加依赖时,首先
要将需要的依赖添加到父项目容器中,然后再添加到指定
的模块中-->
<!-- junit 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
</project>
- main包下创建存放类的包,创建公共的枚举,工具类,自定义异常类等
四. 父项目容器中创建功能模块容器
右键父项目容器,new —> module, 与父项目容器一样什么都不选,注意jdk版本,功能模块容器的路径是否在父项目容器的路径下等,此处的ssm-manager 是一个容器,可以看为是一个完整的功能模块
功能模容器的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm-parent</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm-manager</artifactId>
<packaging>pom</packaging>
<!--容器中的子项目,正常情况下该有的,由于创建当前
容器中的子项目时,忘记选择子项目的父容器为这里的ssm-manager
idea默认将这个容器中的子项目指向了ssm-parent-->
<!--<modules>
<module>ssm-manager/ssm-mapper</module>
<module>ssm-manager/ssm-server</module>
<module>ssm-manager/ssm-web</module>
</modules>-->
</project>
五. 功能容器中创建面向数据库的ssm-mapper模块
创建步骤与common相同,不过右键点击的是ssm-manager功能容器,注意,创建的当前模块所属的父容器,路径是否在功能容器下
- pom文件中添加依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<!-- 此处好像有错误,但是不影响运行,正常情况父容器应该是ssm-manager
但是,同时没有relativePath这个标签,原因是在创建当前项目时忘记选择所属
父项目容器了,默认给的父项目是ssm-parent,如果将此处改为manager,不要忘记
将ssm-parent的pom中的module标签,表示当前项目的剪切到ssm-manager的pom中
如果运行报错找不到pom,删除此处的relativePath标签
下面几个都有这个问题,但是不影响程序运行 -->
<artifactId>ssm-parent</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ssm</groupId>
<artifactId>ssm-mapper</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<!-- TODO project name -->
<name>ssm-mapper</name>
<description></description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- 分页工具 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
</dependencies>
</project>
- 生成对应数据库表的实体类,实现增删改查的mapper接口,mapper.xml文件,注意接口与xml文件存放位置的不同,mybatis配置的扫描的不同方式,与修改接口,实体类时,不要忘记修改xml中的映射路径
六. 功能容器中创建ssm-server模块
与ssm-mapper相同,注意,创建的当前模块所属的父容器,路径是否在功能容器下,server模块一般存有实现功能的注意业务代码,依赖ssm-mapper,对数据库进行增删改查
- pom文件中添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm-parent</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ssm</groupId>
<artifactId>ssm-server</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ssm-server</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--引入ssm-mapper-->
<dependency>
<groupId>com.ssm</groupId>
<artifactId>ssm-mapper</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--引入ssm-common-->
<dependency>
<groupId>com.ssm</groupId>
<artifactId>ssm-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- 日志打印 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- Redis 客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- spring data redis 依赖 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
- 创建java包,创建编写业务代码,注意,不要忘记使用@Service,将类注入到Spring容器中,通常一个类对应一个接口,Spring的动态代理,并且注意包路径与Spring配置文件中配置事物, Aop的路径对应
七. 功能容器中创建ssm-web模块
由于web中有页面等,需要打为war包,创建时不同的地方是选择webapp
一个web的完整架构
- pom文件中添加依赖,注意点,通常会将spring,mybatis,等一些相关的配置文件放在该项目的resources文件夹下,pom文件中添加读取配置文件的设置,由于是有页面的web,添加jetty,或tomcat插件等
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm-parent</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm-web</artifactId>
<packaging>war</packaging>
<name>ssm-web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--引入ssm-server层-->
<dependency>
<groupId>com.ssm</groupId>
<artifactId>ssm-server</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--引入ssm-mapper,正常情况下是不应该引入这个的
防止表字段泄露,web中一般使用dto来相应的-->
<dependency>
<groupId>com.ssm</groupId>
<artifactId>ssm-mapper</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- jsp相关依赖 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Json处理相关依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!-- google kaptcha 图形验证码 -->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
</dependencies>
<!-- build标签 常用于添加插件及编译配置 -->
<build>
<resources>
<!--指获取src/main/resources目录下的配置文件,${env}为站位固定格式
在打包时根据打包环境输入参数,输入的参数会被填充到env-->
<!--<resource>
<directory>src/main/resources/${env}</directory>
</resource>-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<!--指定读取resources文件下的什么格式的文件-->
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.tld</include>
<!-- */ -->
</includes>
<filtering>false</filtering>
</resource>
</resources>
<!-- 编译配置 指定finalName用于指定打包的包名 -->
<finalName>ego-manager-web</finalName>
<plugins>
<!-- 添加maven jetty插件 -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<!-- 项目访问路径 -->
<contextPath>/ccc</contextPath>
</configuration>
</plugin>
</plugins>
</build>
<!-- 打包环境配置 开发环境 测试环境 正式环境 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<!--true说明该环境为默认环境-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
</profiles>
</project>
webapp/WEB-INF下的web.xml,与页面,等静态资源
- 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ego-manager-web</display-name>
<!-- post方式提交乱码解决 begin -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- */ -->
<!-- spring后端配置 begin(通过一个监听器,扫描Spring的配置文件,启动Spring) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>
<!-- 配置 DispatcherServlet 指定 SpringMvc配置文件的位置,启动SpringMVC-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<!--配置映射-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- WEB-INF下创建存放页面,存放静态资源css,js,相关的路径等
配置文件
创建resources文件夹,创建配置文件,配置文件分为配置相关的配置文件,与存储数据相关的配置文件
框架配置相关配置文件
- mybatis相关配置文件, applicationContext-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 加载属性文件 -->
<context:property-placeholder location="classpath:properties/*.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 使用Druid无需配置driver,会自动的根据url得到driver -->
<!-- 配置url ${jdbc.url}从属性文件获取 -->
<property name="url" value="${jdbc.url}"/>
<!-- 配置用户名 -->
<property name="username" value="${jdbc.username}"/>
<!-- 配置数据库密码 -->
<property name="password" value=""/>
</bean>
<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/config.xml"/>
<property name="dataSource" ref="dataSource"/>
<!-- 配置自动扫描mybatis Mapper.java Mapper.xml -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包 扫描对应mapper.xml的映射接口-->
<property name="basePackage" value="com.ssm.dao" />
<!-- sqlSessionFactoryBeanName是批factory的名称 此处使用value,而不是ref -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
</beans>
- 事物相关配置文件, applicationContext-trans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!--配置开启事物-->
<tx:annotation-driven/>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--
REQUIRED:支持当前事务,如果没有事务,就创建一个事务。建议使用。
MANDATORY:支持当前事务,如果没有事务,就抛出异常。
NESTED:嵌套事务,允许在当前事务中嵌套事务,如果没有事务,会创建一个。
NEVER:强制不使用事务,如果当前有事务,则抛出异常。
NOT_SUPPORTED:强制不使用事务,如果当前有事务,则将当前事务挂起。
REQUIRES_NEW:创建一个新的事务,如果当前已有事务,则挂起当前事务。
SUPPORTS:支持当前事务,如果没有事务,不做任何处理。
-->
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置aop,切面 -->
<aop:config>
<!-- 第一个*表示所有返回值 第二个*表示所有类 第三个*表示所有的方法 ..表示所有的传参类型 -->
<aop:pointcut expression="execution(* com.ssm.service.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
</beans>
- SpringMvc相关配置文件, springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 启用spring mvc 注解 -->
<!-- <context:annotation-config /> -->
<mvc:annotation-driven />
<!-- 配置访问根路径对应资源操作 -->
<!-- 其中 path 表示为请求的路径,view-name 表示为你需要做的资源操作 -->
<mvc:view-controller path="/" view-name="index" />
<!-- 设置使用注解的类所在的package(基本包)-->
<context:component-scan base-package="com.ssm.controller"/>
<!-- 静态资源映射 location是本地静态资源路径 mapping是映射的url地址,访问时就使用该地址 -->
<mvc:resources location="/WEB-INF/static/" mapping="/**" />
<!-- 配置视图解析器(不同的页面视图解析器不同此处以.jsp页面为例) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀 -->
<property name="prefix" value="/WEB-INF/pages/"/>
<!-- 配置后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码试 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 最大文件上传大小 -->
<property name="maxUploadSize" value="10485760"/>
</bean>
<!-- 实现图形验证码(注意下面拦截器放行图像验证)请求 -->
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.border">yes</prop><!--是否有边框 -->
<prop key="kaptcha.border.color">105,179,90</prop><!--设置边框颜色 -->
<!--验证码文本字符颜色 默认为 Color.BLACK-->
<prop key="kaptcha.textproducer.font.color">green</prop>
<prop key="kaptcha.session.key">code</prop><!--验证码 -->
<!--设置字体样式(优先选择宋体,如果不支持宋体,一些往后推) -->
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
<prop key="kaptcha.border.thickness"></prop><!--边框粗细度 默认为 1 -->
<!--验证码生成器 默认为 DefaultKaptcha -->
<prop key="kaptcha.producer.impl"></prop>
<!-- 验证码文本生成器 默认为 DefaultTextCreator -->
<prop key="kaptcha.textproducer.impl"></prop>
<!--验证码文本字符内容范围 默认为abcde2345678gfynmnpwx -->
<prop key="kaptcha.textproducer.char.string"></prop>
<!-- 验证码文本字符长度 默认为 5 -->
<prop key="kaptcha.textproducer.char.length">4</prop>
<!--验证码文本字符大小 默认为 40 -->
<prop key="kaptcha.textproducer.font.size">40</prop>
<!--验证码文本字符间距 默认为 2 -->
<prop key="kaptcha.textproducer.char.space">6</prop>
<!--验证码图片宽度 默认为 200 -->
<prop key="kaptcha.image.width">200</prop>
<!--验证码图片高度 默认为 40 -->
<prop key="kaptcha.image.height">50</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!--注意拦截的什么,放行的什么, 拦截所有,然后指定放行
放行项目中的所有静态资源,
放行登入页面,
放行登入后台
根据需求定义, 如果是商城,新闻等,
拦截的 url(必须登录才可以访问的资源)
/**包括路径及其子路径
如果是/admin/*-拦截的是/admin/add,/admin/list...但是
/admin/add/user 不被拦截
如果是/admin/**-拦截的是/admin 路径及其子路径
*/-->
<mvc:mapping path="/**"/>
<!-- 不拦截的 url(不需要登录就可以访问的资源) -->
<mvc:exclude-mapping path="/Public/**"/>
<mvc:exclude-mapping path="/Template/**"/>
<mvc:exclude-mapping path="/login/**"/>
<mvc:exclude-mapping path="/user/login/**"/>
<mvc:exclude-mapping path="/user/logout/**"/>
<!--放行图像验证码请求-->
<mvc:exclude-mapping path="/image/**"/>
<!--对应java中的拦截器,此处使用ref,bean,分层注解定义了名字为bean的-->
<ref bean="managerLoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
- 开启注解驱动等其它相关配置文件, applicationContext-service,xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 设置使用注解的类所在的package(基本包)-->
<context:component-scan base-package="com.ssm.service"/>
<context:component-scan base-package="com.ssm.interceptor"/>
</beans>
- mybatis开启二级缓存配置文件, config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置插件、配置二级缓存等 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 指定方言(指定数据库类型) -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
- 日志相关配置文件,log4j.properties
```javascript
#console log
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n
#logger
#log4j.logger.org.springframework=DEBUG,CONSOLE
#log4j.logger.org.hibernate=INFO,CONSOLE
#log4j.logger.org.apache=INFO,CONSOLE
log4j.rootLogger=DEBUG,CONSOLE
- 另外还有用来存放常量数据的配置文件,例如数据库连接,用户名密码等存放着一些服务的用户名密码,服务的ip地址等相关数据的配置文件
- 编写代码,不要忘记添加controller注解
八. idea配置jetty