Spring Boot:从入门到实践的全面指南(2)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 2.5 在Spring Boot中使用JSP尽管Spring Boot推荐使用Thymeleaf作为其模板引擎,但在某些情况下,我们可能仍然需要在Spring Boot应用中使用JSP。在这一节中,我们将详细介绍如何在Spring Boot中配置和使用JSP。

2.5 在Spring Boot中使用JSP

尽管Spring Boot推荐使用Thymeleaf作为其模板引擎,但在某些情况下,我们可能仍然需要在Spring Boot应用中使用JSP。在这一节中,我们将详细介绍如何在Spring Boot中配置和使用JSP。

2.5.1 添加依赖

要在Spring Boot中使用JSP,我们首先需要在pom.xml中添加相关的依赖。由于Spring Boot的默认内嵌容器(Embedded Tomcat)并不支持JSP,我们还需要添加tomcat-embed-jasper依赖来提供JSP的支持:

<dependencies>
    <!-- 其他依赖 -->
    <!-- 添加JSP支持 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- 添加JSTL支持 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
</dependencies>

2.5.2 配置视图解析器

接下来,我们需要在application.properties中配置Spring MVC的视图解析器,以便它能正确地找到和渲染JSP页面:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

在上面的配置中,spring.mvc.view.prefixspring.mvc.view.suffix定义了JSP页面的位置和扩展名。例如,如果一个视图的名字是home,那么Spring MVC会尝试渲染/WEB-INF/jsp/home.jsp这个JSP页面。

2.5.3 创建JSP页面

现在,我们可以在src/main/webapp/WEB-INF/jsp/目录下创建JSP页面。例如,我们可以创建一个home.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to Spring Boot!</h1>
</body>
</html>

2.5.4 控制器中返回视图名称

最后,我们可以在控制器中返回JSP页面的名称。Spring MVC会自动使用配置的视图解析器来找到和渲染这个JSP页面:

@Controller
public class HomeController {
    @RequestMapping("/")
    public String home() {
        return "home";
    }
}

在上面的代码中,home方法返回了"home"这个视图名称,Spring MVC会渲染/WEB-INF/jsp/home.jsp这个JSP页面。


至此,我们已经完成了在Spring Boot中使用JSP的所有配置。在下一节中,我们将介绍Spring Boot框架Web开发的相关内容。

3.1 集成MyBatis:在Spring Boot中使用MyBatis

MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。Spring Boot能够与MyBatis完美地集成在一起,下面将简单介绍一下步骤:

  1. pom.xml文件中添加mybatis-spring-boot-starter依赖:
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>
  1. application.properties文件中配置MyBatis和数据库相关属性:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity

这些配置中,spring.datasource.*是数据源相关的配置,mybatis.mapper-locations是mapper映射文件的位置,mybatis.type-aliases-package是实体类所在的包。

  1. 创建对应的Mapper接口:
@Mapper
public interface UserMapper {
    User selectUser(Integer id);
}

在Mapper接口中定义你需要执行的操作,比如这里我们定义了一个selectUser方法用于查询用户。

  1. 创建对应的Mapper映射文件:
<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="selectUser" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

在映射文件中编写具体的SQL语句。这里的namespace应与Mapper接口的全类名相对应,id应与Mapper接口中的方法名相对应。

  1. 在服务类或控制器中注入Mapper接口并使用:
@Autowired
private UserMapper userMapper;
public User getUser(Integer id) {
    return userMapper.selectUser(id);
}

至此,你就完成了Spring Boot与MyBatis的集成。现在你可以在应用中通过MyBatis进行数据的持久化操作了。

3.2 DAO开发策略:探索DAO的多种开发方式

在实际的Spring Boot项目开发中,我们除了可以使用上述的MyBatis作为数据持久层框架外,还可以使用其他一些方式来进行数据库操作,例如使用JPA(Java Persistence API)或者使用Spring Data JPA等。


下面简要介绍一下这两种方式:JPA是Java Persistence API的简称,是Java EE和Java SE环境中的持久层技术标准。其主要作用就是简化持久层的开发,让开发者用面向对象的思维来操作数据库。


在Spring Boot中使用JPA,主要是以下几个步骤:

  • 在pom.xml中添加依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  • 配置application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
  • 创建实体类,并使用JPA注解进行配置:
@Entity
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String name;
    // getter and setter...
}
  • 创建Repository接口,继承JpaRepository:
public interface UserRepository extends JpaRepository<User, Integer> {
}
  • 在需要的地方,注入UserRepository使用:
@Autowired
private UserRepository userRepository;

2. 使用Spring Data JPA

Spring Data JPA是在JPA的基础上进行了一定的封装,提供了一整套的数据访问层解决方案,能大大简化数据访问层的开发。

在Spring Boot中使用Spring Data JPA,主要步骤与使用JPA基本一致,不同的是在创建Repository接口时,可以定义一些复杂的查询方法:

public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> findByName(String name);
    User findByNameAndId(String name, Integer id);
}

在Spring Data JPA中,你只需要按照一定的命名规则来定义方法,无需编写实现,Spring Data JPA会自动帮你完成方法的实现。

以上就是Spring Boot中DAO的其他开发方式。具体使用哪种方式,需要根据项目的实际需求来决定。

3.3 事务支持:理解Spring Boot的事务处理方式

在数据库操作中,事务是一种非常重要的机制,它可以保证一系列数据库操作要么全部成功,要么全部失败,从而保证数据的一致性。Spring Boot也提供了对事务的支持。

在Spring Boot中,可以通过使用@Transactional注解来声明一个方法或者类需要被事务管理。当标记在类上时,表示类中所有的public方法都会被事务管理。例如,我们在UserService类中的updateUser方法上添加@Transactional注解:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    @Transactional
    public void updateUser(Integer id, String name) {
        User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
        user.setName(name);
        userRepository.save(user);
    }
}

在上述代码中,updateUser方法会被Spring的事务管理器管理,如果在方法执行过程中发生了任何未捕获的异常,那么Spring的事务管理器会自动将事务进行回滚,也就是说,这个方法中的所有数据库操作都不会被实际执行。


另外,@Transactional注解也提供了一些属性来进行更细粒度的控制,例如:


isolation:用来设置事务的隔离级别,如读已提交(READ_COMMITTED)、可重复读(REPEATABLE_READ)、串行化(SERIALIZABLE)等。


propagation:用来设置事务的传播行为,如支持当前事务(SUPPORTS)、创建新事务(REQUIRES_NEW)、嵌套事务(NESTED)等。


readOnly:设置事务是否只读。当事务只读时,数据库可以进行一些优化。


timeout:设置事务的超时时间。


rollbackFor和noRollbackFor:用来设置哪些异常会触发事务回滚。

例如:

@Transactional(isolation = Isolation.REPEATABLE_READ, 
              propagation = Propagation.REQUIRED, 
              readOnly = false, 
              timeout = 3, 
              rollbackFor = RuntimeException.class)

以上就是Spring Boot对事务支持的基本介绍,事务管理是保证数据一致性的重要手段,在进行数据库操作时,适当的使用事务管理是非常有必要的。


3.4 注解式Spring MVC:Spring MVC在Spring Boot中的应用

Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过分离模型(Model),视图(View)和控制器(Controller)的方式,简化了Web开发。在Spring Boot环境下,Spring MVC可以更方便的进行配置和使用。


3.4.1 控制器(Controller)

在Spring MVC中,控制器是处理用户请求的核心部分。在Spring Boot环境下,我们可以通过添加@Controller或者@RestController注解来声明一个控制器类,然后在类中定义处理请求的方法。


@Controller和@RestController这两个注解的区别在于,@Controller通常用于返回一个视图,而@RestController通常用于返回一个对象作为HTTP响应体。

例如,下面这个类定义了一个简单的RESTful API,它处理GET请求,并返回一个字符串:

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

3.4.2 请求映射(RequestMapping)

在Spring MVC中,通过@RequestMapping注解来将一个请求映射到一个处理器方法。在Spring 4.3版本以后,也可以使用如@GetMapping、@PostMapping、@PutMapping、@DeleteMapping等注解来分别处理GET、POST、PUT、DELETE等类型的请求。

例如,下面这个类定义了一个处理POST请求的方法:

@RestController
public class UserController {
    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        // 处理创建新用户的请求
    }
}

3.4.3 参数绑定(Parameter Binding)

在处理请求的方法中,可以通过添加@PathVariable@RequestParam@RequestBody等注解来绑定请求的参数。

  • @PathVariable:用来绑定路径参数,例如/users/{id}中的id参数。
  • @RequestParam:用来绑定请求参数,例如/users?name=John中的name参数。
  • @RequestBody:用来绑定请求体,通常用于处理POST或PUT请求。

例如,下面这个方法接受一个路径参数和一个请求体:

@RestController
public class UserController {
    @PutMapping("/user/{id}")
    public User updateUser(@PathVariable Integer id, @RequestBody User user) {
        // 处理更新用户的请求
    }
}

以上就是在Spring Boot下使用Spring MVC的基本介绍,通过使用Spring MVC,我们可以更方便的开发Web应用。


3.5 实现RESTful:在Spring Boot中构建RESTful API

RESTful架构是一种设计风格,它将Web服务视为资源,并通过URI来指定,使用HTTP的动词(GET、POST、PUT、DELETE等)来描述操作。Spring Boot非常适合创建满足RESTful风格的Web服务。

接下来,我们将通过一个简单的用户管理系统,来展示如何在Spring Boot中实现RESTful服务。

3.5.1 创建User实体

首先,我们创建一个User实体类:

public class User {
    private Integer id;
    private String name;
    private String email;
    // getters and setters...
}

3.5.2 创建UserController

然后,我们创建一个UserController类,该类将处理有关用户的所有HTTP请求:

@RestController
@RequestMapping("/users")
public class UserController {
    private List<User> users = new ArrayList<>(); // 模拟数据库
    @GetMapping
    public List<User> getAllUsers() {
        return users;
    }
    @GetMapping("/{id}")
    public User getUser(@PathVariable Integer id) {
        return users.stream()
            .filter(user -> user.getId().equals(id))
            .findFirst()
            .orElse(null);
    }
    @PostMapping
    public User createUser(@RequestBody User user) {
        users.add(user);
        return user;
    }
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Integer id, @RequestBody User newUser) {
        users.stream()
            .filter(user -> user.getId().equals(id))
            .findFirst()
            .ifPresent(user -> {
                users.remove(user);
                users.add(newUser);
            });
        return newUser;
    }
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Integer id) {
        users.removeIf(user -> user.getId().equals(id));
    }
}

在这个例子中,我们定义了以下几个RESTful API:


获取所有用户:GET /users

获取一个用户:GET /users/{id}

创建一个用户:POST /users

更新一个用户:PUT /users/{id}

删除一个用户:DELETE /users/{id}

3.5.3 测试

最后,我们可以使用任何HTTP客户端(例如Postman或curl)来测试我们的RESTful服务。


以上就是在Spring Boot中实现RESTful服务的一个简单例子。通过使用Spring MVC的注解,我们可以很方便的创建满足RESTful风格的Web服务。


3.6 集成Redis:在Spring Boot中使用Redis

Redis是一个开源的使用ANSI C语言编写、遵循BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Spring Boot对其有着非常好的支持,让我们一起来看看如何进行集成。

3.6.1 引入依赖

首先,在我们的项目的pom.xml中加入Spring Boot对Redis的支持:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.6.2 配置Redis

然后,在application.properties(或application.yml)中配置Redis的信息:

spring.redis.host=localhost
spring.redis.port=6379

这里我们假设Redis服务器安装在本地,端口号为默认的6379。

3.6.3 使用RedisTemplate

接下来,我们可以使用RedisTemplate对象进行Redis操作:

@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setKey(String key, Object value){
        redisTemplate.opsForValue().set(key, value);
    }
    public Object getKey(String key){
        return redisTemplate.opsForValue().get(key);
    }
    // 更多的操作...
}

RedisTemplate是Spring提供的用于操作Redis的工具类,我们可以使用它进行各种各样的Redis操作。

3.6.4 示例代码

下面是一个简单的示例,展示如何在一个controller中使用RedisService:

@RestController
public class RedisController {
    @Autowired
    private RedisService redisService;
    @GetMapping("/redis/set")
    public String set(@RequestParam("key") String key, @RequestParam("value") String value){
        redisService.setKey(key, value);
        return "Success";
    }
    @GetMapping("/redis/get")
    public String get(@RequestParam("key") String key){
        return String.valueOf(redisService.getKey(key));
    }
}

在这个例子中,我们定义了两个接口,一个用于设置键值对,另一个用于获取指定键的值。

以上就是在Spring Boot中集成Redis的基本步骤。实际上,Spring还提供了其他更强大的功能,例如Redis的序列化和反序列化、事务支持等,你可以根据实际需求进行探索和学习。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
30
分享
相关文章
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
101 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
151 17
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
197 2
Spring Security 入门
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
558 7
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
126 7
Spring Boot 入门:简化 Java Web 开发的强大工具
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
246 4
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
82 14
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
108 8
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
248 5
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
177 2

热门文章

最新文章