SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

news2025/4/22 5:43:44

目录

【SpringBoot日志】

什么是日志,日志的作用

关于日志的基本信息,又有哪些呢?

关于日志的级别

Springboot内置SLF4J【门面模式】 和 logback【日志框架】  

 在配置文件中可以设置日志级别【以.yml为例】

SpringBoot 持久化的保存日志

更简单的书写博客流程【添加lombok,使用@Slf4j注解,自动生成log日志对象,可以直接使用】

【SpringMVC】

创建SpringMVC项目

 SpringMVC应用流程

第一步获取连接的五种基本方式

第二步获取参数

获取单个参数、多个参数、对象 

consumes、produces、@RequestBody

 @RequestParam后端参数重命名   获取?后的参数

获取路径里的参数PathVariable   获取?前的参数

上传文件@ @RequestPart

 获取Cookie/header/Session

第三步返回响应

 返回静态页面【注意在路径中的"/"表示从根目录找页面,不加即在本文件查找文件】

 如果不返回静态页面,而是返回数据(无论是Json还是其他数据,springboot会帮我们适配)

返回跳转的地址【请求转发,请求重定向】

【Idea设置热部署全流程】

第一步 在SpringBoot项目中添加devtools

第二步打开settings打开自动编译的选项【注意有两个settings一个是本项目,一个是其他新项目】

第三步 在本项目settings中勾选


【SpringBoot日志】

什么是日志,日志的作用

在项目启动运行时,会发现在响应框里有如下此类信息,这些就是日志。

日志的作用:

        1.记录错误日志和警告日志(发现和定位问题)

        2.用户日志

        3.系统日志

        4.程序执行日志

关于日志的基本信息,又有哪些呢?

关于日志的级别

⽇志的级别分为:
低   trace:微量,少许的意思,级别最低;
 |     debug:需要调试时候的关键信息打印;
 |     info:普通的打印信息(默认⽇志级别);
 |     warn:警告,不影响使⽤,但需要注意的问题;
 |     error:错误信息,级别较⾼的错误⽇志信息;
高   fatal:致命的,因为代码异常导致程序退出执⾏的事件。【一般为系统设置】

Springboot内置SLF4J【门面模式】 和 logback【日志框架】  

对于日志的框架大致有三种,log4j1/2、JUL、logback。对于SpringBoot来说,通过SLF4J的简单的日志门面,SLF4J帮助完成后续的 logback 日志书写

 在配置文件中可以设置日志级别【以.yml为例】

logging:
  level:
    root: error
    com:
      example:
        demo:
          Controller: trace;

在不同级下可以设置不同的日志级别,上述代码在 root 级别上设置了 error 级别,在 Controller 上设置了 trace 级别。当只有日志的级别高于所设定的级别,在响应框内才会打印。【当root设置为error 重启项目,会发现没有日志的打印,因为第一次启动发现的日志都是低于 error】

SpringBoot 持久化的保存日志

 1.设置日志的保存路径

2.设置日志保存名称

编写日志

package com.example.demo.Controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 97175
 * Date: 2023-10-08
 * Time: 16:43
 */
@Controller
@ResponseBody
public class TestController {
    @RequestMapping("/mapping")
    public String sayHi(){
        return("serverPort->"+serverPort+"  spring.datasource.url"+url);
    }
    @Value("${server.port}")
    private int serverPort;
    @Value("${spring.datasource.url}")
    private String url;

    //1.获取日志对象
    private static Logger logger = LoggerFactory.getLogger(TestController.class);
    @RequestMapping("/print")
    public String sayHello(){
        //2.使用日志对象打印日志
        logger.trace("================= trace ===============");
        logger.debug("================= debug ===============");
        logger.info("================= info ===============");
        logger.warn("================= warn ===============");
        logger.error("================= error ===============");
        return "Hello,"+url;
    }

}

更简单的书写博客流程【添加lombok,使用@Slf4j注解,自动生成log日志对象,可以直接使用】

【SpringMVC】

经常听到别人做项目要用到SSM,什么是SSM?

SSM-> Spring + Spring MVC +MyBatis[老说法] 

SSM-> SpringBoot + SpringWeb(springMVC)+MyBatis[新说法]

        其中一般项目中不单独使用Spring框架,一般情况下是直接搭建SpringBoot框架原因很简单,注解写起来更快更方便。新版和旧版都有的部分就是SpringMVC和MyBatis,SpringMVC就是可以通过浏览器建立数据的存取工作,相当于JavaEE初阶所学的Servlet,我们会发现在新版中多了一个SpringWeb框架,这个框架是方便于搭建SpringMVC的过程,在老说法中直接在项目中搭建SpringMVC,直接搭建浏览器存取工作是十分繁琐的,所有诞生了SpringWeb框架帮助我们更好的实现浏览器请求响应等工作。MyBatis方便于数据库存取工作,在之后的博客也会详细提到。

简单总结一下什么是SpringMVC?

SpringMVC=接受浏览器的请求,获取浏览器的参数,给浏览器响应,即建立与浏览器的连接。

创建SpringMVC项目

有时候项目不能很好的识别出创建的是一个maven项目,所以需要手动添加maven 

 SpringMVC应用流程

第一步获取连接的五种基本方式

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 97175
 * Date: 2023-10-23
 * Time: 14:04
 */
@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {

    @RequestMapping("/say")
    public String sayHi(){
        return "Hi SpringMVC RequestMapping Get/Post";
    }
    @RequestMapping(value = "/say2",method = RequestMethod.POST)
    public String sayHi2(){
        return "Hi SpringMVC RequestMapping Get";
    }

    @PostMapping("/say3")
    public String sayHi3(){
        return "Hi StringMVC PostMapping Post";
    }
    @RequestMapping(value = "/say4",method = RequestMethod.GET)
    public String sayHi4(){
        return "Hi SpringMVC RequestMapping Get";
    }
    @GetMapping("/say5")
    public String sayHi5(){
        return "Hi StingMVC GET";
    }
}

在浏览器输入say模拟实现get请求

 因为浏览器只能发送get请求所以我们用postman模拟发送post请求  

第二步获取参数

获取单个参数、多个参数、对象 
package com.example.demo.controller;

import com.example.demo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 97175
 * Date: 2023-10-23
 * Time: 14:04
 */
@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {

    @RequestMapping("/getName") //获取一个参数
    public String printName(String name){
        return "printName:"+name;
    }

    @RequestMapping("/getNameAge") //获取多个参数
    public String printNameAge(String name,String age){
        return "printNameAge:"+name+" "+age;
    }
    @RequestMapping("/getUser") //获取一个对象
    public String getUser(User user){
        return user.toString();
    }
}
package com.example.demo.entity;

import lombok.Data;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 97175
 * Date: 2023-10-23
 * Time: 16:26
 */
@Data
public class User {
    private int age;
    private String name;
}

需要注意的是要在url里的变量名要与程序书写的变量名保持一致

consumes、produces、@RequestBody

 consumes用来指定只能接收什么样子的对象,produces用来指定返回什么格式的对象例如Json格式

package com.example.demo.controller;

import com.example.demo.entity.User;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 97175
 * Date: 2023-10-23
 * Time: 14:04
 */
@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {

  
    //consumes用来指定只能接收什么样子的对象,produces用来指定返回什么格式的对象例如Json格式
    @RequestMapping(value = "/getUser2",consumes = "application/json",produces = "application/json")
    public User getUser2( @RequestBody User user){//用于接收json格式的对象需要添加@RequestBody注解
        return user;
    }

}

 @RequestParam后端参数重命名   获取?后的参数
@RequestMapping("/getNameAge") //获取多个参数
    public String printNameAge(@RequestParam("username")String name,String age){
        return "printNameAge:"+name+" "+age;
    }

获取路径里的参数PathVariable   获取?前的参数
@RequestMapping("/test/{name}/{password}")
    public String test_pathVariable(@PathVariable("name") String name,@PathVariable("password")String password){
        return "name:"+name+"password:"+password;

    }

 

上传文件@ @RequestPart
@RequestMapping("/myupload")
    public Object upload(@RequestPart("myimg")MultipartFile file) throws IOException {
        File saveFile = new File("A:\\home\\myimg.jpg");
        try{
            file.transferTo(saveFile);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

 

当我们上传多个文件的时候会发现后一个文件会覆盖前一个文件,究其原因就是文件名相同都是myimg.jpg,所以添加如下代码使上传文件名各不相同。【原理UUID通用唯一识别码 参考【精选】UUID详细介绍-CSDN博客】

String fileName = UUID.randomUUID()+ // 文件名
                file.getOriginalFilename().substring( // 文件后缀
                        file.getOriginalFilename().lastIndexOf("."));
        File saveFile = new File("A:\\home\\"+fileName);

 重新用postman来发送存储文件的请求,再次打开对应文件夹

 获取Cookie/header/Session

简洁的获取Cookie

@RequestMapping("/getck")
    public Object getCk(@CookieValue(value = "java",required = false)String java){
        return java;
    }

简单的获取header

    @RequestMapping("/gethd")
    public Object getHd(@RequestHeader(value = "User-Agent",required = false)String ua){
        return ua;
    }

简单的获取Session

private static final String key = "key1";
    @RequestMapping("/setsession")
    public void setSession(HttpServletRequest request){
        HttpSession session = request.getSession();
        session.setAttribute(key,"value");
    }
    @RequestMapping("/getsession")
    public Object getSession(@SessionAttribute(key)String name){
        return "session->"+name;
    }

第三步返回响应

 返回静态页面【注意在路径中的"/"表示从根目录找页面,不加即在本文件查找文件】
@Controller
@RequestMapping("/test")
public class TestController {
    @RequestMapping("/index")
    public Object getIndex(){
        return "/index.html";
    }
}
 如果不返回静态页面,而是返回数据(无论是Json还是其他数据,springboot会帮我们适配)

加上@ResponseBody

@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {
返回跳转的地址【请求转发,请求重定向】

返回请求转发 forward:/

@RequestMapping("fw")
    public String fw(){ //返回请求转发
        return "forward:/index.html";
    }

返回请求转发 redirect:/

@RequestMapping("/rd")
    public String rd(){ //返回请求重定向
        return "redirect:/index.html";
    }

【Idea设置热部署全流程】

第一步 在SpringBoot项目中添加devtools

第二步打开settings打开自动编译的选项【注意有两个settings一个是本项目,一个是其他新项目】

第三步 在本项目settings中勾选

第四步 开启debug就可以了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT图形视图框架绘制曲线图和Smith图

QT图形视图框架绘制曲线图和Smith图 QGraphicsView是Qt框架中的一个图形视图部件,用于显示和处理2D图形元素。它提供了强大的工具来创建交互式和自定义的图形应用程序。在绘制折线图和Smith图时,使用QGraphicsView有以下一些优点: 交互性&am…

二叉树题目:最大二叉树 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:最大二叉树 II 出处:998. 最大二叉树 II 难度 5 级 题目描述 要求 如果一个树满足其中每个结点的值…

【Python学习】—Python基础语法(六)

一、数据容器 Python中的数据容器:一种可以容纳多份数据的数据类型,容纳的每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。 二、list列表 列表的下标索引 嵌套列表的下标 my_list[aaa,1,True] print(my_list[0]) p…

电压检测芯片如何发挥作用,保护电路?纳米软件为您介绍工作原理

电压检测芯片是一种常见的集成电路芯片,用来监测电路中的电压变化,防止电路受到过电压和欠电压的损坏。电源电压检测芯片被广泛应用于各种电子设备中,比如手机、电脑、家电等,在电压监测、电源管理、电池电量检测、温度检测、电压…

3D模型怎么贴法线贴图?

1、法线贴图的原理? 法线贴图(normal mapping)是一种计算机图形技术,用于在低多边形模型上模拟高多边形模型的细节效果。它通过在纹理坐标上存储和应用法线向量的信息来实现。 法线贴图的原理基于光照模型。在渲染过程中&#x…

云表低代码:数字化转型的新风口,你了解多少?

自2019年起,低代码开发平台骤然引发热议,成为了科技领域的新宠。关于其定义和影响力,众说纷纭。有人将它誉为第四代编程语言,有人视它为开发模式的颠覆者,更有人认为它引领了企业管理模式的变革。这股热潮在社区内引发…

BIOS MBR UEFI GPT详解

先来看下名词 启动方式: Legacy:传统的。指的就是BIOS。 BIOS:Basic Input Output System,中文名称"基本输入输出系统"。 UEFI:Unified Extensible Firmware Interface,中文名称"统一的…

获取IEEE会议论文的标题和摘要

获取IEEE会议论文的标题和摘要 – 潘登同学的爬虫笔记 文章目录 获取IEEE会议论文的标题和摘要 -- 潘登同学的爬虫笔记 打开IEEE的高级搜索环境准备完整爬虫过程获取文章地址翻译函数获取文章标题和摘要 前几天接到导师的一个任务,要我去找找IEEE Transactions on K…

用低代码平台代替Excel搭建进销存管理系统

目录 一、用低代码平台搭建系统 1.需求调研 2.基于痛点梳理业务流程 3.低代码实现 (1)基础资料模块 (2)采购管理模块 (3)销售管理模块 (4)库存管理模块 (5&…

快手联合阿里云构建容器混合云架构,轻松应对百万级秒杀

云布道师 摘要:快手电商在 2023 年某大 V 大促直播活动中,首次采用混合云弹性调度架构,应对大 V 百万级别秒杀峰值的计算资源需求。此次为【快手容器云 阿里云】的深度技术结合,在【快手电商直播秒杀】场景下的大规模首次应用。既…

Calcite 解析层详解

1、概述 用户的操作请求经过服务层的接收和封装被传递给calcite-core模块。 其中第一站就是解析层,它的作用主要是对SQL语句进行语法解析。 在这个过程中,初始的SQL字符串会被转化为Calcite内部的语法解析节点,为进一步的语法校验和优化做…

建筑木模板厂家直销 915*1830*15mm酚醛面板规格

建筑木模板在建筑施工中扮演着重要的角色,它是支撑混凝土浇筑和保证建筑结构稳定性的关键材料。作为一家专业的建筑木模板厂家直销商,我们引以为傲地推出了915*1830*15mm酚醛面板规格的产品。 我们的建筑木模板采用高质量的酚醛树脂胶粘剂和优质桉木木材…

低代码平台是什么意思?低代码平台如何设计与实现?

低代码这个词,也许许多人都相当陌生。低代码的正式提出可以追溯到2014年,当时全球最具影响力的独立研究咨询公司Forrester,正式界定了低代码的概念。低代码指可通过最少的手工编程就能快速交付应用程序,并能快速设置和部署用于参与…

centos启动tomcat 并指定jdk 版本

在tomcat的catalina.sh文件手动设置JAVA_HOME变量即可 例如: 前提是文件存在 保存配置重新启动tomcat

短说通用版V4.1.0测试版发布|新增全新马甲模块等新功能

大家好, 我是给你们带来惊喜的运营小番茄。 本期更新为短说通用版 4.1.0测试版。 本次V4.1.0版本新增功能有: ①学院免费课程支持发布评价 ②商城子系统商品支持使用积分抵扣 ③新增管理后台查看和导出评论功能 ④支持设置积分类型展示排序功能 …

记录一次时序数据库的实战测试

0x1.前言 ​ 本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。文中涉及漏洞均以提交至教育漏洞平台。 0x2.背景 ​ 在某…

99%的时间里使用的14个git命令

学习14个Git命令,因为你将会在99%的时间里使用它们 必须了解的命令整理 1,git init 初始化一个新的Git仓库。 这将在当前目录中创建一个名为".git"的子目录,Git会将所有仓库的元数据存储在其中。 2,git clone 克隆…

【unity3D】Rect Transform组件

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Rect Transform组件 Rect Transform组件 基础知识详细介绍补充 基础知识 Rect Transform是Unity中的一个UI组件,用于…

商淘云:如何选择开源B2B2C多用户商城系统

选择开源B2B2C多用户商城系统是一个关键的决策,因为它将直接影响到您的电子商务平台的性能、功能和用户体验。以下是一些指导原则,可帮助您做出明智的选择。 首先,考虑系统的稳定性和安全性 选择一个经过广泛测试和验证的开源系统&#xff0…

node读取文件和获取路径

01.fs模块-读写文件 模块:类似插件,封装了方法和属性供我们使用 fs 模块:封装了与本机文件系统进行交互的,方法和属性 fs 模块使用语法如下:【fs模块为node自带,不需要手动安装】 加载 fs 模块&#xff0…