Web应用概述

Web技术基础

目前市面上的软件主要可分为两种:

  • BS:(Browser/Server,浏览器/服务器架构模式)。
  • CS:(Client/Server,客户端/服务器架构模式)。

架构对比

  • C/S架构主要特点是交互性强,具有安全访问模式,网络流量低,响应速度快,
    因为客户端负责大多数业务逻辑和UI演示,所以也被称为胖客户端,C/S结构的
    软件需要针对不同的操作系统开发不同版本的软件。
  • 随着互联网的兴起,CS架构不适合Web,最大的原因是Web应用程序的修改和
    升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,
    Browser/Server模式开始流行,简称BS架构。
  • B/S架构的主要特点是分散性高、维护方便、开发简单、共享性高、总拥有成本低

BS架构原理

在BS架构下,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。
浏览器只需要请求服务器,获取Web页面,并把Web页面展示给用户即可。

Alt text

开发工具

JDK : (Java Development Kit) Java 开发工具包

IDEA : 编辑器

Maven:是一个项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理。

Maven的作用可以分成三类:

  • 项目构建:提供标准的,跨平台的自动化构建项目的方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突
    等问题
  • 统一开发结构:提供标准的,统一的项目开发结构,

本地仓库配置

  • 修改maven安装包中的conf/settings.xml文件,指定本地仓库位置。
  <!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\utils\maven\repository</localRepository>

远程仓库配置

  • maven默认连接的远程仓库位置并不在国内,因此有时候下载速度非常慢,我
    们可以配置一个国内站点镜像,可用于加速下载资源。
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>

Web入门

控制器

  • Spring Boot提供了@Controller和@RestController两种注解来标识此类负责
    接收和处理HTTP请求。
  • 如果请求的是页面和数据,使用@Controller注解即可;如果只是请求数据,
    则可以使用@RestController注解

@RestController注解会将返回的对象数据转换为JSON格式。

路由映射

  • @RequestMapping的value属性用于匹配URL映射,value支持简单表达式
    @RequestMapping(“/user”)
  • @RequestMapping支持使用通配符匹配URL,用于统一映射某些URL规则类
    似的请求:@RequestMapping(“/getJson/*.json”),当在浏览器中请求
    /getJson/a.json或者/getJson/b.json时都会匹配到后台的Json方法
  • @RequestMapping的通配符匹配非常简单实用,支持“”“?”“*”等通
    配符
  • 符号“”匹配任意字符,符号“*”匹配任意路径,符号“?”匹配单个字符。
  • 有通配符的优先级低于没有通配符的,比如/user/add.json比/user/*.json优先
    匹配。
  • 有“*”通配符的优先级低于有“”通配符的

Method匹配

  • HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部
    Method
  • @RequestMapping注解提供了method参数指定请求的Method类型,包括
    RequestMethod.GET、RequestMethod.POST、RequestMethod.DELETE、
    RequestMethod.PUT等值,分别对应HTTP请求的Method
  • Method匹配也可以使用@GetMapping、@PostMapping等注解代替

例如 : @RequestMapping(value = "/User", method = RequestMethod.GET) ===> @GetMapping("/User")

参数传递

  • @RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自
    HTTP请求体或请求url的QueryString,当请求的参数名称与Controller的业务
    方法参数名称一致时,@RequestParam可以省略
  • @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法
    的参数
  • @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理
    非 Content-Type: application/x-www-form-urlencoded编码格式的数据,
    比如:application/jsonapplication/xml等类型的数据

静态资源访问

  • 使用IDEA创建Spring Boot项目,会默认创建出classpath:/static/目录,静态
    资源一般放在这个目录下即可。
  • 如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤
    策略。
  • 在application.properties中直接定义过滤规则和静态资源位置:
  • 过滤规则为/static/**,静态资源位置为classpath:/static/

//过滤规则
spring.mvc.static-path-pattern=/static/**

//静态资源位置
spring.web.resources.static-locations=classpath:/static/

SpringBoot

SpringBoot 特点

  • 遵循“约定优于配置”的原则,只需要很少的配置或使用默认的配置。
  • 能够使用内嵌的Tomcat、Jetty服务器,不需要部署war文件。
  • 提供定制化的启动器Starters,简化Maven配置,开箱即用。
  • 纯Java配置,没有代码生成,也不需要XML配置。
  • 提供了生产级的服务监控方案,如安全监控、应用监控、健康检测等

开发环境热部署

  • 在实际的项目开发调试过程中会频繁地修改后台类文件,导致需要重新编译、
    重新启动,整个过程非常麻烦,影响开发效率。
  • Spring Boot提供了spring-boot-devtools组件,使得无须手动重启Spring
    Boot应用即可重新编译、启动项目,大大缩短编译启动的时间。
  • devtools会监听classpath下的文件变动,触发Restart类加载器重新加载该类,
    从而实现类文件和属性文件的热部署。
  • 并不是所有的更改都需要重启应用(如静态资源、视图模板),可以通过设置
    spring.devtools.restart.exclude属性来指定一些文件或目录的修改不用重启应应用

使用optional=true表示依赖不会传递,即该项目依赖devtools;其他项目如
果引入此项目生成的JAR包,则不会包含devtool

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

在application.properties中配置devtools

spring.devtools.restart.enabled = true
spring.devtools.restart.additional-paths=src/main/java

Mybatis-plus使用与mysql数据库的连接

(MyBatis-Plus)[https://mp.baomidou.com/] 是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

 <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>

#druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#数据库用户
spring.datasource.username=root
#数据库密码
spring.datasource.password=****
# mysql8 连接要设置时区
spring.datasource.url=jdbc:mysql://localhost:3306/hams?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
#数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#显示sql操作
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

Swagger2接口文档使用

前后端分离的项目开发中,后台写好的接口在跟前端对接测试的时候,往往很麻烦,需要自己编写接口文档,接口参数,响应数据等等。当接口更改后,又要手动去更改接口文档,久而久之就会忘记或者搞得接口和文档不一致。Swagger的诞生就是为了解决这个痛点。


<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>

#解决swagger2与springboot不兼容问题
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

测试网站:Swagger2