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

目录

【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: errorcom: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.mzph.cn/news/119761.shtml

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

相关文章

【ARM Coresight 系列文章19.2 -- Cortex-A720 AMU 详细介绍】

文章目录 1.1 PMU 与 AMU1.2 AMU 介绍1.2.1 AMU 编程模型1.2.2 AMU 的访问1.2.3 Activity monitors counters1.1 PMU 与 AMU A-Prolifile 构架中的 Performance Monitoring Unit(PMU)和Activity Monitoring Unit(AMU)都具有性能计数器。AMU和PMU可以计数的事件类似,那么AMU…

紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理

紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理 参考链接: 一文梳理国产芯片巨头:紫光集团https://zhuanlan.zhihu.com/p/578232102 紫光展锐发展史,曾经的热血海归们如今都去哪了? 然而早在2013年和2014年,展讯和锐迪科就分别被紫光收购。相隔一…

客户端负载均衡策略:loadBalancer,ribbon

客户端负载均衡是指在分布式系统中,客户端通过某种策略将请求分发到多个服务提供者实例上,以达到负载均衡和提高系统的可用性和性能。 在 Java 生态系统中,Ribbon 是一个常用的客户端负载均衡框架,它是 Netflix 开源的一部分&…

Echarts 实现 设备运行状态图(甘特图) 工业大数据展示

let option{tooltip: {formatter: function (params) {let startTime new Date(params.value[1])let endTime new Date(params.value[2]);//北京时间/时间戳转成日常时间function convert(date){var y date.getFullYear();var m date.getMonth() 1;m m < 10 ? "0…

DBOW概要理解与记录

前言 DBOW作为一种视觉回环技术被广泛应用在各类VSLAM框架中&#xff0c;之前的经验主要集中在使用和抽象理解层面&#xff0c;近期花了一些时间仔细阅读了相关论文和源码&#xff0c;这里做一些记录。 两个关键概念 Vocabulary 通过预先训练得到的词汇库&#xff0c;以树状…

rust OJ实战

目录 力扣 414. 第三大的数 力扣 628. 三个数的最大乘积 力扣 414. 第三大的数 给你一个非空数组&#xff0c;返回此数组中 第三大的数 。如果不存在&#xff0c;则返回数组中最大的数。 示例 1&#xff1a; 输入&#xff1a;[3, 2, 1] 输出&#xff1a;1 解释&#xff1a;…

LeetCode217——存在重复元素

LeetCode217——存在重复元素 1.题目描述&#xff1a; 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 2.Result01(暴力解) public static boolean containsDuplicate(in…

在Go项目中封装AES加解密客户端接口

1.摘要 在一个中型以上的项目中, 我们一般会在项目工程中开辟一个pkg文件夹用来存放一些基础工具接口,比如:数据库、中间件、加解密算法、基础协议等等。在这篇文章中, 我主要分享一下在基于Go语言的项目中, 加解密算法中如何封装一个通用的加解密接口, 并以使用比较广泛的AES…

机器学习2(Numpy)

1、numpy ndarray 案例演示 可以在创建的时候就指定元素类型 生成0/1数组 从现有数组中生成 生成固定数组 生成随机数组

如何将 huggingface上的模型文件下载到本地

写在前面 缘由&#xff1a;国内的GPU服务器直接调取 huggingface 上模型经常会失败&#xff0c;因此下载到本地就能免去许多麻烦。 方法三基于知乎上一位博主所提出方法的基础上进行改进&#xff0c;可以将huggingface上模型由 Colab 存进 谷歌云盘 或者 百度云盘。特别是有些…

ThinkPHP6 多应用模式之验证码模块的配置与验证

Thinphp6 官方的验证码模块的配置是有问题的&#xff0c;或者说需要手工配置。 在配置期间&#xff0c;我尝试了多种&#xff08;包括按照官方文档、路由等&#xff09;方法都验证失败。 存在2个问题&#xff1a; 1、多应用模式下&#xff0c;验证码的配置文件依然读取全局的…

项目管理之如何有效定义项目目标

项目目标管理是项目管理中非常重要的一个环节&#xff0c;它可以帮助项目团队明确目标&#xff0c;制定合理可行的计划&#xff0c;确保项目顺利实施并取得成功。在定义项目目标时&#xff0c;需要遵循SMART原则&#xff0c;确保目标具体、明确、可衡量、可实现、相关且有时间和…

基于ssm的宠物医院管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

简单8位CPU设计verilog微处理器,源码/视频

名称&#xff1a;8位CPU设计微处理器 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 设计一个简单的处理器&#xff0c;可以实现加减法以及简单的逻辑运算。 设计包括程序计数器电路&#xff0c;指令存储器电路&#xff0c;指令译码器电路(控制器…

Java Boolean类,Java Character类,Java Number类

Boolean 类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean 类的对象只包含一个类型为 boolean 的字段。此外&#xff0c;此类还为 boolean 和 String 的相互转换提供了很多方法&#xff0c;并提供了处理 boolean 时非常有用的其他一些常用方法。 Boolean 类的构造方…

nginx浏览器缓存和上流缓存expires指令_nginx配置HTTPS

1.nginx控制浏览器缓存是针对于静态资源[js,css,图片等] 1.1 expires指令 location /static {alias/home/imooc;#设置浏览器缓存10s过期expires 10s;#设置浏览器缓存时间晚上22:30分过期expires @22h30m;#设置浏览器缓存1小时候过期expires -1h;#设置浏览器不缓存expires …

在python里如何实现switch函数的功能

在许多编程语言中&#xff0c;包括Python&#xff0c;都提供了switch语句或类似的功能来根据不同的条件执行不同的代码块。然而&#xff0c;Python本身并没有内置的switch语句&#xff0c;但是您可以使用其他方式来实现类似的功能。下面是一种常见的方法&#xff1a; 使用if-e…

Java零基础入门-赋值运算符

前言 Java是一门广泛被应用的编程语言&#xff0c;它被用于开发各种类型的应用程序&#xff0c;从桌面应用程序到企业级后端系统。对于零基础的人来说&#xff0c;学习Java可能会感到有些困难。本文将帮助那些没有编程经验的人了解Java的赋值运算符。 摘要 本文将介绍Java中…

NSSCTF做题第9页(2)

[SWPUCTF 2022 新生赛]ez_1zpop <?php error_reporting(0); class dxg { function fmm() { return "nonono"; } } class lt { public $impohi; public $md51weclome; public $md52to NSS; function __construct() { $this-&…

EF Core中带过滤器参数的Include方法

概要 本文主要介绍EF Core 5.0中一个新特性&#xff0c;就是Include方法支持带过滤器的委托参数&#xff0c;并且说明一下该特性在实际使用中的一个大坑&#xff0c;希望读者在未来的开发中避免踩坑。 本文使用的是Dotnet 6.0和EF Core 7.0。 代码和实现 案例介绍 本文主要…