赞
踩
目录
Springboot内置SLF4J【门面模式】 和 logback【日志框架】
更简单的书写博客流程【添加lombok,使用@Slf4j注解,自动生成log日志对象,可以直接使用】
consumes、produces、@RequestBody
返回静态页面【注意在路径中的"/"表示从根目录找页面,不加即在本文件查找文件】
如果不返回静态页面,而是返回数据(无论是Json还是其他数据,springboot会帮我们适配)
第二步打开settings打开自动编译的选项【注意有两个settings一个是本项目,一个是其他新项目】
在项目启动运行时,会发现在响应框里有如下此类信息,这些就是日志。
日志的作用:
1.记录错误日志和警告日志(发现和定位问题)
2.用户日志
3.系统日志
4.程序执行日志
⽇志的级别分为:
低 trace:微量,少许的意思,级别最低;
| debug:需要调试时候的关键信息打印;
| info:普通的打印信息(默认⽇志级别);
| warn:警告,不影响使⽤,但需要注意的问题;
| error:错误信息,级别较⾼的错误⽇志信息;
高 fatal:致命的,因为代码异常导致程序退出执⾏的事件。【一般为系统设置】
对于日志的框架大致有三种,log4j1/2、JUL、logback。对于SpringBoot来说,通过SLF4J的简单的日志门面,SLF4J帮助完成后续的 logback 日志书写
- logging:
- level:
- root: error
- com:
- example:
- demo:
- Controller: trace;
在不同级下可以设置不同的日志级别,上述代码在 root 级别上设置了 error 级别,在 Controller 上设置了 trace 级别。当只有日志的级别高于所设定的级别,在响应框内才会打印。【当root设置为error 重启项目,会发现没有日志的打印,因为第一次启动发现的日志都是低于 error】
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;
- }
-
- }
经常听到别人做项目要用到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=接受浏览器的请求,获取浏览器的参数,给浏览器响应,即建立与浏览器的连接。
有时候项目不能很好的识别出创建的是一个maven项目,所以需要手动添加maven
- 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用来指定返回什么格式的对象例如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;
- }
-
- }
- @RequestMapping("/getNameAge") //获取多个参数
- public String printNameAge(@RequestParam("username")String name,String age){
- return "printNameAge:"+name+" "+age;
- }
- @RequestMapping("/test/{name}/{password}")
- public String test_pathVariable(@PathVariable("name") String name,@PathVariable("password")String password){
- return "name:"+name+"password:"+password;
-
- }
- @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
- @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";
- }
- }
加上@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";
- }
第四步 开启debug就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。