当前位置: 首页 > news >正文

记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框架高度集成。

附加:

最后我又百度了一下两个问题:仅参考一下

http://www.lryc.cn/news/624119.html

相关文章:

  • 【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
  • TDengine IDMP 运维指南(1. 部署规划)
  • 大模型算法岗面试准备经验分享
  • 母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南
  • Java试题-选择题(10)
  • AMBA-AXI and ACE协议详解(四)
  • 计算机毕业设计java的小天鹅酒店月子会所管理小天鹅酒店母婴护理中心管理系统设计小天鹅酒店产后护理会所信息化管理平台
  • 物联网软件开发过程中,数据流图(DFD),用例图,类图,活动图,序列图,状态图,实体关系图(ERD),BPMN(业务流程建模)详解分析
  • 嵌入式练习项目——————抓包获取天气信息
  • Python大模型应用开发-核心技术与项目开发
  • C++编程实战:高效解决算法与数据结构问题
  • Linux817 shell:until,nfs,random
  • React 第七十节 Router中matchRoutes的使用详解及注意事项
  • Next.js跟React关系(Next.js是基于React库的全栈框架)(文件系统路由、服务端渲染SSR、静态生成SSG、增量静态再生ISR、API路由)
  • Vue 与 React 深度对比:设计哲学、技术差异与应用场景
  • 每日Java面试系列(15):进阶篇(String不可变的原因、性能问题、String三剑客、自定义不可变设计、组合优于继承等相关问题)
  • FreeRTOS源码分析八:timer管理(一)
  • Linux学习-多任务(线程)
  • Python 项目里的数据清理工作(数据清洗步骤应用)
  • RK3588开发板Ubuntu系统烧录
  • 「数据获取」《中国教育统计年鉴》(1949-2023)(获取方式看绑定的资源)
  • Python @staticmethod 装饰器与 staticmethod() 函数
  • Spring AI 集成阿里云百炼平台
  • C语言课程开发
  • C11期作业17(07.05)
  • Effective C++ 条款47: 使用traits classes表现类型信息
  • JVM常用工具:jstat、jmap、jstack
  • Transformer架构的数学本质:从注意力机制到大模型时代的技术内核
  • 因果语义知识图谱如何革新文本预处理
  • 机器学习案例——对好评和差评进行预测