46、Spring Boot 详细讲义(三)

发布于:2025-04-12 ⋅ 阅读:(32) ⋅ 点赞:(0)

五、Spring Boot 与 Web 开发

1. 简介

Spring Boot 是基于 Spring Framework 开发的一个框架,旨在简化配置,快速构建应用。它内嵌 Tomcat 等 servlet 容器,支持 RESTful API 开发,处理静态资源,以及集成视图层技术如 Thymeleaf 和 Freemarker。

2. Spring MVC 集成

Spring MVC 是 Spring Framework 中用于构建 Web 应用的核心组件。Spring Boot 通过自动配置和内置 Servlet 容器,显著简化了 Spring MVC 的配置和使用流程。以下是关于 Spring MVC 在 Spring Boot 中的集成的详细讲解。


2.1. 内嵌 Servlet 容器

Spring Boot 内置了多种 Servlet 容器,包括 Tomcat、Jetty 和 Undertow,允许开发者无需外部容器即可运行 Web 应用。

1. 内置 Tomcat

Tomcat 是 Spring Boot 的默认内嵌 Servlet 容器。通过在 pom.xml 中添加 spring-boot-starter-web 依赖,应用会自动配置 Tomcat 容器。

示例:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>  
2. 切换到 Jetty 或 Undertow

如果需要使用其他 Servlet 容器,可以通过修改 pom.xml 文件,排除默认的 Tomcat 依赖,并添加所需容器的依赖。

示例:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <exclusions>  
        <exclusion>  
            <groupId>org.apache.tomcat.embed</groupId>  
            <artifactId>tomcat-embed-core</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency>  
<dependency>  
    <groupId>org.eclipse.jetty</groupId>  
    <artifactId>jetty-servlet</artifactId>  
</dependency>  
3. 启动应用

通过主应用类的 @SpringBootApplication 注解和 SpringApplication.run() 方法,启动应用时,内嵌的 Servlet 容器会自动启动并运行。

示例:

@SpringBootApplication  
public class WebApplication {
     
    public static void main(String[] args) {
     
        SpringApplication.run(WebApplication.class, args);  
    }  
}  

2.2. 默认配置

Spring Boot 提供了丰富的默认配置,简化了 Spring MVC 的使用。

1. 自动配置 DispatcherServlet

Spring Boot 自动配置 DispatcherServlet,并将其映射到 / 路径,处理所有 HTTP 请求。这种默认配置无需手动设置,减少了开发者的工作量。

2.默认的视图配置

Spring Boot 默认支持基于 @RestController 的 RESTful API 开发,返回 JSON 数据。对于需要视图层的应用,可以通过配置视图解析器(如 Thymeleaf 或 Freemarker)来实现。

3. 静态资源处理

默认情况下,Spring Boot 可以处理位于 src/main/resources/static 目录下的静态资源文件,如 HTML、CSS、JavaScript 和图片。这些资源可以通过相应的 URL 访问,无需额外配置。


2.3. 启用 Spring MVC

要使用 Spring MVC 的完整功能,需要在项目中添加相应的依赖并进行配置。

1. 添加 Spring MVC 依赖

通过在 pom.xml 中添加 spring-boot-starter-web 依赖,启用 Spring MVC 功能。这个依赖包含了 Spring MVC 及其相关组件,如 DispatcherServlet 和视图解析器。

示例:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>  
2. 创建 Spring MVC 控制器

使用 @Controller@RequestMapping 注解创建控制器,处理 HTTP 请求并返回视图或数据。

示例:

@Controller  
@RequestMapping("/users")  
public class UserController {
     
    
    @Autowired  
    private UserService userService;  
    
    @GetMapping  
    public String getAllUsers(Model model) {
     
        List<User> users = userService.getAllUsers();  
        model.addAttribute("users", users);  
        return "users";  
    }  
}  
3. 配置视图解析器

application.properties 文件中配置视图解析器,指定视图的前缀和后缀。

示例:

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

2.4. 自定义配置

Spring Boot 允许开发者自定义 Spring MVC 的配置,以满足特定需求。

1. 使用 WebMvcConfigurer

通过实现 WebMvcConfigurer 接口,自定义 MVC 配置,如资源处理和默认 servlet。

示例:

@Configuration  
@EnableWebMvc  
public class WebConfig implements WebMvcConfigurer {
     
    
    @Override  
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
     
        configurer.enable();  
    }  
    
    @Override  
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
     
        registry.addResourceHandler("/static/**")  
                .addResourceLocations("classpath:/static/");  
    }  
}  
2. 配置 DispatcherServlet

application.properties 中配置 DispatcherServlet 的映射路径,自定义其处理请求的范围。

示例:

spring.mvc.servlet.path=/api  

2.5. 高级功能

1. 国际化

通过 MessageSourceLocaleResolver 实现国际化,使应用支持多语言。

示例:

@Bean  
public MessageSource messageSource() {
     
    ResourceBundleMessageSource source = new ResourceBundleMessageSource();  
    source.setBasename("messages");  
    return source;  
}  
2. 拦截器

通过 HandlerInterceptor 实现拦截功能,执行请求前后的逻辑。

示例:

public class LoggingInterceptor implements HandlerInterceptor {
     
    
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     
        System.out.println("Before handling the request");  
        return true;  
    }  
    
    @Override  
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
     
        System.out.println("After handling the request");  
    }  
}  
3. 异常处理

通过 @ExceptionHandler@ControllerAdvice 处理全局异常,统一返回错误响应。

示例:

@ControllerAdvice  
public class GlobalExceptionHandler {
     
    
    @ExceptionHandler(value = Exception.class)  
    public ResponseEntity<?

网站公告

今日签到

点亮在社区的每一天
去签到