对于一个大型的项目,如果我们直接作为一个工程开发,由于相互之间的依赖我们只能从头到尾由一组人开发,否则就会出现一个类好多人开发,相互更改的混乱局面,这个时候我们就将项目进行了横向和纵向的拆分。
横向拆分
所谓的横向的拆分就是我们平常说的三层架构,将每个功能模块分成三层去开发
即web层(表现层),service层(业务逻辑层)、dao层(数据访问层、持久层),
可以理解为将一个功能模块的不同调用过程(三层的调用)进行了水平方向的拆分。
纵向拆分
所谓的纵向拆分就是将一个项目根据多个功能模块进行拆分,可以理解为,为了完成一个系统,深度(纵向)分析需要有哪些功能,然后将这些功能独立出来(独立为模块),进行了(纵向)拆分。
横向和纵向拆分后,对每层架构和功能模块进行单独的开发,项目整合的时候就需要有一个能够整合这些架构或者模块的工程,这就是所谓聚合工程的意义。
1、说到继承肯定是一个父子结构,首先要创建一个parent project;
2、<packaging>:作为父模块的pom,其打包类型必须是pom;
3、结构:父模块本身就是为了消除子模块中依赖的冗余性,所以不需要src/main/java和src/test/java等目录;
4、新的元素:<parent>,是在子模块中用来继承父模块的;
5、<parent>元素的属性:<relativePath>表示父模块中pom的相对路径,在构建的时候maven会先根据<relativePath>检查父模块pom,如果找不到,再从本地仓库中查找;
6、<relativePath>的默认值:../pom.xml;
7、子模块省略groupId和version:在子模块中可以不声明groupId和version两个元素,子模块将隐式的继承父模块中的groupId和version元素。
8、继承能够提高代码的复用性,还可以让项目更加安全。
<!-- properties:统一管理版本号 -->
<properties>
<junit.version>4.12</junit.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- version:引用上面properties中配置的版本号 -->
<version>${
junit.version}</version>
<scope>test</scope>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</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>
</dependencies>
</dependencyManagement>
首先在ebuy-pojo模块中创建com.ebuy.pojo包,其次创建UsersInfo类
-
package com.ebuy.pojo;
/**
* @author 一宿君(CSDN:qq_52596258)
* @date 2021年05月23日 16时40分04秒
* 用户信息实体类
*/
public class UsersInfo {
private int userid;
private String username;
private String userpwd;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
@Override
public String toString() {
return "UsersInfo{" +
"userid=" + userid +
", username='" + username + '\'' +
", userpwd='" + userpwd + '\'' +
'}';
}
}
然后在ebuy-dao模块中创建com.ebuy.dao包,在下面创UsersInfoDao接口,在接口定义方法getUsers()
package com.ebuy.dao;
import com.ebuy.pojo.UsersInfo;
/**
* @author 一宿君(CSDN : qq_52596258)
* @date 2021-05-23 16:52:20
*/
public interface UsersInfoDao {
/*用于获取UsersInfo用户信息*/
public UsersInfo getUsers();
}
然后在ebuy-service模块中创建com.ebuy.service包,然后在下面创建UsersInfoDao接口的实现类UsersInfoService,然后重写方法getUsers()
package com.ebuy.service;
import com.ebuy.dao.UsersInfoDao;
import com.ebuy.pojo.UsersInfo;
/**
* @author 一宿君(CSDN : qq_52596258)
* @date 2021-05-23 16:55:09
*/
public class UsersInfoService implements UsersInfoDao {
public UsersInfo getUsers() {
UsersInfo usersInfo = new UsersInfo();
usersInfo.setUserid(1001);
usersInfo.setUsername("张三");
usersInfo.setUserpwd("123456");
return usersInfo;
}
}
然后在ebuy-servlet模块中创建com.ebuy.servlet包,继承HttpServlet类,重写doGet()和doPost()方法。
首先要将有关jsp的相关依赖引入到ebuy-servlet的pom.xml文件中,在此处引用的全是ebuy-parent中的依赖,version版本是通过jstl标签的形式获取的。
<dependencies>
<!--servlet层依赖service层-->
<dependency>
<groupId>com.ebuy</groupId>
<artifactId>ebuy-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</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>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- version:引用上面properties中配置的版本号 -->
<version>${
junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
package com.ebuy.servlet;
import com.ebuy.service.UsersInfoService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 一宿君(CSDN : qq_52596258)
* @date 2021-05-23 16:57:11
*/
public class UsersInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UsersInfoService usersInfoService = new UsersInfoService();
System.out.println(usersInfoService.getUsers());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
最后还需在web.xml文件中配置下servlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>usersinfo</servlet-name>
<servlet-class>com.ebuy.servlet.UsersInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>usersinfo</servlet-name>
<url-pattern>/usersinfoServlet</url-pattern>
</servlet-mapping>
</web-app>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.9</maven.compiler.source>
<maven.compiler.target>1.9</maven.compiler.target>
</properties>
在项目中使用Maven可以大大简化开发及构建的过程,一旦产品线庞大,包含的项目及模块繁多时,各模块间版本管理就会产生不一致现象,从而给维护及开发带来了不少难题。Maven的聚合特性可以帮助我们把项目的多个模块聚合在一起,使用一条命令完成构建。