现代Web开发三剑客:SpringBoot+Layui+Thymeleaf最佳实践
·
现代Web开发三剑客:SpringBoot + Layui + Thymeleaf最佳实践
以下是通过多年实战经验总结的整合方案,涵盖关键配置、性能优化和典型场景实现:
1. 项目基础架构
// SpringBoot主启动类
@SpringBootApplication
public class WebApp {
public static void main(String[] args) {
SpringApplication.run(WebApp.class, args);
}
}
// 关键依赖(pom.xml)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
2. Thymeleaf核心配置
# application.yml
spring:
thymeleaf:
mode: HTML
encoding: UTF-8
cache: false # 开发阶段关闭缓存
prefix: classpath:/templates/
suffix: .html
3. Layui整合方案
<!-- 模板头部引入 -->
<head th:fragment="layui-core">
<link rel="stylesheet" th:href="@{/layui/css/layui.css}">
<script th:src="@{/layui/layui.js}"></script>
</head>
<!-- 使用示例 -->
<div class="layui-card">
<div class="layui-card-header" th:text="${title}">标题</div>
<div class="layui-card-body">
<p th:text="${content}">内容</p>
</div>
</div>
4. 前后端数据交互
// Controller层
@Controller
public class UserController {
@GetMapping("/users")
public String userList(Model model) {
model.addAttribute("users", userService.findAll());
return "user/list"; // 对应Thymeleaf模板
}
@ResponseBody
@PostMapping("/api/user")
public ResponseEntity<Map<String, Object>> createUser(@RequestBody User user) {
// 返回Layui表格标准格式
return ResponseEntity.ok(Map.of(
"code", 0,
"msg", "操作成功",
"data", userService.save(user)
));
}
}
5. Layui表格分页最佳实践
// 前端JS
layui.use('table', function(){
const table = layui.table;
table.render({
elem: '#userTable',
url: '/api/users',
page: true,
cols: [[
{field: 'id', title: 'ID'},
{field: 'name', title: '姓名'},
{field: 'email', title: '邮箱'}
]]
});
});
// 后端分页接口
@GetMapping("/api/users")
@ResponseBody
public Map<String, Object> getUsers(
@RequestParam int page,
@RequestParam int limit) {
Page<User> userPage = userService.findByPage(page, limit);
return Map.of(
"code", 0,
"msg", "",
"count", userPage.getTotalElements(),
"data", userPage.getContent()
);
}
6. 表单验证与提交
<!-- Thymeleaf表单 -->
<form class="layui-form" th:action="@{/api/user}" method="post">
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="required"
th:value="${user?.username}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit>提交</button>
</div>
</div>
</form>
<script>
layui.use('form', function(){
const form = layui.form;
form.on('submit', function(data){
// 可在此处追加AJAX提交逻辑
return true; // 允许表单提交
});
});
</script>
7. 性能优化关键点
-
模板缓存
生产环境开启缓存:spring.thymeleaf.cache=true -
静态资源配置
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/"); } } -
组件按需加载
使用Layui的模块化加载:layui.use(['layer', 'form'], function(){ const layer = layui.layer; const form = layui.form; // 业务代码... });
8. 常见问题解决方案
-
问题1:Layui图标不显示
解决:确保字体文件路径正确:/static/layui/font/ -
问题2:Thymeleaf模板冲突
解决:禁用默认模板解析:@Bean public ITemplateResolver templateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setPrefix("classpath:/templates/"); resolver.setSuffix(".html"); resolver.setTemplateMode("HTML"); resolver.setCharacterEncoding("UTF-8"); resolver.setCacheable(false); // 开发模式 return resolver; } -
问题3:AJAX跨域请求
解决:添加CORS配置:@Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("*") .allowedMethods("GET", "POST"); } }; }
最佳实践总结:
- 使用Thymeleaf的
th:fragment管理公共组件- 前后端分离数据交互采用RESTful风格
- Layui组件通过模块化按需加载
- 生产环境开启模板缓存和Gzip压缩
- 采用Spring Boot Actuator监控系统性能
通过以上方案,可构建出兼具开发效率与运行性能的现代化Web应用,特别适合管理后台、企业级应用等场景。
更多推荐

所有评论(0)