当前位置:   article > 正文

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

springboot uuid

目录

【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为例】

  1. logging:
  2. level:
  3. root: error
  4. com:
  5. example:
  6. demo:
  7. Controller: trace;

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

SpringBoot 持久化的保存日志

 1.设置日志的保存路径

2.设置日志保存名称

编写日志

  1. package com.example.demo.Controller;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.Mapping;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. /**
  10. * Created with IntelliJ IDEA.
  11. * Description:
  12. * User: 97175
  13. * Date: 2023-10-08
  14. * Time: 16:43
  15. */
  16. @Controller
  17. @ResponseBody
  18. public class TestController {
  19. @RequestMapping("/mapping")
  20. public String sayHi(){
  21. return("serverPort->"+serverPort+" spring.datasource.url"+url);
  22. }
  23. @Value("${server.port}")
  24. private int serverPort;
  25. @Value("${spring.datasource.url}")
  26. private String url;
  27. //1.获取日志对象
  28. private static Logger logger = LoggerFactory.getLogger(TestController.class);
  29. @RequestMapping("/print")
  30. public String sayHello(){
  31. //2.使用日志对象打印日志
  32. logger.trace("================= trace ===============");
  33. logger.debug("================= debug ===============");
  34. logger.info("================= info ===============");
  35. logger.warn("================= warn ===============");
  36. logger.error("================= error ===============");
  37. return "Hello,"+url;
  38. }
  39. }

更简单的书写博客流程【添加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应用流程

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

  1. package com.example.demo.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.*;
  4. /**
  5. * Created with IntelliJ IDEA.
  6. * Description:
  7. * User: 97175
  8. * Date: 2023-10-23
  9. * Time: 14:04
  10. */
  11. @Controller //五大类注解 将USerController注入SpringBoot项目
  12. @ResponseBody //返回非页面
  13. public class UserController {
  14. @RequestMapping("/say")
  15. public String sayHi(){
  16. return "Hi SpringMVC RequestMapping Get/Post";
  17. }
  18. @RequestMapping(value = "/say2",method = RequestMethod.POST)
  19. public String sayHi2(){
  20. return "Hi SpringMVC RequestMapping Get";
  21. }
  22. @PostMapping("/say3")
  23. public String sayHi3(){
  24. return "Hi StringMVC PostMapping Post";
  25. }
  26. @RequestMapping(value = "/say4",method = RequestMethod.GET)
  27. public String sayHi4(){
  28. return "Hi SpringMVC RequestMapping Get";
  29. }
  30. @GetMapping("/say5")
  31. public String sayHi5(){
  32. return "Hi StingMVC GET";
  33. }
  34. }

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

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

第二步获取参数

获取单个参数、多个参数、对象 
  1. package com.example.demo.controller;
  2. import com.example.demo.entity.User;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.*;
  5. /**
  6. * Created with IntelliJ IDEA.
  7. * Description:
  8. * User: 97175
  9. * Date: 2023-10-23
  10. * Time: 14:04
  11. */
  12. @Controller //五大类注解 将USerController注入SpringBoot项目
  13. @ResponseBody //返回非页面
  14. public class UserController {
  15. @RequestMapping("/getName") //获取一个参数
  16. public String printName(String name){
  17. return "printName:"+name;
  18. }
  19. @RequestMapping("/getNameAge") //获取多个参数
  20. public String printNameAge(String name,String age){
  21. return "printNameAge:"+name+" "+age;
  22. }
  23. @RequestMapping("/getUser") //获取一个对象
  24. public String getUser(User user){
  25. return user.toString();
  26. }
  27. }
  1. package com.example.demo.entity;
  2. import lombok.Data;
  3. /**
  4. * Created with IntelliJ IDEA.
  5. * Description:
  6. * User: 97175
  7. * Date: 2023-10-23
  8. * Time: 16:26
  9. */
  10. @Data
  11. public class User {
  12. private int age;
  13. private String name;
  14. }

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

consumes、produces、@RequestBody

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

  1. package com.example.demo.controller;
  2. import com.example.demo.entity.User;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.*;
  6. /**
  7. * Created with IntelliJ IDEA.
  8. * Description:
  9. * User: 97175
  10. * Date: 2023-10-23
  11. * Time: 14:04
  12. */
  13. @Controller //五大类注解 将USerController注入SpringBoot项目
  14. @ResponseBody //返回非页面
  15. public class UserController {
  16. //consumes用来指定只能接收什么样子的对象,produces用来指定返回什么格式的对象例如Json格式
  17. @RequestMapping(value = "/getUser2",consumes = "application/json",produces = "application/json")
  18. public User getUser2( @RequestBody User user){//用于接收json格式的对象需要添加@RequestBody注解
  19. return user;
  20. }
  21. }

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

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

 

上传文件@ @RequestPart
  1. @RequestMapping("/myupload")
  2. public Object upload(@RequestPart("myimg")MultipartFile file) throws IOException {
  3. File saveFile = new File("A:\\home\\myimg.jpg");
  4. try{
  5. file.transferTo(saveFile);
  6. return true;
  7. } catch (IOException e) {
  8. e.printStackTrace();
  9. }
  10. return false;
  11. }

 

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

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

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

 获取Cookie/header/Session

简洁的获取Cookie

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

简单的获取header

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

简单的获取Session

  1. private static final String key = "key1";
  2. @RequestMapping("/setsession")
  3. public void setSession(HttpServletRequest request){
  4. HttpSession session = request.getSession();
  5. session.setAttribute(key,"value");
  6. }
  7. @RequestMapping("/getsession")
  8. public Object getSession(@SessionAttribute(key)String name){
  9. return "session->"+name;
  10. }

第三步返回响应

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

加上@ResponseBody

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

返回请求转发 forward:/

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

返回请求转发 redirect:/

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

【Idea设置热部署全流程】

第一步 在SpringBoot项目中添加devtools

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

第三步 在本项目settings中勾选

第四步 开启debug就可以了

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/995862
推荐阅读
相关标签
  

闽ICP备14008679号