SpringBoot学习笔记(1)

1.Web技术基础

        BS:(Browser/Server,浏览器/服务器架构模式)。C/S架构主要特点是交互性强,具有安全访问模式,网络流量低,响应速度快,因为客户端负责大多数业务逻辑和UI演示,所以也被称为胖客户端,C/S结构的软件需要针对不同的操作系统开发不同版本的软件。

        CS:(Client/Server,客户端/服务器架构模式)。随着互联网的兴起,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,Browser/Server模式开始流行,简称BS架构。B/S架构的主要特点是分散性高、维护方便、开发简单、共享性高、总拥有成本低。

2.BS架构原理

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

3.SpringBoot

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

        能够使用内嵌的Tomcat、Jetty服务器,不需要部署war文件。

        提供定制化的启动器Starters,简化Maven配置,开箱即用。

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

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

3.1 pom.xml

        pom.xml是Maven项目的核心配置文件,它是 项目对象模型 - Project Object Model(POM)的缩写。

全面详解Maven的配置文件pom.xml(含常用plugin)_maven pom.xml-CSDN博客

3.2 resources目录

        存放web资源。static主要存放静态资源,如图片、css、js等;templates主要存放html等;        

application.properties:

05全局配置文件application.properties详解-CSDN博客

        application.properties与 application.yaml都可以作为Spring Boot的配置文件,只是书写格式不同而已,在 Spring Boot 启动时被自动读取。当然也可以同时使用,但同级目录下读取的顺序是先读取application.properties,读取application.yaml。该配置文件的存放路径如下图所示。

3.3 控制器

        Spring Boot提供了@Controller@RestController两种注解来标识此类负责接收和处理HTTP请求。

        如果请求的是页面和数据,使用@Controller注解即可;

        如果只是请求数据,则可以使用@RestController注解(本文使用)。

3.3.1 @RestController注解使用

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

3.3.2 实践

        在包下创建Controller包,再创建controller的class,@RestController是对控制器的标记,代表这个类已经变成了一个控制器,可用于接收客户端的请求了;

        加上请求@GetMapping("/hello")来访问这个方法,括号内的是链接地址:"/hello"

        浏览器:        /http://localhost:8080/hello        (这是本地访问,后续如果部署到云端后可以写别的域名。)

@RestController    //控制器的标记
public class contrller {

    //http://localhost:8080/hello?nickname=xinge&phone=123456
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    //该方法等价于:
    //@GetMapping("/hello")
    public String Hello(){    //添加方法

        return "你好";

    }
}

        如果使用@Controller注解,则需要返回一个html页面,即在return中去找一个名为hello的html文件。

4. 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、json、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。        

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

 4.1 路由映射

        控制器通过路由映射接收请求。

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

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

4.1.1 请求方法

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

        value: 请求URL的路径,支持URL模板、正则表达式

        method: HTTP请求方法

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

        produces: 响应的媒体类型

        params,headers: 请求的参数及请求头的值

4.1.2 value匹配

        @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优先匹配。         

        有“**”通配符的优先级低于有“*”通配符的。

4.1.3 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等注解代替。

@RestController    //控制器的标记
public class contrller {

    //http://localhost:8080/hello?nickname=xinge&phone=123456
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    //只能接受GET请求
    public String Hello(){    //添加方法

        return "你好";

    }
}

4.2参数专递

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

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

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

4.2.1 参数传递

        zhangsan的名字被传递给了nickname这个的参数。

@RestController
public class contrller {

    //http://localhost:8080/hello?nickname=xinge&phone=123456
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    //该方法等价于:
    //@GetMapping("/hello")
    public String Hello(String nickname,String phone){
        System.out.println(phone);
        return "你好" + nickname;

    }
}
4.2.2 get请求
4.2.2.1 例1
@RestController
public class TestController {

    @RequestMapping(value = "/getTest01",method = RequestMethod.GET)
    public String getTest01(){

        return "GET请求";
    }
}

4.2.2.2 例2
@RestController
public class TestController {

    @RequestMapping(value = "/getTest01",method = RequestMethod.GET)
    public String getTest01(){

        return "GET请求";
    }
    @RequestMapping(value = "/getTest02",method = RequestMethod.GET)
    //http://localhost:8080/getTest02?nickname=zhagsan&phone=123
    public String getTest02(String nickname,String phone){
        System.out.println(phone);
        return "你好呀" + nickname;
    }
}

 

 如果传递过来的参数名称和方法的名称不一致该怎么办?

4.2.2.3 例3

传过来的是nickname,而方法定义的是name;

        在定义前面加一个注解如下:(@RequestParam(value = "nickname")

注意:如果加了@RequestParam的注解,则代表该参数是必须的,即必须传递这个参数

@RestController
public class TestController {


    @RequestMapping(value = "/getTest03",method = RequestMethod.GET)
    //http://localhost:8080/getTest03?nickname=XXX
    public String getTest03(@RequestParam(value = "nickname") String name){
        //将name与Nickname绑定
        //required = false表示可以不传递
        System.out.println("nackname:" + name);
        return "GET请求";
    }
}

报错:400 

         如果想不一定传递这个参数,那么可以加一个required = false,即(@RequestParam(value = "nickname",required = false)

    @RequestMapping(value = "/getTest03",method = RequestMethod.GET)
    //http://localhost:8080/getTest03?nickname=XXX
    public String getTest03(@RequestParam(value = "nickname",required = false) String name){
        //将name与Nickname绑定
        //required = false表示可以不传递
        System.out.println("nackname:" + name);
        return "GET请求";
    }
 4.2.2.4 例3.5
    @GetMapping("/test/**")
    public String test04(){
        return "通配符请求";
    }

 "**" 代表后面可以跟任意字符、任意级。

"*" 代表后面可以跟任意字符、1级。

4.2.3 post请求
4.2.3.1 例4

模拟前端发送username和password参数

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

 终端显示:

也可以把信息放到请求体里,也可以放到url后面(如下)

  4.2.3.2 例5.把许多参数封装到对象里去(实体entity)

        创建entity类User(保证类里的属性名称和传输过来的参数名称一致

User类:

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 + '\'' +
                '}';
    }
}

 类的传递:

    @RequestMapping(value = "/posttest02",method = RequestMethod.POST)
    public String postTest02(User user){
        System.out.println(user);
        return "POST请求02";
    }

发送请求: 

 

 当然也可以在类里面封装更多对象,方便传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值