Spring boot项目前后端分离开发的基础知识和基本环境配置

2 篇文章 0 订阅
2 篇文章 0 订阅

 

  • Java EE企业级框架:SpringBoot+MyBatisPlus(用spring boot开发web应用)

  • web前端核心框架:Vue+ElementUI(可以实现前后端分离开发)

  • 公共云部署:前后端项目集成打包与部署

web技术基础

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

  • BS(Browser/Sever,浏览器/服务器架构模式)更火!

    1. 因此,Browser/Server模式开始流行,简称BS架构, B/S架构的主要特点是分散性高、维护方便、开发简单、共享性高、总拥有成本低。

  • CS(Client/Server,客户端/服务器架构模式)

    1. C/S架构主要特点是交互性强,具有安全访问模式,网络流量低,响应速度快。

    2. 客户端负责绝大数的事情。因为客户端负责大多数业务逻辑和UI演示,所以也被称为胖客户端 ,C/S结构的软件需要针对不同的操作系统开发不同版本的软件。

    3. 随着互联网的兴起,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App。

2204e3a43ac94abd8f6be04dc6bb16e1.png

 

BS架构的原理

 

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

5cafd0fca22847fcb124c4e72666aff4.png

后端开发指:web服务器开发+数据库服务器开发

maven

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

 

maven的功能

  1. 项目构建:帮我们自动下载依赖(pom.xml[核心的配置文件]),提供标准的、跨平台的自动化构建项目的方式

  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突

  3. 统一开发结果:提供标准的,统一的项目开发结构(Java代码放Java目录,测试放test目录,webapp放web的项目)

maven仓库

运行maven项目时,maven所需要的任何构件都是从本地仓库获取,如果本地仓库没有的话,它会尝试从远程仓库下载构件至本地仓库

 

c578c653c18c45f2b78237100e8759dd.pngeb9c6d52131944509c3441b1d405ce17.png

springboot介绍(需要有Java基础)

  • Spring Boot是由Pivotal团队提供的基于Spring的全新框架,旨在简化Spring应用(有很多个pom文件)的初始搭建和开发过程。

  • Spring Boot是所有基于Spring开发项目的起点

  • Spring Boot就是尽可能地简化应用开发的门槛,让应用开发、测试、部署变得更加简单。

1. springboot特点:

  1. 遵循“约定优于配置”的原则,只需要很少的配置或使用默认的配置。

  2. 能够使用内嵌的Tomcat、Jetty服务器,不需要部署war文件;(具有内嵌的服务器)

  3. 提供定制化的启动器Starters,简化Maven配置,,不用写这么多依赖配置,开箱即用。

  4. 纯Java配置,没有代码生成,也不需要XML配置。

  5. 提供了生产级的服务监控方案,如安全监控、应用监控、健康检测等。

2. 创建项目————填写项目信息

  • Group:填入公司域名

  • Artifact:项目名称

     package com.example.demo.controller;
     ​
     import org.springframework.web.bind.annotation.GetMapping;
     import org.springframework.web.bind.annotation.RestController;
     ​
     @RestController//接受客户端信息并返回信息
     public class HelloController {
         //http://www.baidu.com/s/xx
         //本机域名:http://localhost:8080/hello
         @GetMapping("/hello")
         public String hello() {
             return "Hello World!";
         }
     }
     ​
     //控制器

57e8060ffe3548a6b9a146e57f306b99.png

4522b19592394978b8f2b700aa7c5b11.png

3. 开发项目的热部署(修改代码,自动重启项目编译)

减少重启时间

  • 在实际的项目开发调试过程中会频繁地修改后台类文件,导致需要重新编译重新启动,整个过程非常麻烦,影响开发效率

  • Spring Boot提供了spring-boot-devtools组件,使得无须手动重启SpringBoot应用即可重新编译、启动项目,大大缩短编译启动的时间。

  • devtools会监听classpath下的文件变动,触发Restart类加载器重新加载该类从而实现类文件和属性文件的热部署。

  • 并不是所有的更改都需要重启应用(如静态资源、视图模板),可以通过设置spring.devtools.restart.exclude属性来指定一些文件或目录的修改不用重启应用

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

f4da6f5f9409488fbdc6ecbd10b32a29.png

de49c4bf8ceb4cd58680a2b4ddf5d3ee.png

 server.port=8080
 spring.devtools.restart.enabled=true
 spring.devtools.restart.additional-paths=src/main/java
 ​

开发环境热部署

  1. 如果使用了Eclipse,那么在修改完代码并保存之后,项目将自动编译并触发重启,而如果使用了IntelliJIDEA,还需要配置项目自动编译。

  2. 打开Settings页面,在左边的菜单栏依次找到Build,Execution,Deployment→Compile,勾选Build project automatically按Ctrl+Shift+Alt+/快捷键调出Maintenance页面,单击Registry,勾选compiler.automake.allow.when.app.running复选框。

  3. 做完这两步配置之后,若开发者再次在IntelliJIDEA中修改代码,则项目会自动重启。

web入门

  • Spring Boot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。

  • 创建SpringBoot项目勾选Spring Web选项后,会自动将spring-boot-starter-web组件加入到项目中。 spring-boot-starter-web启动器主要包括web、webmvc、ison、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。

  • webmvc为Web开发的基础框架,json为JSON数据解析组件,tomcat为自带的容器依赖。

 //启动器 
 <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>

1. 控制器

mvc的设计模式32120444cdbf4394bf05267eb23bf59e.png

 

view(视图)显示数据 html的页面

Model(封装、储存数据)

Controller(负责协调和控制)接受用户请求

  1. Spring Boot提供了@Controller和@RestController两种注解来标识此类负责接收和处理HTTP请求。(用于创建控制器)

  2. 如果请求的是页面和数据,使用@Controller注解即可;如果只是请求数据则可以使用@RestController注解。

@Controller

  1. 示例中返回了hello页面和name的数据,在前端页面中可以通过${name}参数获取后台返回的数据并显示。

  2. @Controller通常与Thymeleaf模板引擎结合使用。

 @Controllerpublic 
 class Hellocontroller {
 @RequestMapping("/hello")
     public String index(ModelMap map){
         map.addAttribute( attributeName: "name", attributeValue: "zhangsan");
         return "hello";//返回页面
     }
 }

@RestController

  • 默认情况下,@RestController注解会将返回的对象数据转换为JSON格式。

 @RestController
 public class Hellocontroller {
 @RequestMapping(©~"/user")
     public User getUser(){
       User user =new User();
       user.setUsername("zhangsan");
       user.setPassword("123");
       return user;
     }
 }

2.路由映射(控制器接受前端请求)

  1. @RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上。

  2. 如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效。

@RequestMapping

注解包含很多属性参数来定义HTTP的请求映射规则,常用的属性参数如下:

  • value:请求URL的路径,支持URL模板、正则表达式 (配置路径)

  • method: HTTP请求方法、规定前端请求方式

  • consumes:请求的媒体类型(Content-Type),如application/json

  • produces: 响应的媒体类型params,headers: 请求的参数及请求头的值

    1. @RequestMapping的value属性用于匹配URL映射,value支持简单表达式@RequestMapping("/user")

    2. @RequestMapping支持使用通配符匹配URL,用于统一映射某些URL规则类似的请求:

       @RequestMapping("/getJson/*.json"),
        当在浏览器中请求/getJson/a.json或者/qetJson/b.json时都会匹配到后台的Json方法
    3. @RequestMapping的通配符匹配非常简单实用,支持 “*” “**“ ”?“等通配符

    4. 符号 * 匹配任意字符(单词),符号 ** 匹配任意路径,符号“?”匹配单个字符。

    5. 有通配符的优先级低于没有通配符的,比如/user/add.json比/user/*.json优先匹配。

    6. 有 ** 通配符的优先级低于有 * 通配符的。

Method匹配

  1. HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部Method

  2. @RequestMapping注解提供了method参数指定请求的Method类型,包括RequestMethod.GET、RequestMethod.POST、RequestMethod.DELETE、RequestMethod.PUT等值,分别对应HTTP请求的Method

 @RequestMapping(value = "/getData",method = RequestMethod.GET)
 public string getData(){
        return "hello";
 }
  1. Method匹配也可以使用@GetMapping、@PostMapping等注解代替.

两种方式:

  @RequestMapping(value = "/hello",method = RequestMethod.GET)
  @GetMapping("/hello")

3. 参数传递

  1. @RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求体或请求url的QueryString,当请求的参数名称与Controler的业务方法参数名称一致时,@RequestParam可以省略

  2. @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数

  3. @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据比如:application/jsonapplication/xml等类型的数据

例子:

 public class HelloController {
     //http://www.baidu.com/s/xx
     //本机域名:http://localhost:8080/hello
     //@GetMapping("/hello")
     //http://localhost:8080/hello?nickname=Aloogy&phone=123
     @RequestMapping(value = "/hello",method = RequestMethod.GET)
 ​
     public String hello(String nickname,String phone) {
         System.out.println(phone);
         return "你好"+nickname +"世界";
     }
 }
 ​

79b8bada1538434a9bd0b33ffba82934.png

4. apipost测试

  @RequestMapping(value = "/postTest2", method = RequestMethod.POST)
     public String postTest2(String username,String password) {
         System.out.println("username:" + username);
         System.out.println("password:" + password);
         return "Post请求";
     }

593db74ee2754c8bb49cacfc8f68e387.png

c92895c4038344ff9861b5194feed0ab.png

22968bbfd2124905a061194853f688ff.png

5. 控制类代码(controller):

 package com.example.demo.controller;
 ​
 import com.example.demo.demos.web.User;
 import org.springframework.web.bind.annotation.*;
 ​
 @RestController
 public class ParamsController {
     @RequestMapping(value = "/getTest1", method = RequestMethod.GET)
     public String getTest1() {
         return "Get请求";
     }
 ​
     @RequestMapping(value = "/getTest2", method = RequestMethod.GET)
 //http://localhost:8080/getTest2?nickname=zhangsan&phone=123456
     public String getTest2(String nickname, String phone) {
         System.out.println("nickname:" + nickname);
         System.out.println("phone:" + phone);
         return "Get请求";
     }
 ​
     @RequestMapping(value = "/getTest3", method = RequestMethod.GET)
 //http://localhost:8080/getTest2?nickname=zhangsan&phone=123456
     //@RequestParam参数映射
     public String getTest3(@RequestParam(value = "nickname", required = false) String nickname) {
         System.out.println("nickname:" + nickname);
         return "Get请求";
     }
 ​
     @RequestMapping(value = "/postTest1", method = RequestMethod.POST)
     public String postTest1() {
         return "Post请求";
     }
     @RequestMapping(value = "/postTest2", method = RequestMethod.POST)
     public String postTest2(String username,String password) {
         System.out.println("username:" + username);
         System.out.println("password:" + password);
         return "Post请求";
     }
     @RequestMapping(value = "/postTest3", method = RequestMethod.POST)
     public String postTest2(User user) {
         System.out.println(user);
         return "Post请求";
     }
     @RequestMapping(value = "/postTest4", method = RequestMethod.POST)
     public String postTest4(@RequestBody User user){
         System.out.println(user);
         return "Post请求";
     }
    
 }

6. 实体类代码(entity)

 package com.example.demo.entity;
 //封装到实体类
 //把接收的参数放这里
 //属性的名称要一致
 public class User {
     private String username;
     private String password;
 ​
     public String getUsername() {
         return username;
     }
 ​
     public void setUsername(String username) {
         this.username = username;
     }
 ​
     public String getPassword() {
         return password;
     }
 ​
     public void setPassword(String password) {
         this.password = password;
     }
 ​
     @Override
     public String toString() {
         return "User{" +
                 "username='" + username + '\'' +
                 ", password='" + password + '\'' +
                 '}';
     }
 }
 ​

7. 通配符请求

  @GetMapping("/test/**")
     public String test(){
         return "通配符请求";
     }

f9d95afac7954df0941b5630ff05ee2d.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值