springboot学习笔记(三)

2023-12-20 13:11:04

web开发进阶

1.静态资源访问

2.文件上传

3.拦截器

1.静态资源访问

a.使用IDEA创建SpringBoot项目,会默认创建出classpath:/static/目录,静态资源一般放在这个目录下。

b.如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤策略。

C.在application.properties中直接定义过滤规则和静态资源位置:

首先在? src/main/resources/static/下放了一张test.jpg图片

Springboot默认是放到根目录下直接访问,所以直接访问localhost:8080/test.jpg即可

如果想将其路径放在static下,即通过在application.properties中添加:

spring.mvc.static-path-pattern=/static/**

那么重新启动springboot后,再次访问localhost:8080/test.jpg

访问 localhost:8080/static/test.jpg

另外一个则是静态资源的位置:

spring.web.resources.static-localtions=classpath:/static/

即静态资源位置位于:classpath:/static/

2.文件上传:

Springboot工程嵌入的tomcat限制了请求的文件大小,每个文件的配置最大为1MB,单词请求的文件的总数不能大于10MB,所以需要在配置文件application.properties中加入两个配置。

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
当表单的enctype="multipart/form-data"时,可以使用MultipartFile 获取上传的文件数据,再通过transferTo方法将其写入到磁盘中。
参考 :Postman Post请求上传文件-CSDN博客
package com.example.demo.demos.web;

import java.io.File;
import java.io.IOException;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileController {
	private static final String UPLOAD_FOLDER = System.getProperty("user.dir")+"/uplpad/";
	@PostMapping("/updemo")
	public String upload(String nickname,MultipartFile f) throws IOException{
		System.out.print("文件大小"+ f.getSize());
		System.out.print("文件类型"+ f.getContentType());
		System.out.print("文件原始名称"+ f.getOriginalFilename());
		System.out.print("文件路径"+ System.getProperty("user.dir"));
		saveFile(f);
		return "上传成功";
	}
	public void saveFile(MultipartFile f)throws IOException{
		File upDir = new File(UPLOAD_FOLDER);
		if (!upDir.exists()) {
			upDir.mkdir();
		}
		File file = new File(UPLOAD_FOLDER + f.getOriginalFilename());
		f.transferTo(file);
	}

}

测试:将test.jpg这张图片上传,如果上传成功,该图片则会出现在upload目录下。

3.拦截器

拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现,总结起来,拦截器大致有以下几种使用场景:

a.权限检查:如登录检测,进入处理程序检测是否登录,如果没有,则直接返回登录页面。

b.性能监控:有时系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录时间,在处理后记录时间,从而得到该请求的处理时间

c.通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有提取Locale、Theme信息等,只要是多个处理程序都需要的,即可使用拦截器实现。

在SpringBoot中,SpringBoot则是定义了HandlerInterceptor接口来实现自定义拦截器的功能,HandlerInterceptor接口定义了preHandle、postHandle、afterCompletion三种方法。

简单设置一个拦截器(拦截器返回值是布尔值):

package com.example.demo.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

public class loginInterceptor implements HandlerInterceptor {
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
		System.out.println("loginInterceptor");
		return false;
	}

}

写完拦截器后,需要通过Config注解,将拦截器加入到Springboot当中,需要写一个配置类:
?

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.example.demo.interceptor.*;

@Configuration
public class WebConfig implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new loginInterceptor()).addPathPatterns("/user/**");
	}

}

全部搞定之后,再次请求:localhost:8080/user,你会看到一下结果:

文章来源:https://blog.csdn.net/qq_40377374/article/details/135086974
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。