- 1、模板引擎-Thymeleaf
- 1)thymeleaf简介
- 2)基本语法
- 3)字面量
- 4)文本操作
- 5)数学运算
- 6)布尔运算
- 7)比较运算
- 8)条件运算
- 9)thymeleaf使用
- 2、构建后台管理系统
- 1)项目创建
- 2)静态资源处理
- 3)路径构建
- 4)模板抽取
- 5)页面跳转
- 6)遍历数据
- 3、拦截器
- 1)HandlerInterceptor 接口
- 2)配置拦截器
- 3)拦截器原理
- 4、文件上传
- 1)页面表单
- 2)文件上传代码
- 3)文件上传大小设置
- 5、异常处理
现代化、服务端Java模板引擎
2)基本语法 3)字面量文本值: ‘one text’ , ‘Another one!’
数字: 0 , 34 , 3.0 , 12.3
布尔值: true , false
空值: null
变量: one,two,变量不能有空格
字符串拼接: +
变量替换: |The name is ${name}|
5)数学运算运算符: + , - , * , / , %
6)布尔运算运算符: and , or
一元运算: ! , not
7)比较运算比较: > , < , >= , <= ( gt , lt , ge , le )等式: == , != ( eq , ne )
8)条件运算If-then: (if) ? (then)
If-then-else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)
9)thymeleaf使用引入依赖
org.springframework.boot spring-boot-starter-thymeleaf
页面开发
Title
哈哈
去百度
2、构建后台管理系统
1)项目创建
thymeleaf、web-starter、devtools、lombok
2)静态资源处理自动配置好,我们只需要把所有静态资源放到 static 文件夹下
3)路径构建th:action=“@{/login}”
4)模板抽取th:insert/replace/include
So an HTML fragment like this:
…included three times in hosttags, like this:…will result in:5)页面跳转© 2011 The Good Thymes Virtual Grocery@PostMapping("/login") public String main(User user, HttpSession session, Model model){ if(StringUtils.hasLength(user.getUserName()) && "123456".equals(user.getPassword())){ //把登录成功的用户保存起来 session.setAttribute("loginUser",user); //登录成功重定向到main.html; 重定向防止表单重复提交 return "redirect:/main"; }else { model.addAttribute("msg","账号密码错误"); //回到登录页面 return "login"; } }6)遍历数据3、拦截器 1)HandlerInterceptor 接口@Slf4j public class LoginInterceptor implements HandlerInterceptor { @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; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("postHandle执行{}",modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("afterCompletion执行异常{}",ex); } }2)配置拦截器@Configuration public class AdminWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns(" @PostMapping("/upload") public String upload( @RequestParam("username") String username, @RequestPart("headerImg") MultipartFile headerImg, @RequestPart("photos") MultipartFile[] photos) throws IOException { log.info("上传的信息:username={},headerImg={},photos={}", username,headerImg.getSize(),photos.length); if(!headerImg.isEmpty()){ //保存到文件服务器,OSS服务器 String originalFilename = headerImg.getOriginalFilename(); headerImg.transferTo(new File("D:\Study\"+originalFilename)); } if(photos.length > 0){ for (MultipartFile photo : photos) { if(!photo.isEmpty()){ String originalFilename = photo.getOriginalFilename(); photo.transferTo(new File("D:\Study\"+originalFilename)); } } } return "main"; }3)文件上传大小设置spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.enabled=true spring.servlet.multipart.max-request-size=100MB5、异常处理错误处理
1、默认规则默认情况下,Spring Boot提供/error处理所有错误的映射
对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据2、error/下的4xx,5xx页面会被自动解析



