源无极

导航

 

      上次课我们讲了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)注意:文件名不唯一的话图片会覆盖

 1 @Controller
 2 public class FileController {
 3     
 4     @RequestMapping(value = "/api/v1/gopage")  
 5     public Object index() {
 6         
 7         return "index";
 8     }
 9         private static final String filePath =        "/Users/jack/Desktop/person/springboot/Springboot02_B/src/main/resources/static/image  s/";
10    
11          @RequestMapping(value = "upload")
12         @ResponseBody
13         public JsonData upload(@RequestParam("head_img") MultipartFile    file,HttpServletRequest request) {  
14           
15              //file.isEmpty(); 判断图片是否为空
16              //file.getSize(); 图片大小进行判断
17              
18              String name = request.getParameter("name");
19              System.out.println("用户名:"+name);
20             
21              // 获取文件名
22             String fileName = file.getOriginalFilename();            
23             System.out.println("上传的文件名为:" + fileName);
24             
25             // 获取文件的后缀名,比如图片的jpeg,png
26             String suffixName = fileName.substring(fileName.lastIndexOf("."));
27             System.out.println("上传的后缀名为:" + suffixName);
28             
29             // 文件上传后的路径
30             fileName = UUID.randomUUID() + suffixName;
31             System.out.println("转换后的名称:"+fileName);
32             
33             File dest = new File(filePath + fileName);
34            
35             try {
36                 file.transferTo(dest);
37                 
38                 return new JsonData(0, fileName);
39             } catch (IllegalStateException e) {
40                 e.printStackTrace();
41             } catch (IOException e) {
42                 e.printStackTrace();
43             }
44             return  new JsonData(-1, "fail to save ", null);
45         }
46 }

 

 


5)domain包下创建JsonData类

 

 
 1 import java.io.Serializable;
 2 
 3 public class JsonData implements Serializable {
 4     private static final long serialVersionUID = 1L;
 5 
 6     //状态码,0表示成功,-1表示失败
 7     private int code;
 8     
 9     //结果
10     private Object data;
11 
12     //错误描述
13     private String msg;
14     
15     public int getCode() {
16         return code;
17     }
18 
19     public String getMsg() {
20         return msg;
21     }
22 
23     public void setMsg(String msg) {
24         this.msg = msg;
25     }
26 
27     public void setCode(int code) {
28         this.code = code;
29     }
30 
31     public Object getData() {
32         return data;
33     }
34 
35     public void setData(Object data) {
36         this.data = data;
37     }
38 
39     public JsonData(int code, Object data) {
40         super();
41         this.code = code;
42         this.data = data;
43     }
44 
45     public JsonData(int code, String msg,Object data) {
46         super();
47         this.code = code;
48         this.msg = msg;
49         this.data = data;
50     }
51     
52     
53     
54 }

 

 

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/download/jianchilu/10703587

posted on 2018-11-29 20:39  源无极  阅读(194)  评论(0编辑  收藏  举报