单体架构项目后端开发(1):后台系统搭建

文章目录

  • 1、项目架构
    • 1.1 前后端分离开发
      • 1.1.1 前后端分离架构介绍
      • 1.1.2 接口文档
        • 1.1.2.1 什么是接口文档?
        • 1.1.2.2 为什么要写接口文档?
        • 1.1.2.3 接口规范是什么?
      • 1.1.3 前后端分离架构的优势
        • 1.1.3.1 前后端耦合的开发方式
        • 1.1.3.2 前后端耦合的缺陷 (以JSP为例)
        • 1.1.3.3 前后端分离的开发方式
        • 1.1.3.4 前后端分离的优势
    • 1.2 技术选型
      • 1.2.1 前端技术选型
      • 1.2.2 后端技术选型
    • 1.3 项目开发环境
  • 2、Maven 项目管理工具
    • 2.1 Maven介绍
      • 2.1.1 什么是Maven
      • 2.1.2 Maven的作用
    • 2.2 Maven 的使用
      • 2.2.1 Maven软件的下载
      • 2.2.2 Maven软件的安装
      • 2.2.3 Maven环境变量配置
      • 2.2.4 Maven 软件版本测试
    • 2.3 Maven 仓库
      • 2.3.1 Maven的仓库分类
      • 2.3.2 Maven 本地仓库的配置
      • 2.3.3 配置阿里云远程仓库
    • 2.4 创建Maven项目
      • 2.4.1 IDEA中配置Maven
      • 2.4.2 创建Maven工程
      • 2.4.3 Maven工程改造
      • 2.4.4 pom核心配置文件
      • 2.4.5 添加插件
      • 2.4.6 运行Maven项目
      • 2.4.7 Maven的常用命令
      • 2.4.8 依赖范围介绍

1、项目架构

1.1 前后端分离开发

1.1.1 前后端分离架构介绍

  • 前后端分离已成为互联网项目开发的业界标准使用方式,将前端和后端的开发进行解耦。并且前后端分离会为以后的大型分布式架构、微服务架构、多端化服务(各种客户端,比如浏览器、车载终端、安卓、IOS等)打下坚实的基础。
  • 前后端分离的核心思想就是前端HTML页面通过AJAX调用后端的API接口,并通过JSON数据进行交互。
    单体架构项目后端开发(1):后台系统搭建_第1张图片

1.1.2 接口文档

1.1.2.1 什么是接口文档?

  • 在我们的项目中使用的是前后端分离开发方式,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直进行接口文档的维护。

1.1.2.2 为什么要写接口文档?

  1. 项目开发过程中前后端工程师有一个统一的文件进行沟通交流,并行开发。
  2. 项目维护中或者项目人员更迭,方便后期人员查看、维护。

1.1.2.3 接口规范是什么?

一个接口的描述至少包括下面几项:

  • 名称: findCourseList
  • 描述:根据条件查询课程信息
  • URL:http://localhost:8080/edu_home/course/
  • 请求方式:GET
  • 请求参数
methodName:"findCourseList";
  • 响应结果
{
    "status": "0",
    "msg": "success"
}

1.1.3 前后端分离架构的优势

1.1.3.1 前后端耦合的开发方式

  • 这种方式中 Java程序员又当爹又当妈,又搞前端,又搞后端。 正所谓术业有专攻,一个人如果什么都会,那么他肯定也什么都不精。
    单体架构项目后端开发(1):后台系统搭建_第2张图片

1.1.3.2 前后端耦合的缺陷 (以JSP为例)

  1. UI出好设计图之后,前端开发工程师只负责将设计图切成HTML,需要由Java开发工程师来将HTML套成JSP页面,修改问题的时候需要双方协同开发,效率低下。
  2. JSP页面必须要在支持Java的WEB服务器上运行(如Tomcat、Jetty等),无法使用Nginx等(官方宣称单实例HTTP并发高达5W),性能提升不上来。
  3. 第一次请求JSP,必须要在WEB服务器中编译成Servlet,第一次运行会较慢。 之后的每次请求JSP都是访问Servlet再用输出流输出的HTML页面,效率没有直接使用HTML高。

1.1.3.3 前后端分离的开发方式

单体架构项目后端开发(1):后台系统搭建_第3张图片

1.1.3.4 前后端分离的优势

  1. 前后端分离的模式下,如果发现Bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。
  2. 前后端分离可以减少后端服务器的并发/负载压力。除了接口以外的其他所有HTTP请求全部转移到前端Nginx上,接口的请求则转发调用Tomcat。
  3. 前后端分离的模式下,即使后端服务器暂时超时或宕机了,前端页面也会正常访问,只不过数据刷不出来而已。
  4. 前后端分离会更加合理的分配团队的工作量,减轻后端团队的工作量,提高了性能和可扩展性。

1.2 技术选型

1.2.1 前端技术选型

前端技术 说明
Vue.js 是一套用于构建用户界面的渐进式JavaScript框架
Element UI库 element-ui 是饿了么前端出品的基于 Vue.js的后台组件库,方便程序员进行页面快速布局和构建
node.js 简单的说 Node.js 就是运行在服务端的 JavaScript 运行环境
axios 对ajax的封装, 简单来说就是ajax技术实现了局部数据的刷新,axios实现了对ajax的封装

1.2.2 后端技术选型

后端技术 说明
Web层 a) Servlet:前端控制器
b) Filter:过滤器
c) BeanUtils:数据封装
Service层 a) 业务处理
dao层 a) Mysql:数据库
b) Druid:数据库连接池
c) DBUtils: 操作数据库

1.3 项目开发环境

  • 开发工具
    • 后端:IEDA 2019
    • 前端:VS code
    • 数据库:SQLYog
  • 开发环境
    • JDK 11
    • Maven 3.6.3
    • MySQL 5.7

2、Maven 项目管理工具

2.1 Maven介绍

2.1.1 什么是Maven

  • Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理。maven是Apache的顶级项目,解释为“专家,内行”,它是一个项目管理的工具,maven自身是纯java开发的,可以使用maven对java项目进行构建、依赖管理。

2.1.2 Maven的作用

  • 依赖管理
    • 依赖指的就是 我们项目中需要使用的第三方Jar包,一个大一点的工程往往需要几十上百个Jar包,按照我们之前的方式,每使用一种Jar,就需要导入到工程中,还要解决各种Jar冲突的问题。
    • Maven可以对Jar包进行统一的管理,包括快速引入Jar包,以及对使用的 Jar包进行统一的版本控制。
  • 一键构建项目
    • 之前我们创建项目,需要确定项目的目录结构,比如src 存放Java源码,resources存放配置文件,还要配置环境比如JDK的版本等等,如果有多个项目,那么就需要每次自己搞一套配置,十分麻烦。
    • Maven为我们提供了一个标准化的Java项目结构,我们可以通过Maven快速创建一个标准的Java项目。

2.2 Maven 的使用

2.2.1 Maven软件的下载

  • 使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。
  • 官网下载地址:http://maven.apache.org/download.cgi

2.2.2 Maven软件的安装

  • Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如:H:\software\maven 下面。 解压后目录结构如下:
    单体架构项目后端开发(1):后台系统搭建_第4张图片
  1. bin:存放了 maven 的命令;
  2. boot:存放了一些 maven 本身的引导程序,如类加载器等;
  3. conf:存放了 maven 的一些配置文件,如 setting.xml 文件;
  4. lib:存放了 maven 本身运行所需的一些 jar 包;

2.2.3 Maven环境变量配置

  1. 配置 MAVEN_HOME ,变量值就是你的 maven 安装的路径(bin 目录之前一级目录)。
    单体架构项目后端开发(1):后台系统搭建_第5张图片

  2. 将MAVEN_HOME 添加到Path系统变量。
    在这里插入图片描述

2.2.4 Maven 软件版本测试

  • 通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.6.3 及 java 版本为 jdk-11 即为安装 成功。 打开命令行,输入 mvn –v命令,如下图:
    单体架构项目后端开发(1):后台系统搭建_第6张图片

2.3 Maven 仓库

  • Maven中的仓库是用来存放maven构建的项目和各种依赖的(Jar包)。

2.3.1 Maven的仓库分类

  • 本地仓库:位于自己计算机中的仓库,用来存储从远程仓库或中央仓库下载的插件和 jar 包。
  • 远程仓库:需要联网才可以使用的仓库,阿里提供了一个免费的maven 远程仓库。
  • 中央仓库:在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中 央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。
    单体架构项目后端开发(1):后台系统搭建_第7张图片

2.3.2 Maven 本地仓库的配置

  1. maven仓库默认是在 C盘 .m2 目录下,建议不要将仓库放在C盘,所以这里要重新配置一下。

  2. 为了方便使用,老师为大家提供了一个本地仓库,将 “repository.rar”解压至自己的电脑上,我解压在 H:\software\repository 目录下(注意最好放在没有中文及空格的目录下)。
    单体架构项目后端开发(1):后台系统搭建_第8张图片

  3. 在maven安装目录中,进入 conf文件夹,可以看到一个 settings.xml 文件,在这个文件中,进行本地仓库的配置。
    单体架构项目后端开发(1):后台系统搭建_第9张图片

  4. 打开 settings.xml文件,进行如下配置如下:
    单体架构项目后端开发(1):后台系统搭建_第10张图片

2.3.3 配置阿里云远程仓库

  • Maven默认的远程仓库是在国外,所以下载jar包时速度会非常慢,这里推荐使用阿里云仓库。
  • 打开 settings.xml,找到 标签 , 下面的内容复制到 中即可。
<mirror>
    <id>alimavenid>
    <name>aliyun mavenname>
    <url>
        http://maven.aliyun.com/nexus/content/groups/public/
    url>
    <mirrorOf>centralmirrorOf>        
mirror>

2.4 创建Maven项目

2.4.1 IDEA中配置Maven

  1. 打开IDEA 创建一个新的project
    在这里插入图片描述

  2. 起名为web_work
    单体架构项目后端开发(1):后台系统搭建_第11张图片

  3. 首先打开IDEA 选择File --> Settings --> 搜素maven,就会看到如下界面
    单体架构项目后端开发(1):后台系统搭建_第12张图片

  4. 修改默认配置
    单体架构项目后端开发(1):后台系统搭建_第13张图片

2.4.2 创建Maven工程

在IDEA中配置好maven后,接下来我们使用maven去快速的去构建一个 JavaWeb项目

  1. project创建好以后,选择创建module
    单体架构项目后端开发(1):后台系统搭建_第14张图片

  2. 选中创建一个 maven 工程
    单体架构项目后端开发(1):后台系统搭建_第15张图片

  3. 点击 Next填写项目信息
    单体架构项目后端开发(1):后台系统搭建_第16张图片

进行一下修改
单体架构项目后端开发(1):后台系统搭建_第17张图片

  1. 创建好的工程,长这个样子
    单体架构项目后端开发(1):后台系统搭建_第18张图片
    Maven目录说明:
src/main/java 		 —— 存放项目的.java 文件 
src/main/resources 	 —— 存放项目资源文件,如数据库的配置文件 
src/test/java 		—— 存放所有单元测试.java 文件,如 JUnit 测试类 
target 			    —— 项目输出位置,编译后的class 文件会输出到此目录 
pom.xml              —— maven 项目核心配置文件

2.4.3 Maven工程改造

当前创建的maven项目是一个 普通的Java项目,不是web项目,需要进行一下改造

  1. 在main目录下创建一个webapp文件夹
    单体架构项目后端开发(1):后台系统搭建_第19张图片

  2. 选择 project Structure —> facets—> 点击+号 添加web —> 选择当前工程hello_maven
    单体架构项目后端开发(1):后台系统搭建_第20张图片

  3. 修改路径信息
    修改前
    单体架构项目后端开发(1):后台系统搭建_第21张图片

  4. 修改为 我们的 webapp目录
    修改后
    单体架构项目后端开发(1):后台系统搭建_第22张图片

  5. 点击ok 后,项目就变为了web项目,在webapp目录下再创建一个 index.jsp,就OK了
    单体架构项目后端开发(1):后台系统搭建_第23张图片

2.4.4 pom核心配置文件

一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的信息、项目依赖、引入插件等。

  1. 创建一个Servlet,缺少jar包报错,要解决问题,就是要将 servlet-api-xxx.jar 包放进来,作为 maven 工程应当添加 servlet的坐标,从而导入它的 jar。
    在这里插入图片描述

  2. pom.xml 文件中引入依赖包的坐标。


<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.0modelVersion>

    <groupId>com.lagougroupId>
    <artifactId>hello_mavenartifactId>
    <version>1.0-SNAPSHOTversion>

    <dependencies>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>servlet-apiartifactId>
            <version>3.1.0version>
        dependency>
    dependencies>

project>
  1. 一个Maven工程就是由groupIdartifactIdversion 作为唯一标识,我们在引用其他第三方库的时候,也是通过这3个变量确定。

    • 坐标的概念
      • 在maven中坐标就是为了定位一个唯一确定的jar包。
      • maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范,拥有了统一规范,就可以把查找工作交给机器。
    • Maven坐标主要组成(GAV) - 确定一个jar在互联网位置。
标签 含义
groupId 定义当前Maven组织名称,通常是公司名
artifactId 定义实际项目名称
version 定义当前项目的当前版本
packaging 打包类型
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
dependency 使用 声明一个依赖后,Maven就会自动下载这个依赖包
  1. maven 的依赖管理,是对项目所依赖的 jar 包进行统一管理。
标签 含义
dependencies 表示依赖关系
dependency 使用 声明一个依赖后,Maven就会自动下载这个依赖包
<dependencies>
    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>servlet-apiartifactId>
        <version>3.1.0version>
    dependency>
dependencies>	
  1. 坐标的来源方式
    添加依赖需要指定依赖 jar 包的坐标,但是很多情况我们是不知道 jar 包的的坐标,可以通过如下方式查询:
    从网站中搜索即可
    5.1)输入网址,进入网址 , 进行查询
https://mvnrepository.com/

单体架构项目后端开发(1):后台系统搭建_第24张图片

5.2)点击进入后,可以看到各个版本的信息,选择3.1.0
单体架构项目后端开发(1):后台系统搭建_第25张图片

2.4.5 添加插件

  • 添加编译插件,设置 jdk 编译版本
    这里需要使用 maven 的插件来设置编译版本
    在pom中加入如下配置:

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        
        <maven.compiler.source>11maven.compiler.source>
        <maven.compiler.target>11maven.compiler.target>
    properties>

    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.8.1version>
                <configuration>
                    <release>11release>
                configuration>
            plugin>
        plugins>
    build>

2.4.6 运行Maven项目

  1. 完善项目代码
    ServletDemo01
@WebServlet("/demo01")
public class ServletDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello maven!!!!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
	}
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Titletitle>
head>
<body>
    <h1>这是我的第一个maven工程!h1>
body>
html>
  1. 配置tomcat,部署项目
    单体架构项目后端开发(1):后台系统搭建_第26张图片
    单体架构项目后端开发(1):后台系统搭建_第27张图片

  2. 运行项目,默认访问 index.jsp
    单体架构项目后端开发(1):后台系统搭建_第28张图片

  3. 访问Servlet

http://localhost:8080/hello_maven/demo01

2.4.7 Maven的常用命令

  1. 一个maven项目生命周期
    使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期,如下所示是生命周期的各阶段:
    在这里插入图片描述
    maven 通过执行一些简单命令即可实现上边生命周期的各个过程。
命令 说明
mvn compile 完成编译操作 , 执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。
mvn clean 执行完毕后,会将target目录删除。
mvn test 执行完毕后,会在target目录中生成三个文件夹:
surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)
mvn package 完成打包操作,执行完毕后,会在target目录中生成一个文件,该文件可能是 jar、war
mvn install 执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作,执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用。
  1. idea中安装好maven后,在界面左侧有一个maven视图,里面有对应的命令插件,可以执行上面表格中的命令。
    单体架构项目后端开发(1):后台系统搭建_第29张图片

  2. 工具栏介绍
    单体架构项目后端开发(1):后台系统搭建_第30张图片

1.根据pom.xml文件重新导入所有Maven项目和依赖,刷新
2.创建源码(重新编译)并更新目录
3.下载源码或文档
4.添加Maven项目
5.执行生命周期中的阶段,选中lifecycle选项中生命周期中的一个阶段(phase),才能点击执行。
6.运行Maven生命周期或插件
7.切换离线模式,就是关闭和远程仓库的链接,从本地仓库中获取,也不能将jar包提交到远程仓库
8.是否跳过测试,点击选中就可以跳过测试,再点击选中取消跳过测试
9.展示当前选中的maven项目jar包的依赖,并且可以直接在图形化依赖图上进行排除依赖操作
10.收起下面展开的视图
11.跳转到maven的Setting页面

2.4.8 依赖范围介绍

  1. A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
依赖范围 说明
compile 编译范围,指 A在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
provided provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。
runtime runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
test test 范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以test范围依赖不会被打包。
system system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。
  1. 项目中添加的坐标,并指定依赖范围。
<dependencies>
	<dependency>
	    
	    <groupId>javax.servletgroupId>
	    
	    <artifactId>servlet-apiartifactId>
	    
	    <version>3.1.0version>
	
	    <scope>providedscope>
	dependency>
	
	<dependency>
	    <groupId>javax.servlet.jspgroupId>
	    <artifactId>jsp-apiartifactId>
	    <version>2.1.2version>
	    <scope>providedscope>
	dependency>
	
	<dependency>
	    <groupId>junitgroupId>
	    <artifactId>junitartifactId>
	    <version>4.13version>
	
	    
	    <scope>testscope>
	dependency>
dependencies>

你可能感兴趣的:(单体架构项目开发学习笔记,java,maven,后端,项目架构,面试)