记SpringBoot3.x + Thymeleaf 项目实现(MVC架构模式)
目录
前言
一、创建SpringBoot项目
1. 创建项目
2. 运行项目
二、连接数据库实现登录
1. pom.xml文件引入依赖包
2. application.yml文件配置
3. 数据持久层,mybatis操作映射
4. Service接口及实现
5. Controller代码
6. Thymeleaf页面登录
7. 运行项目
8. 补充说明一下Controller中参数的接收
总结
前言
SpringBoot很多人都比较熟悉了,今天再从头来一次项目创建及使用。顺带做一次文章记录。
一、创建SpringBoot项目
1. 创建项目
IDEA 2021 创建:SpringBoot默认jar包格式、选择JDK17往上才能匹配SpringBoot3.x。
点击Next下一步后:选择springboot3.0.2版本、勾选Spring Web起步依赖。
得到项目结构如下:(已经是一个基础的MVC架构模式了)
2. 运行项目
应为项目目前已经是一个基础的MVC架构模式了,所以不用多做什么就可以直接运行了。
yml文件配置:
BasicController控制器代码:
SpringBoot项目是运行@SpringBootApplication注解的类(WqinfoApplication.java):
我们访问地址:http://127.0.0.1:8080/html得到如下结果:
网页结果:访问BasicController控制器中的/html请求映射到了index.html页面显示。
相当的简单就搭建运行起了一个项目。这就是SpringBoot。
二、连接数据库实现登录
1. pom.xml文件引入依赖包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><scope>runtime</scope></dependency><dependency><groupId>cn.easyproject</groupId><artifactId>orai18n</artifactId><version>12.1.0.2.0</version></dependency>
2. application.yml文件配置
3. 数据持久层,mybatis操作映射
package com.wq.wqinfo.persistence;import com.wq.wqinfo.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;/*** @author lv* @date 2025年8月11日10点01分* 数据持久层,mybatis操作映射*/
@Mapper
public interface UserMapper {/*** 根据用户名查询* @param username 用户名* @return*/@Select("select * from SYS_USER where USERNAME=#{username}")User findByUsername(String username);
}
4. Service接口及实现
package com.wq.wqinfo.service;import com.wq.wqinfo.domain.User;/*** @author lv* @date 2025年8月11日10点22分* 业务层接口类*/
public interface UserService {/**** @param user* @return*/public String login(User user);
}
package com.wq.wqinfo.service.impl;import com.wq.wqinfo.domain.User;
import com.wq.wqinfo.persistence.UserMapper;
import com.wq.wqinfo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.UUID;/*** @author lv* @date 2025年8月11日10点22分* 业务层接口类*/
@Service
public class UserServiceImpl implements UserService {/*** 注入UserMapper获取数据库用户信息*/@Autowiredprivate UserMapper userMapper;@Overridepublic String login(User user) {System.out.println("UserServiceImpl-login-----" + user);User user2=userMapper.findByUsername(user.getUsername());System.out.println("用户查询----用户名:" + user2.getUsername()+",密码:"+ user2.getPassword());if(user2!=null){ //省略了密码对比环节//生成tokenString token= UUID.randomUUID().toString();return token;}return null;}}
5. Controller代码
package com.wq.wqinfo.controller;import com.wq.wqinfo.domain.User;
import com.wq.wqinfo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;/*** @author lv* @date 2025年8月11日16点10分* 业务层接口类*/
@Controller
@RequestMapping("/user")
public class UserController {//自动装配@Autowiredprivate UserService userService;/*** 登录* @param username* @param password* @param model* @return*/@PostMapping("/login")public String login(String username, String password, Model model){System.out.println("------login.............."+username+"---"+password);User user=new User();user.setUsername(username);user.setPassword(password);String token= userService.login(user);System.out.println("....login...token:"+token);if(token!=null){model.addAttribute("msg",user.getUsername()+"登录成功!");return "success";}model.addAttribute("msg",user.getUsername()+"登录失败!");return "error";}@GetMapping("/index")public String index(){System.out.println("用户进入登录页面---------........");return "logins"; //没使用json返回,直接映射到自定义登录的页面}
}
6. Thymeleaf页面登录
logins.html (引入了th,Thymeleaf模板)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form th:action="@{/user/login}" method="post"><!--<input type="hidden" name="_csrf" th:value="${_csrf.token}" />--><!--注意:页面提交方式必须为 post 请求,用户名,密码必须为username,password可以通过 usernameParameter()和 passwordParameter()方法修改默认配置-->用户名:<input type="text" name="username"><br/>密码:<input type="text" name="password"><br/><input type="submit" value="login"></form>
</body>
</html>
success.html(引入了th,Thymeleaf模板)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<span th:text="${msg}"></span>
<h3>success 欢迎你的到来!你成功访问此方法...</h3>
<br> <a href="/logout">退出</a>
</body>
</html>
error.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>error 欢迎你的到来!你没有权限访问...</h3>
</body>
</html>
7. 运行项目
访问http://127.0.0.1:8080/user/index
就是访问Controller层的方法/index,映射请求到logins.html登录页面。直接访问页面不能访问到。
输入用户名,密码后登录成功。
8. 补充说明一下Controller中参数的接收
(1)public String login(String username, String password, Model model)
(2)public String login(User user, Model model)--User实体类中包含username和password
以上两种方式都能接收到页面POST的用户名和密码。
传递参数的时候还可以使用注解@PathVariable或@RequestParam:
@PathVariable
获取路径参数。即url/{id}这种形式。
@RequestParam
获取查询参数。即url?name=这种形式。或 psot表单中的参数。
@RequestBody,接收的是请求体里面的数据
当你使用@RequestBody注解时,Spring期望请求的Content-Type头部为application/json。如果请求的Content-Type不是这个值,Spring将无法正确解析请求体中的JSON数据。导致无法请求(POST)到对应的控制层Controller方法。
总结
在这个SpringBoot项目中我也尝试使用过JSP来弄页面,但是可惜我没有弄成功,所以后面也没有坚持了。但是听说是可以弄成功的。没有坚持的原因是:SpringBoot默认不支持 JSP ,因此推荐使用Thymeleaf。Thymeleaf语法更简单,功能更强大,支持HTML、XML、JavaScript等格式,且与Spring框架高度集成。
附加:
最后我又百度了一下两个问题:仅参考一下