springboot2.x简单详细教程--基础应用(第二章)

      上次课我们讲了springboot的入门案例,今天先讲一下springboot2.x的简单几种用法后续我会重点分析springboot2.x的配置文件和启动原 理。(说明:本教程内容详细,主要是照顾基础薄弱的朋友

    回顾:   入门案例中我们讲启动的部分和业务代码放在一起,现在我们将他们分开,如下图所示。

1.

2.

这样也是可以启动访问的(注意启动类Application和controller包同级,后续我解释原因

3.

一 . 在将今天的课之前简单介绍一些springboot的注解

1. 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧

    1)@RestController and @RequestMapping是springMVC的注解,不是springboot特有的    
    2)@RestController = @Controller+@ResponseBody    
    3)一个顶俩
                @GetMapping = @RequestMapping(method = RequestMethod.GET)
                @PostMapping = @RequestMapping(method = RequestMethod.POST)
                @PutMapping = @RequestMapping(method = RequestMethod.PUT)
                @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)
     注意等号:使用的时候会进一步说明。

二.springboot2.x的基础使用

2.测试restful协议,从路径中获取字段    

1) 1)

2)我们启动项目访问试一试 

3)

现在我们试一试使用Postman访问一下,不会Postman的可以去学习一下,很简单很实用的谷歌插件,工作中经常使用到。

3.功能描述:测试GetMapping

1)

2)

4.功能描述:默认值,是否必须的参数

1)

2)

3)

扩展:

5.功能描述:bean对象传参

1)

2)

3)

6. 功能描述:测试获取http头信息

      在实际项目开发中,比如微服务,有时候资源访问是需要权限效验的,这个token就是这样的一种方式,它相当于一把钥匙决定你是否能获得资源当然在实际项目中token是动态的。

1)

2)

当然我这里并没有做token的效验,网上也是有资料的大家可以去看看。

7.用javaWeb的请求方式:HttpServletRequest request自动注入获取参数

1)

2)

8.测试PostMapping

1)

2)

9.    @PutMapping 一般是更新用的

1)

2)

10.@DeleteMapping删除

1)

2)



三.常用json框架介绍和Jackson返回结果处理

简介:介绍常用json框架和注解的使用,自定义返回json结构和格式

    1、常用框架 阿里 fastjson,谷歌gson等
        JavaBean序列化为Json,性能:Jackson > FastJson > Gson > Json-lib 同个结构
        Jackson、FastJson、Gson类库各有优点,各有自己的专长
        空间换时间,时间换空间

2 jackson处理相关自动(json数据反馈到前端时需要注意的)

1)

2)

3)

4)

5)再启动访问

四.SpringBoot2.x目录文件结构讲解

 简介:讲解SpringBoot目录文件结构和官方推荐的目录规范

 1、目录讲解
         src/main/java:存放代码
         src/main/resources
             static: 存放静态文件,比如 css、js、image, (访问方式 http://localhost:8080/js/main.js)
             templates:存放静态页面jsp,html,tpl
             config:存放配置文件,application.properties
             resources:

2.同个文件的加载顺序,静态资源文件
     Spring Boot 默认会挨个从
     META/resources > resources > static > public  里面找是否存在相应的资源,如果有则直接返回。

简单测一下同一个文件在不同的文件下的加载顺序

1)resources 里面的test.js优先打印

2)将resources 里面的test.js文件删除,则打印static文件里面的test.js的内容

3)同理可以继续测下去

3.如何访问一个静态的资源(js和html等)?

1)

2)

3)

4)

5)我们访问templates文件试一试

要访问这个文件里面的html文件必须要引入依赖

 Thymeleaf

          <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

6)

7)

扩展:如果FileController返回的是index2,或是index3会怎么样呢

报错如下

很明显我们加的这个依赖是为访问templates文件下面的。

4.如何访问一个.css和图片呢

1)

2)

写了反而报错

同理访问图片也是一样的

这是官网静态文件访问的规则
       官网地址:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content

5.如何访问一个自定义的文件下面的内容呢?

1)在resources文件下创建application.properties文件

2)application.properties文件里面填写

spring.resources.static-locations=classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ ,classpath:/zidingyi/,file:${web.upload-path} 

3)

4)

结论:application.properties中配置之后自定义的文件变成了默认的文件。

面试知识点:一般在实际开发中静待资源文件放在CDN上大大加快资源访问速度,在后续的教程将会讲如何搭建图片服务器以及静态资源服务器等

注意 :如果想要直接访问html页面,则需要把html放在springboot默认加载的文件夹下面(static,public,resources)

五.简单的文件上传

 springboot文件上传使用 MultipartFile file,源自SpringMVC,这个用的比较多,就介绍这个。

MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutStream方便和高效)

1)在static文件下加入upload.html文件

2) 启动项目

3)在controller下的FileController类书写文件上传的java代码

4)注意:文件名不唯一的话图片会覆盖

@Controller
public class FileController {
    
    @RequestMapping(value = "/api/v1/gopage")  
    public Object index() {
        
        return "index";
    }
        private static final String filePath = "/Users/jack/Desktop/person/springboot/Springboot02_B/src/main/resources/static/images/";
   
         @RequestMapping(value = "upload")
        @ResponseBody
        public JsonData upload(@RequestParam("head_img") MultipartFile file,HttpServletRequest request) {
          
             //file.isEmpty(); 判断图片是否为空
             //file.getSize(); 图片大小进行判断
             
             String name = request.getParameter("name");
             System.out.println("用户名:"+name);
            
             // 获取文件名
            String fileName = file.getOriginalFilename();            
            System.out.println("上传的文件名为:" + fileName);
            
            // 获取文件的后缀名,比如图片的jpeg,png
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            System.out.println("上传的后缀名为:" + suffixName);
            
            // 文件上传后的路径
            fileName = UUID.randomUUID() + suffixName;
            System.out.println("转换后的名称:"+fileName);
            
            File dest = new File(filePath + fileName);
           
            try {
                file.transferTo(dest);
                
                return new JsonData(0, fileName);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return  new JsonData(-1, "fail to save ", null);
        }
}
5)domain包下创建JsonData类


import java.io.Serializable;

public class JsonData implements Serializable {
    private static final long serialVersionUID = 1L;

    //状态码,0表示成功,-1表示失败
    private int code;
    
    //结果
    private Object data;

    //错误描述
    private String msg;

    
    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public JsonData(int code, Object data) {
        super();
        this.code = code;
        this.data = data;
    }

    public JsonData(int code, String msg,Object data) {
        super();
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    
    
    
}
 

6)重启应用

7)

8)

6.文件上传的优化

这里我们应该限制一下文件上传的大小

也就是加一个拦截器

我们尝试上传一个5.3M的图片

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException:

The field head_img exceeds its maximum permitted size of 1048576 bytes.

MultipartFile 文件上传默认大小就是1M左右,ok,如果我要上传更大的文件怎么办呢?


    1、文件大小配置,启动类里面配置(注意:后面我会把这个拦截配置放到配置文件中)
        
          

上传成功

7.将项目打jar包,需要增加maven依赖

<build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>

                </plugin>
            </plugins>
        </build>

打包方式:项目右键,Run As >>  maven install  

1)

如果没加相关依赖,执行maven打包运行后会报错:

        GUI:反编译工具,作用就是用于把class文件转换成java文件

在target文件下打开命令运行这个jar包(shift+鼠标右键)

运行如下: java  -jar  +jar包名称

其实就是找不到程序入口

2)加入依赖重复以上操作

成功启动

8.文件上传和访问需要指定磁盘路径

我们项目打包后是无法将图片放进去的,所以应该

文件上传和访问需要指定磁盘路径

1)application.properties中增加下面配置

         i ).web.images-path=磁盘上的路径
       ii) spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,
            classpath:/public/,classpath:/test/,file:${web.upload-path} 

{}代表读取当前配置文件里面web.upload-path对应的值

2)修改配置

3)重复以上操作打jar包:   >> target 文件下启动用命令启动jar包  

访问

4)

好的打jar包后我们可以将图片放到我们想要放的位置了,成功。

本章源码

https://download.csdn.net/my

猜你喜欢

转载自blog.csdn.net/jianchilu/article/details/82778442
今日推荐