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

springboot中路径默认配置与重定向/转发所存在的域对象

Spring Boot 是一种简化 Spring 应用开发的框架,它提供了多种默认配置和方便的开发特性。在 Web 开发中,路径配置和请求的重定向/转发是常见操作。本文将详细介绍 Spring Boot 中的路径默认配置,并解释重定向和转发过程中存在的域对象。

一、Spring Boot路径默认配置

1. 基本路径配置

Spring Boot 默认将所有静态资源放置在 src/main/resources/static 目录下,并通过以下配置自动映射:

  • 静态资源:如 HTML、CSS、JavaScript 文件,默认放在 staticpublicresources 和 META-INF/resources 目录下。
  • 模板引擎:如 Thymeleaf 模板文件,放在 src/main/resources/templates 目录下。
2. 应用上下文路径

Spring Boot 默认应用的上下文路径为根路径(/)。可以通过配置文件 application.properties 或 application.yml 更改上下文路径。

# application.properties
server.servlet.context-path=/myapp
​
# application.yml
server:
  servlet:
    context-path: /myapp
​
3. 控制器路径

控制器中的路径通过 @RequestMapping 注解配置,支持多种请求方法(如 GET、POST、PUT、DELETE)。

@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}
​

二、重定向与转发

1. 重定向

重定向是指服务器返回一个状态码(如 302),指示客户端(浏览器)重新请求另一个 URL。重定向会导致浏览器的地址栏发生变化,并且是一次新的请求。

  • 使用方式
@RequestMapping("/redirect")
public String redirect() {
    return "redirect:/newUrl";
}
​
  • 特点

    • 浏览器地址栏变化。
    • 是一次新的 HTTP 请求。
    • 无法保留请求中的数据(如表单数据)。
2. 转发

转发是指服务器将请求内部转发到另一个资源(如另一个控制器或 JSP),客户端对此过程无感知,地址栏不会发生变化。

  • 使用方式
@RequestMapping("/forward")
public String forward() {
    return "forward:/newUrl";
}
​
  • 特点

    • 浏览器地址栏不变。
    • 仍然是同一次请求。
    • 可以保留请求中的数据。

三、域对象

在 Spring MVC 中,域对象用于在请求处理过程中存储和传递数据,主要包括:

  • Request 域:用于在一次请求内传递数据,生命周期为单次请求。
  • Session 域:用于在一次会话内传递数据,生命周期为用户会话期间。
  • Application 域:用于在整个应用范围内共享数据,生命周期为应用程序的运行期间。
1. Request 域对象

用于存储一次请求中的数据,通常在转发过程中使用。

@RequestMapping("/setRequestAttribute")
public String setRequestAttribute(HttpServletRequest request) {
    request.setAttribute("message", "This is a request attribute");
    return "forward:/showRequestAttribute";
}

@RequestMapping("/showRequestAttribute")
public String showRequestAttribute(HttpServletRequest request, Model model) {
    String message = (String) request.getAttribute("message");
    model.addAttribute("message", message);
    return "display";
}
​
2. Session 域对象

用于存储用户会话期间的数据,通常在多次请求间共享数据。

@RequestMapping("/setSessionAttribute")
public String setSessionAttribute(HttpSession session) {
    session.setAttribute("user", "John Doe");
    return "redirect:/showSessionAttribute";
}

@RequestMapping("/showSessionAttribute")
public String showSessionAttribute(HttpSession session, Model model) {
    String user = (String) session.getAttribute("user");
    model.addAttribute("user", user);
    return "display";
}
​
3. Application 域对象

用于存储应用程序级别的数据,通常在整个应用范围内共享数据。

@RequestMapping("/setApplicationAttribute")
public String setApplicationAttribute(ServletContext context) {
    context.setAttribute("appVersion", "1.0.0");
    return "redirect:/showApplicationAttribute";
}

@RequestMapping("/showApplicationAttribute")
public String showApplicationAttribute(ServletContext context, Model model) {
    String appVersion = (String) context.getAttribute("appVersion");
    model.addAttribute("appVersion", appVersion);
    return "display";
}

http://www.kler.cn/a/530085.html

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 main函数 — ngx_cdecl 宏
  • 何谓共赢?
  • 【C++语言】卡码网语言基础课系列----12. 位置互换
  • 深入解析 CSS 中不常用属性及其相互作用
  • DeepSeek r1本地安装全指南
  • Vue 与 Electron 结合开发桌面应用
  • react注意事项
  • 6 [新一代Github投毒针对网络安全人员钓鱼]
  • 【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO
  • 双指针算法思想——OJ例题扩展算法解析思路
  • 悬浮按钮和可交互提示的使用
  • 设计数据库表会考虑哪些内容?
  • 文字投影效果
  • C++ Primer 命名空间的using声明
  • 2025最新在线模型转换工具onnx转换ncnn,mnn,tengine等
  • mysql死锁排查_mysql 死锁问题排查
  • 解密全同态加密中的自举(Bootstrapping)
  • CKA 不假题 练习笔记 (四)
  • 80-《红球姜》
  • 在实际开发中,如何正确使用 INT(1) 和 INT(10)
  • 动态规划学习
  • Rust语言的编程范式
  • 虚幻UE5手机安卓Android Studio开发设置2025
  • 996引擎-地图:动态创建副本地图
  • 音视频入门基础:RTP专题(7)——RTP协议简介
  • 第一篇:从技术架构视角解析DeepSeek的AI底层逻辑