Loading... **Spring Boot中的路径默认配置与重定向/转发所存在的域对象** Spring Boot 是一种简化 Spring 应用开发的框架,它提供了多种默认配置和方便的开发特性。在 Web 开发中,路径配置和请求的重定向/转发是常见操作。本文将详细介绍 Spring Boot 中的路径默认配置,并解释重定向和转发过程中存在的域对象。 ![](https://www.8kiz.cn/usr/uploads/2024/06/4219678137.png) ### 一、Spring Boot路径默认配置 #### 1. 基本路径配置 Spring Boot 默认将所有静态资源放置在 `src/main/resources/static` 目录下,并通过以下配置自动映射: - **静态资源**:如 HTML、CSS、JavaScript 文件,默认放在 `static`、`public`、`resources` 和 `META-INF/resources` 目录下。 - **模板引擎**:如 Thymeleaf 模板文件,放在 `src/main/resources/templates` 目录下。 #### 2. 应用上下文路径 Spring Boot 默认应用的上下文路径为根路径(`/`)。可以通过配置文件 `application.properties` 或 `application.yml` 更改上下文路径。 ```properties # application.properties server.servlet.context-path=/myapp ``` ```yaml # application.yml server: servlet: context-path: /myapp ``` #### 3. 控制器路径 控制器中的路径通过 `@RequestMapping` 注解配置,支持多种请求方法(如 GET、POST、PUT、DELETE)。 ```java @RestController @RequestMapping("/api") public class MyController { @GetMapping("/hello") public String sayHello() { return "Hello, World!"; } } ``` ### 二、重定向与转发 #### 1. 重定向 重定向是指服务器返回一个状态码(如 302),指示客户端(浏览器)重新请求另一个 URL。重定向会导致浏览器的地址栏发生变化,并且是一次新的请求。 - **使用方式**: ```java @RequestMapping("/redirect") public String redirect() { return "redirect:/newUrl"; } ``` - **特点**: - 浏览器地址栏变化。 - 是一次新的 HTTP 请求。 - 无法保留请求中的数据(如表单数据)。 #### 2. 转发 转发是指服务器将请求内部转发到另一个资源(如另一个控制器或 JSP),客户端对此过程无感知,地址栏不会发生变化。 - **使用方式**: ```java @RequestMapping("/forward") public String forward() { return "forward:/newUrl"; } ``` - **特点**: - 浏览器地址栏不变。 - 仍然是同一次请求。 - 可以保留请求中的数据。 ### 三、域对象 在 Spring MVC 中,域对象用于在请求处理过程中存储和传递数据,主要包括: - **Request 域**:用于在一次请求内传递数据,生命周期为单次请求。 - **Session 域**:用于在一次会话内传递数据,生命周期为用户会话期间。 - **Application 域**:用于在整个应用范围内共享数据,生命周期为应用程序的运行期间。 #### 1. Request 域对象 用于存储一次请求中的数据,通常在转发过程中使用。 ```java @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 域对象 用于存储用户会话期间的数据,通常在多次请求间共享数据。 ```java @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 域对象 用于存储应用程序级别的数据,通常在整个应用范围内共享数据。 ```java @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"; } ``` ### 四、分析说明表 | 域对象 | 说明 | 生命周期 | 示例 | | -------------- | ------------------------ | ---------------- | -------------------------------------- | | Request 域 | 在一次请求内传递数据 | 单次请求 | `request.setAttribute("key", value)` | | Session 域 | 在一次会话内传递数据 | 用户会话期间 | `session.setAttribute("key", value)` | | Application 域 | 在整个应用范围内共享数据 | 应用程序运行期间 | `context.setAttribute("key", value)` | ### 五、总结 Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。 最后修改:2024 年 06 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏