博主也是在学习,看到一篇博客,自己一边学习,一边写下了这篇博客
项目模块划分
- ycshop-parent: 父工程, 其打包方式是 pom, 主要管理 jar 包的版本号。 项目中的所有工程都应该继承父工程。
- ycshop-common: 存放一些通用的工具类。 其打包方式为 jar, 被其他的工程所依赖。
- ycshop-pojo: 存放 pojo 对象, 其打包方式是 jar。
- ycshop-manager: 服务层工程, 又称之为聚合工程或 pom 工程。
- ycshop-manager-dto: 数据传输对象。 (继承自 tyh-pojo 对象)
- ycshop-manager-dao: 这是一个独立的模块, 其打包方式是 jar。
- ycshop-manager-interfaces: 打包方式是 jar。
- ycshop-manager-service: 打包方式是 war, 主要为了方便部署。
- ycshop-manager-web: 表现层工程, 打包方式是 war。
搭建工程
1. 在这里我使用 maven 来搭建 ycshop-parent 这个父工程。
tyh-parent 本身就是一个父工程,所以它不需要继承其他的工程, 我们主要在父工程中定义依赖 jar 包的版本和 Maven 插件的版本信息。 注意, 此处我使用的 maven 是 apache-maven-3.3.9 这个版本。
首先点击【File】 菜单选项, 并在下拉框中选中【New】 , 接着点击【Other】!
修改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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.12</junit.version>
<slf4j.version>1.6.4</slf4j.version>
<!-- spring 使用 4 版本, spring5 需要 JDK1.8 与 tomcat7 插件有冲突 -->
<spring.version>4.3.18.RELEASE</spring.version>
<aspectj.version>1.9.1</aspectj.version>
<aopalliance.version>1.0</aopalliance.version>
<mysql-connector.version>5.1.46</mysql-connector.version>
<c3p0.version>0.9.5.2</c3p0.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<jackson.version>2.9.6</jackson.version>
<fileupload.version>1.3.3</fileupload.version>
<mybatis.version>3.4.6</mybatis.version>
<mybatis-spring.version>1.3.1</mybatis-spring.version>
<pagehelper.version>5.1.2</pagehelper.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- spring 相关依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</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-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aop 相关 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>${aopalliance.version}</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!-- c3p0 连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- 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>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${fileupload.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis 与 spring 继承 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- 分页组件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置 Tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Pom.xml 文件说明:
1、 <dependencyManagement>节点: 依赖管理, 管理的就是 jar 包的版本号, 它里面并
不是真正的依赖, 如果你继承 ycshop-parent 这个工程, 会发现什么 jar 包也没有依赖过来。 工
程中用到的所有 jar 包都应该在这里有定义。
2、 <scope>provided</scope>属性: 除了打包时不打包, 部署时也不会部署; 别的时候
都会全程参与, 编译、 测试、 运行时候都会用到。 因为我们要把这个 war 包部署到 tomcat
里面去, tomcat 里面都会提供 servlet 和 jsp 的 API, 如果把它也打包到 war 包里面, 可能会
有冲突。
3、 <pluginManagement>节点: pluginManagemen 也是管理插件的版本, 这里面并不是
对插件实际的依赖, 而只是管理插件的版本。
2. 搭建 ycshop-common 工程
ycshop-common 工程主要存放通用的工具类, 它本身是一个子工程, 所以它需要继承父工
程, 并且它的打包方式是 jar。 注意, ycshop-common 工程并不是一个独立的模块。
与创建 ycshop-parent 项目一样的操作方式, 创建一个【maven project】 。
修改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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-common</artifactId>
<!-- 依赖 jar 包:先只添加单元测试和日志处理的 jar 包依赖 -->
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
</dependencies>
</project>
3.搭建 ycshop-pojo 工程
ycshop-pojo 工程主要存放项目中通用的 pojo 对象。
和创建ycshop-commom工程同样的方法创建一个名为“ycshop-pojo”的maven工程
修改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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-pojo</artifactId>
<!-- 依赖 jar 包:先只添加单元测试的 jar 包依赖 -->
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4. 搭建 ycshop-manager 工程
搭建 ycshop-manager 工程, 这是后台管理子项目服务工程。 这个工程里面需要很多模块,
我们须把这些模块单独拆分, 所以它应该是一个聚合工程。
聚合工程选择 pom 打包形式。 并选择父项目 ycshop-parent
修改pom文件,使其依赖于ycshop-common和ycshop-pojo工程
<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>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-manager</artifactId>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-pojo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
5.搭建 ycshop-manager-dto 模块工程
此模块作为一个辅助的jar包,不需要其他的依赖。
6.搭建ycshop-manager-dao模块工程
搭建 tyh-manager-dao 模块的步骤同上面 tyh-manager-dto 一样, 只不过是模块名字改为
tyh-manager-dao 而已。
修改pom文件,添加dao层所需依赖
<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>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-manager-dao</artifactId>
<dependencies>
<!-- 对 dto 的依赖 -->
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager-dto</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- c3p0 连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<!-- mybatis 与 spring 集成 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- 分页组件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
</dependencies>
</project>
7.搭建 ycshop-manager-interfaces 模块工程
ycshop-manager-interfaces 模块为 service 模块的接口模块。
搭建方式与 dao 模块的搭建方式一致, 打包方式为 jar 包方式。(此处省略)
修改pom文件,使其依赖于dto和dao两个模块。
<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>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-manager-interfaces</artifactId>
<dependencies>
<!-- 对 dto 的依赖 -->
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager-dto</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 对 dao 的依赖 -->
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
8.搭建 ycshop-manager-service 模块工程
该模块是个 war 工程, 既然 tyh-manager 工程是个聚合工程, 故可以聚合无数个模块,
但是总归要靠一个 war 工程来将所有的模块聚合起来, 因此我们才需要新建一个 war 工程,
将来用于部署使用(可以单独部署 service 应用做到前后端分离) 。
此时工程会报错,是因为缺少web.xml文件
在图中的webapp文件夹下创建WEB-INF文件夹,在他下面创建一个xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
</web-app>
此时已近解决了报错的问题,接下来开始添加依赖——服务处需要调用dao层,所以要依赖于dao,另外还需要使用spring,
<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>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-manager-service</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- 对 dao 的依赖 -->
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 对接口的依赖 -->
<dependency>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-manager-interfaces</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- spring 相关依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!-- aop 相关 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
</dependency>
</dependencies>
</project>
9.搭建 ycshop-manager-web 工程
ycshop-manager-web 工程虽然从名称上看好像是一个 ycshop-manager 的子工程。 但是在创建
的时候为了让服务和前端页面分离开来, 最好是将 web 工程单独作为一个项目, 不要作为
聚合工程的子工程
因为是war打包方式,同样会报错,解决方式和service一样
修改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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.yuechenc</groupId>
<artifactId>ycshop-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ycshop-manager-web</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- spring 相关依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency><!-- aop 相关 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
到此,我们的第一个系统架构就算是搭建完成了
10.使用 maven tomcat 插件启动工程
如果要运行 web 工程, 按照传统的方式应该是将其发布到一个 tomcat 服务器中, 然后
启动服务器来运行这个工程。
但是在这里我们应该在其 pom.xml 文件中配置一个 maven 的 tomcat 插件。 那么为什么
要使用 maven tomcat 插件来启动 web 工程呢?
这是因为在互联网项目中, 动辄十几个甚至好几十个 web 工程, 如果按照传统的添加
tomcat 服务器的方式来启动的话, 那么我们为了避免端口冲突, 每增加一个 web 工程都要
修改三个端口, 非常麻烦。 而使用 maven tomcat 插件来启动工程, 则只需改一个端口即可,
显然简单了很多。
先来看 web 工程。 它可以独立运行, 那么应该怎么运行呢?
为了方便测试, 在 webapp 文件夹下, 创建一个 Index.jsp 文件。 如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎进入越宸阁!</h1>
</body>
</html>
在web工程的pom文件中加入tomcat插件
<!-- 配置 tomcat 插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
说明:
1、 其中<path>/<path>
的意思是输入完 localhost:端口号之后便可以直接访问工程首页了
2、 <port>8080</port>
的意思是指定该 web 工程的访问端口号。
此时我们最好对之前的项目都进行install使其重新编译
因为项目之间存在依赖关系,所以最好按照创建顺序依次install
下面,我们启动项目
在 Goals 输入框中输入: clean tomcat7:run, 点击【Apply】 和【Run】 来运行该 web 工程。
运行完成,会在控制台打印出运行的url和端口
最后,我们在浏览器中访问此url
11.使用 maven tomcat 插件启动聚合工程
与上一节基本一样。 在 ycshop-manager 项目 pom.xml 中配置 tomcat 插件。 并修改其端口,
与 web 项目端口不同。
<!-- 配置 tomcat 插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8081</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
和启动web同样的方法启动manager项目
此时会打印出8081端口的url
到此我们的工程就算是搭建完成了。
下一篇,将会对整个系统进行ssm框架的整合