spring boot开发中的资源处理等问题

文章目录

一、RESTful 风格

  • 核心特点:将请求参数嵌入 URL 路径中,通过 HTTP 方法(GET/POST/PUT/DELETE 等)表达操作语义,使接口设计更简洁、规范。
  • 参数传递方式 :使用 URL 路径占位符(如 /users/{id})传递参数,而非传统的 ?key=value 形式。
  • 示例
    • 获取 ID 为 1 的用户:GET /users/1(参数 id=1 放在 URL 中)
    • 更新 ID 为 1 的用户:PUT /users/1

二、Spring Boot 静态资源处理

  • 默认存放路径 :项目中 src/main/resources/static/ 目录(或 public/resources/ 目录,优先级:resources > static > public)。
  • 访问规则
    • 静态资源可直接通过 URL 访问,路径为 /资源名(无需包含 static 前缀)。例如 static/image/logo.png 可通过 http://localhost:8080/image/logo.png 访问。
    • 静态资源请求(/static/** 路径模式)会被 Spring Boot 内置的资源处理器直接处理,不会经过 Controller 或 HandlerMapping,避免与业务接口冲突。

三、Spring Boot 首页(欢迎页)

  • 默认规则 :Spring Boot 会自动识别 src/main/resources/static/src/main/resources/public/ 目录下的 index.html 文件作为首页。
  • 访问方式 :直接访问应用根路径(如 http://localhost:8080)即可显示该首页。

四、@PathVariable 注解

  • 作用 :用于从 URL 路径中获取参数,配合 RESTful 风格使用。

  • 示例

    java 复制代码
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        // id 的值从 URL 路径中的 {id} 占位符获取
        return userService.getUserById(id);
    }
  • 注意 :若参数名与路径占位符名称不一致,需指定 value,如 @PathVariable("userId") Long id

五、拦截器(Interceptor)

  • 技术本质 :基于 Spring MVC 的接口回调机制,用于在请求处理的预处理、后处理、完成后三个阶段进行拦截操作(如登录验证、日志记录)。

  • 实现方式

    1. 自定义类实现 HandlerInterceptor 接口,重写 preHandle(预处理)、postHandle(后处理)、afterCompletion(完成后)方法。
    2. 通过 WebMvcConfigurer 配置类的 addInterceptors 方法注册拦截器,并指定拦截/排除的路径。
  • 示例

    java 复制代码
    // 自定义拦截器
    public class LoginInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
            // 预处理逻辑(如验证登录状态)
            return true; // true 放行,false 拦截
        }
    }
    
    // 注册拦截器
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginInterceptor())
                    .addPathPatterns("/**") // 拦截所有路径
                    .excludePathPatterns("/login"); // 排除登录路径
        }
    }

六、过滤器(Filter)

  • 技术定位 :Java EE 规范中的 Web 三大组件(Servlet、Filter、Listener)之一,基于 Servlet 容器,在请求进入 Servlet 之前或响应返回客户端之前进行过滤。

  • 与拦截器的区别

    维度 过滤器(Filter) 拦截器(Interceptor)
    技术依赖 依赖 Servlet 容器 依赖 Spring MVC 框架
    拦截范围 所有请求(包括静态资源) 仅拦截 Spring MVC 处理的请求(Controller 方法)
    执行时机 请求进入 Servlet 之前 Controller 方法调用前后
  • 使用场景:字符编码设置、跨域请求处理、敏感词过滤等。

七、触发器(Trigger)

  • 技术定位:数据库层面的机制,当数据库发生指定操作(如 INSERT/UPDATE/DELETE)时,自动触发预设的 SQL 逻辑。
  • 特点
    • 运行在数据库内部,与应用程序解耦。
    • 项目中慎用:迁移数据库时可能因语法差异(如 MySQL 与 Oracle 触发器语法不同)导致兼容性问题,且逻辑隐藏在数据库中,不利于维护。

八、HandlerMapping 组件

  • 作用 :Spring MVC 中用于 映射请求 URL 到具体的 Handler(如 Controller 方法) 的组件,负责解析请求路径并找到对应的处理器。
  • 常见实现类
    1. BeanNameUrlHandlerMapping:根据 Bean 的名称(以 / 开头)映射 URL,如 Bean 名称为 /user,则处理 http://localhost:8080/user 请求。
    2. RequestMappingHandlerMapping(主流):解析 @RequestMapping 及其派生注解(@GetMapping@PostMapping 等),实现 URL 与 Controller 方法的映射,支持复杂的路径匹配和参数绑定。
相关推荐
任风雨20 小时前
13.2.3.Tomcat
java·tomcat
qq_336313931 天前
java基础-字符串
java
二进制person1 天前
Java EE初阶 --多线程2
java·开发语言
橙子家1 天前
Serilog 日志库简单实践(二):控制台与调试 Sinks(.net8)
后端
007php0071 天前
某游戏大厂 Java 面试题深度解析(四)
java·开发语言·python·面试·职场和发展·golang·php
想不明白的过度思考者1 天前
Rust——异步递归深度指南:从问题到解决方案
开发语言·后端·rust
西西学代码1 天前
Flutter---个人信息(5)---持久化存储
java·javascript·flutter
陈果然DeepVersion1 天前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(五)
java·spring boot·kafka·向量数据库·大厂面试·rag·ai智能客服
FAFU_kyp1 天前
Spring Boot 邮件发送系统 - 从零到精通教程
java·网络·spring boot
脚踏实地的大梦想家1 天前
【Docker】P2 Docker 命令:从Nginx部署到镜像分享的全流程指南
java·nginx·docker