视图解析流程 (待debug)

拦截器原理

图示 :[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3V3mWqz9-1627222686253)(…/…/截图/iShot2021-07-25 20.38.00.png)]
-
拦截实现流程:
- 创建一个自己的拦截器 实现handlerInterceptor接口 重写其中的三个方法
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String uri = request.getRequestURI(); log.info("拦截的路径为{}",uri); String loginMessage = "loginUser"; if (request.getSession().getAttribute(loginMessage)!=null) { // 登陆成功 return true; }else { // 登陆失败 request.setAttribute("errorMessage","您尚未登陆,请登陆"); request.getRequestDispatcher("/").forward(request,response); return false; } }-
扩展配置WebMvcConfigurer
编写自己的configation类 @Configation注解 标志这是一个javac配置类
实现WebMvcConfigurer接口 重写addInterceptors方法
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**") //拦截路径 .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //放行路径 } } -
tips
对于资源放行和资源拦截
首先我们定义的addPathPatterns拦截的/** 会将静态资源拦截 所以要配置excludePathPatterns的静态资源路径
文件上传
前台部分
- form表单的参数设置 multipart: 多部件的
<!--文件上传form表单必须进行两个设置
1. 提交方式为post 2. enctype = "multipart/form-date -->
<form role="form" th:action="@{/uploadingFile}" method="post" enctype="multipart/form-data">
- 多文件上传在input要设置multiple属性
后台部分
- 使用注解接受参数 @RequestPart @RequesPparam
区别:
1.@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
2.支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
3.@RequestParam也同样支持multipart/form-data请求。
4.他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。
5.@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)。
public String uploadingFile(@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestPart("onePhoto") MultipartFile onePhoto,
@RequestPart("photos") MultipartFile[] photos,
Model model){...}
-
根据springboot自动配置的数据 若不进行更改直接上传较大文件会报错 如下

-
解决方法如下:
需要进行对multiPartAutoConfigation的操作 也就是重新配置注入属性
-
首先找到MultipartAutoConfiguration类 发现**@EnableConfigurationProperties注解中自动配置导入的类为MultipartProperties** 进入此类 可发现配置如下


-
在yaml中进行配置后 可以正常上传

-
-
后台代码
@PostMapping("/uploadingFile")
public String uploadingFile(@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestPart("onePhoto") MultipartFile onePhoto,
@RequestPart("photos") MultipartFile[] photos,
Model model) throws IOException {
// 获取愿文件名
String originalFilename = onePhoto.getOriginalFilename();
// 上传单个文件
onePhoto.transferTo(new File("/Users/rain/Desktop/"+originalFilename));
// 上传多个文件
if (photos!=null) {
for (MultipartFile photo : photos) {
String filename = photo.getOriginalFilename();
photo.transferTo(new File("/Users/rain/Desktop/"+filename));
}
}
return "main";
}
本文介绍了SpringBoot的视图解析流程,重点讲解了拦截器的工作原理,并提供了拦截器的实现步骤。同时,文章详细阐述了文件上传的前端和后端处理,包括表单设置、多文件上传及SpringBoot中大文件上传的配置问题和解决方案。
6063

被折叠的 条评论
为什么被折叠?



