开发前的准备:https://blog.csdn.net/netbar4/article/details/104124914
四、Web开发
1.引入静态资源
“/**”访问当前项目的任何资源(静态资源文件夹)
“classpath:/resources/”,
“classpath:/static/”,
“classpath:/public/”,
去访问8080/asserts/js/Chart.min.js
欢迎页:静态资源文件夹中下index.html;被/**映射
所有的**/favicon.ico都是在静态资源文件下找
2.模版引擎Thymeleaf
引入Thymeleaf
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Thymeleaf</artifactId>
</dependency>
这样导入的版本过低,以下办法修改默认的版本
<properties>
<java.version>1.8</java.version>
<thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties>
源代码:
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML";
只要把html页面放在classpath:/templates/,Thymeleaf就能自动渲染
@Controller
public class HelloController {
@RequestMapping("/success")
public String success() {
//classpath:/templates/success.html
return "success";
}
}
classpath:/templates/success.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成功了</h1>
</body>
</html>
3.语法规则
1)th:text;改变当前元素里面的文本内容
见图
2)表达式
见图
登录和拦截器
设置login为默认页面
MyMvcConfig:
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//添加视图映射
registry.addViewController("/").setViewName("login");
registry.addViewController("/main.html").setViewName("dashboard");
}
LoginController:
@Controller
public class LoginController {
//@RequestMapping(value = "/user/login" , method = RequestMethod.POST)
@PostMapping(value = "/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map<String, Object> map) {
if (!StringUtils.isEmpty(username) && "123456".equals(password)) {
//防止表单重复提交,于是重定向
return "redirect:/main.html";
} else {
map.put("msg", "用户名密码错误");
return "login";
}
}
}
拦截处理器
LoginHandlerInterceptor类:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginUser");
if(user == null) {
request.setAttribute("msg", "没有权限请登录");
request.getRequestDispatcher("/index.html").forward(request, response);
return false;
} else {
return true;
}
注册拦截
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/static/**","/webjars/**","/login","/asserts/**");
}
公共页面抽取
57行<nav class="col-md-2 d-none d-md-block bg-light sidebar" id="sidebar">