8.4(SpringBootWeb篇)基本操作

SpringMVC自动配置概览

SpringBoot主要借助自动装配完成了很多简化的开发步骤。下面介绍SpingBoot简化了哪些SpringMVC开发

  1. 视图解析器
  2. 静态资源的访问
  3. 支持HttoMessageConverter消息转换报文
  4. 静态index.html支持
  5. 自定义的favicon图标

静态资源的访问

静态资源目录

类路径就是指我们的resources目录

在这里插入图片描述

类路径下:

/static (or /public or /resources or /META-INF/resources

都可以直接访问

static一般放静态资源(图片)(欢迎页面)等
public
resources
templates放置html页面针对thymeleaf模板引擎

原理

静态资源映射/**

请求进来先去匹配控制器(Controller中的请求映射)没有找到再去查找对应的 中的静态资源。

设置静态资源映射路径

#表示所有请求通过/res/** 进行匹配静态资源
#为静态资源加上前缀才可以访问
spring:
  mvc:
    static-path-pattern: /res/**

#表示指定一个文件夹作为静态资源目录
  resources:
    static-locations: [classpath:/haha/]

欢迎页

再静态资源目录下编写一个index页面。默认页就会自己去查找该页面

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>SpringBoot的index页面,默认是欢迎页</h1>

</body>
</html>

通过结果看到没有去指定准确页面。默认的欢迎页显示的是index页面

在这里插入图片描述

favicon.ion图标

直接将该图标放入SpringBoot的静态资源目录可以进行自动配置访问

在这里插入图片描述

注意index页面和favicon图标使用的时候不能结合一起使用

#表示所有请求通过/res/** 进行匹配静态资源
#为静态资源加上前缀才可以访问
spring:
  mvc:
    static-path-pattern: /res/**

四种请求方式的发送

我们再学习RestFul风格的时候知道了

可以进行相同的请求,不同的请求方式。从而实现不同的功能

浏览器可以直接发送get,post但是不能发送put和delete

此时需要借助代码来完成匹配PUT和DELETE的请求

操作

开启页面表单的rest功能

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true   #开启页面表单的Rest功能

页面中的添加隐藏指

<form action="/method" method="get"  >
    <button type="submit">get提交</button>
</form>

<form action="/method" method="post"  >
    <button type="submit">post提交</button>
</form>

<form action="/method" method="post"  >

    <input type="hidden" name="_method" value="PUT" >
    <button type="submit">put提交</button>
</form>

<form action="/method" method="post"  >

    <input type="hidden" name="_method" value="DELETE" >
    <button type="submit">delete提交</button>
</form>

测试

@ResponseBody
    @GetMapping("/method")
    public String method(){

        return "get";
    }

    @ResponseBody
    @PostMapping("/method")
    public String postmethod(){

        return "post";
    }

    @ResponseBody
    @PutMapping("/method")
    public String putmethod(){

        return "put";
    }

    @ResponseBody
    @DeleteMapping("/method")
    public String deletemethod(){

        return "delete";
    }

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Rest原理(表单提交要使用REST的时候)

  • 表单提交会带上**_method=PUT**

  • 请求过来被HiddenHttpMethodFilter拦截

    • 请求是否正常,并且是POST
      • 获取到**_method**的值。
      • 兼容以下请求;PUT.DELETE.PATCH
      • 原生request(post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值。
      • 过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用****requesWrapper的

请求/响应处理

基本注解

SpringBoot是基于Spring进行操作的,很多MVC的注解SpringBoot也是同样可以使用的。下面来一起复习一遍吧

@PathVariable()

@RequestMapping("/path/{id}")
//                                使用该注解对应restful风格路径
    public String pathVariable(@PathVariable("id") int id){

        return "";
    }

@RequestHeader

 @RequestMapping("/getHeader")
                                //获取指定的请求头值
    public String requestHeader(@RequestHeader("") String headervalue,
//                                获取所有的请求头值放入header集合中
                                @RequestHeader Map<String,String> header){
        return "";
    }

在这里插入图片描述

@RequestParam()

@RequestMapping("/getPrame")
    //                              获取指定的请求值
    public String requestParam(@RequestParam("") String paramvalue,
//                                获取所有的请求值放入param集合中
                                @RequestParam Map<String,String> param){
        return "";
    }

@cookievalue

 @RequestMapping("/getcookie")
    //                              获取指定的cookie值 返回值可以是String或cookie类型
    public String requestCookie( @CookieValue("_ga") String _ga,
                                @CookieValue("_ga") Cookie cookie){
        return "";
    }

@RequestBody()

  @PostMapping("/save")
    public Map postMethod(@RequestBody String content){
        Map<String,Object> map = new HashMap<>();
        map.put("content",content);
        return map;
    }

将所有的请求组合成一个字符进行输出

@RequestAttribute()

获取请求域中的值

请求域是多个请求通过转发,还在一个请求作用域中的共存数据

与请求参数是不同的概念
在这里插入图片描述

参数使用

SpringBoot根据Spring进行开发的,所以SpringMVC的参数SpringBoot也是同样可以使用

ServletAPI

我们可以使用ServletAPI作为参数进行获取请求中的值

复杂参数

Map

Model(map、model里面的数据会被放在request的请求域

RedirectAttributes( 重定向携带数据)

JavaBean参数

会进行自动的匹配,将请求中的值传递给javaBean

响应处理

@RequestBody

可以将响应结果不经过视图解析器,返回一个json处理

底层存在一个内容协商,可以去改变返回的形式,xml或json等数据格式

对于请求处理和响应处理源码解析存在于硅谷的雷神视频中特别优秀,建议看一看。我怕我描述的不明白这里就没有去写原理

试图解析器与模板引擎

视图解析:SpringBoot默认不支持 JSP,需要引入第三方模板引擎技术实现页面渲染。

因为SpringBoot一般打成直接执行的jar包。如果使用jsp打成的jar包可能不能访问

JSP搭建

当然我们可是可以进行配置JSP,从而实现搭建的

添加WEB模块

在这里插入图片描述

编写SpringBoot的配置

指定试图解析器的处理方式

spring:
  mvc:
    view:
      prefix: /WEB-INF/
      suffix: .jsp

结果

在这里插入图片描述

试图解析原理流程

1、目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面。包括数据和视图地址

2、方法的参数是一个自定义类型对象(从请求参数中确定的),把他重新放在 ModelAndViewContainer

3、任何目标方法执行完成以后都会返回 ModelAndView(数据和视图地址)。

**4、**processDispatchResult 处理派发结果(页面改如何响应)

  • 1、render(mv, request, response); 进行页面渲染逻辑

    • 1、根据方法的String返回值得到 View 对象【定义了页面的渲染逻辑】
      • 1、所有的视图解析器尝试是否能根据当前返回值得到View对象
      • 2、得到了 redirect:/main.html --> Thymeleaf new RedirectView()
      • 3、ContentNegotiationViewResolver 里面包含了下面所有的视图解析器,内部还是利用下面所有视图解析器得到视图对象。
      • 4、view.render(mv.getModelInternal(), request, response); 视图对象调用自定义的render进行页面渲染工作
        • RedirectView 如何渲染【重定向到一个页面】
        • 1、获取目标url地址
        • **2、**response.sendRedirect(encodedURL);

视图解析:

    • 返回值以 forward: 开始: new InternalResourceView(forwardUrl); --> 转发****request.getRequestDispatcher(path).forward(request, response);
    • 返回值以 redirect: 开始: new RedirectView() --》 render就是重定向
    • 返回值是普通字符串: new ThymeleafView()—>

自定义视图解析器+自定义视图; 大厂学院。

img

img

img

img

Thymeleaf搭建

SpringBoot是支持Thymeleaf的模板引擎的。所以默认再静态的目录下就可以进行指定

查看目录结构

在这里插入图片描述

添加Thymeleaf依赖

//这个依赖是为Thymeleaf模板引擎提供的
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

直接在静态资源目录下放入HTML页面进行指定

thymeleaf就是html页面作为的模板引擎

在这里插入图片描述

自动配好的策略

  • 1、所有thymeleaf的配置值都在 ThymeleafProperties

  • 2、配置好了 SpringTemplateEngine

  • 3、配好了 ThymeleafViewResolver

  • 4、我们只需要直接开发页面

底层的试图解析器

	public static final String DEFAULT_PREFIX = "classpath:/templates/";

	public static final String DEFAULT_SUFFIX = ".html";  //xxx.html

针对详细的Thymeleaf使用我再之后会进行查找编写的

针对详细的Thymeleaf使用我再之后会进行查找编写的

Spring Boot是一个流行的开源框架,它简化了构建独立、自包含的Spring应用的过程,尤其适合快速启动并部署基于MySQL 8.4的应用。MySQL 8.4作为开源的关系型数据库管理系统,提供了更高效的数据存储和查询功能。 在Spring Boot中集成MySQL 8.4的主要步骤如下: 1. **添加依赖**:在Maven或Gradle的build文件中添加Spring Data JPA和Spring JDBC相关的依赖。 Maven示例: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. **配置数据源**:在application.properties或application.yml文件中设置数据库连接信息,如URL、用户名和密码。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false spring.datasource.username=root spring.datasource.password=my-secret-pw ``` 3. **实体类映射**:定义Java实体类,并通过`@Entity`注解标记为JPA实体,同时使用`@Table`注解指定表名。 4. **创建仓库接口**:创建Repository接口,通常继承Spring Data JPA的CrudRepository,自动实现了CRUD操作。 5. **启用扫描**:在主类上添加`@EnableJpaRepositories`注解,让Spring Boot扫描并自动注册持久化层。 ```java @SpringBootApplication @EnableJpaRepositories(basePackages = "com.example.myapp.repository") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值