SpringBoot2 Web开发:进阶
883 字
4 分钟
SpringBoot2 Web开发:进阶
6.SpringBoot2 Web开发<进阶>进阶>
温馨提示
转载请标注来源哦~~
本文介绍 SpringBoot2 Web开发进阶内容,你将学习到如何使用拦截器、进行文件上传、异常处理。文章内容来自站主大学时期的学习笔记。
6.6拦截器
1.HandlerInterceptor 接口
Interceptor/LoginInterceptor
/** * 登录检查 * 1、配置好拦截器要拦截哪些请求 * 2、把这些配置放在容器中 */@Slf4jpublic class LoginInterceptor implements HandlerInterceptor {
/** * 目标方法执行之前 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI(); log.info("preHandle拦截的请求路径是{}",requestURI);
//登录检查逻辑 HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
if(loginUser != null){ //放行 return true; }
//拦截住。未登录。跳转到登录页 request.setAttribute("msg","请先登录");// re.sendRedirect("/"); request.getRequestDispatcher("/").forward(request,response); return false; }
/** * 目标方法执行完成以后 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("postHandle执行{}",modelAndView); }
/** * 页面渲染以后 * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("afterCompletion执行异常{}",ex); }}2.配置拦截器
config/AdminWebConfig
/** * 1、编写一个拦截器实现HandlerInterceptor接口 * 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors) * 3、指定拦截规则【如果是拦截所有,静态资源也会被拦截】 */@Configurationpublic class AdminWebConfig implements WebMvcConfigurer {
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") //所有请求都被拦截包括静态资源 .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //放行的请求 }}6.7文件上传
1、页面表单
<form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data">
<!-- 单文件上传--> <div class="form-group"> <label for="exampleInputFile">头像</label> <input type="file" name="headerImg" id="exampleInputFile"> </div> <!-- 多文件上传--> <div class="form-group"> <label for="exampleInputFile">生活照</label> <input type="file" name="photos" multiple> </div></form>2、文件上传代码
//MultipartFile 自动封装上传过来的文件【图片、视频、文件都可】@PostMapping("/upload")public String upload(@RequestParam("email") String email, @RequestParam("username") String username, @RequestPart("headerImg") MultipartFile headerImg, @RequestPart("photos") MultipartFile[] photos) throws IOException { log.info("上传的信息:email={},username={},headerImg={},photos={}", email,username,headerImg.getSize(),photos.length);
//单文件 if(!headerImg.isEmpty()){ //保存到文件服务器,OSS服务器 String originalFilename = headerImg.getOriginalFilename(); //保存到磁盘 headerImg.transferTo(new File("D:\\linshi\\temp\\"+originalFilename)); } //多文件 if(photos.length > 0){ for (MultipartFile photo : photos) { if(!photo.isEmpty()){ String originalFilename = photo.getOriginalFilename(); photo.transferTo(new File("D:\\linshi\\temp\\"+originalFilename)); } } } return "main";}6.8异常处理
1、错误处理默认规则
- 默认情况下,Spring Boot提供
/error处理所有错误的映射 - 对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。
- 对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据


-
要对其进行自定义,添加
View解析为error -
要完全替换默认行为,可以实现
ErrorController并注册该类型的Bean定义,或添加ErrorAttributes类型的组件以使用现有机制但替换其内容。 -
error/下的4xx,5xx页面会被自动解析;
2、定制错误处理逻辑
-
自定义错误页
- error/404.html error/5xx.html;有精确的错误状态码页面就匹配精确,没有就找 4xx.html;如果都没有就触发白页
-
/*** 处理 整个Web Controller的异常*/@Slf4j@Controllerpublic class GlobalExceptionHandler {@ExceptionHandler({ArithmeticException.class,NullPointerException.class})public String HandleArithException(Exception e){log.error("异常是:{}",e);return "login";}}
-
@ControllerAdvice+@ExceptionHandler处理全局异常;底层是 ExceptionHandlerExceptionResolver 支持的
-
【自定义异常】
-
package com.atguigu.admin.exception;@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "用户数量太多")public class UserTooMuchException extends RuntimeException{//构造方法public UserTooMuchException(){}public UserTooMuchException(String message){super(message);}}
-
@GetMapping("/dynamic_table")public String dynamic_table(Model model){List<User> users = Arrays.asList(new User("zhangsan", "123456"),new User("lisi", "123444"),new User("haha", "aaaaa"),new User("hehe ", "aaddd"));model.addAttribute("users",users);if(users.size()>3){throw new UserTooMuchException();}return "table/dynamic_table";}
-

-
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
SpringBoot2 Web开发:进阶
https://blog.furjesk.com/posts/tutorial-springboot2-web03/相关文章智能推荐
1
SpringBoot2 Web开发:基础
SpringBoot 2 教程:从入门到精通本文介绍 SpringBoot2 Web开发,你将学习到如何开发 Web 应用。文章内容来自站主大学时期的学习笔记。
2
SpringBoot2 Web开发:模板引擎
SpringBoot 2 教程:从入门到精通本文介绍 Thymeleaf 模板引擎,你将学习到如何开发 Thymeleaf 前端页面。文章内容来自站主大学时期的学习笔记。
3
SpringBoot2 开发小技巧
SpringBoot 2 教程:从入门到精通本文介绍 SpringBoot2 开发小技巧,可以帮助我们简化开发。文章内容来自站主大学时期的学习笔记。
4
SpringBoot2 容器功能
SpringBoot 2 教程:从入门到精通本文介绍 SpringBoot2 容器功能。文章内容来自站主大学时期的学习笔记。
5
Git 进阶技巧
Git 指南本指南将介绍 Git 版本管理的进阶技巧。包括临时保存当前工作现场、追加提交等。
随机文章随机推荐















