程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • SpringMVC

    • SpringMVC 入门
    • Spring MVC 数据接收
    • Spring MVC 数据返回
    • Spring MVC 路径匹配规则
    • Spring MVC 内容协商策略
    • Spring MVC 异步请求处理
    • Spring MVC 静态资源处理
    • Spring MVC 自定义格式化器
    • SpringMVC 自定义拦截器
    • SpringMVC 配置跨域(CORS)
    • Spring MVC 自定义视图控制器
      • 1. 配置视图控制器(View Controller)
      • 2. 视图控制器的应用场景
      • 3. 关键 API 说明
      • 4. 示例测试
      • 5. 总结
    • Spring MVC 自定义视图解析器
    • Spring MVC 自定义方法参数解析器
    • Spring MVC 自定义返回值处理器
    • Spring MVC 自定义消息转换器
    • Spring MVC 消息转换器扩展
    • Spring MVC 自定义异常处理器
    • Spring MVC 自定义异常处理器扩展
  • SpringMVC
  • SpringMVC
scholar
2024-08-17
目录

Spring MVC 自定义视图控制器

# Spring MVC 自定义视图控制器

前言

在 Spring MVC 中,有些页面跳转或视图渲染不涉及业务逻辑,只需要简单地映射一个 URL 到视图或进行页面重定向。为了避免编写冗余的控制器代码,可以通过 WebMvcConfigurer 的 addViewControllers 方法轻松实现这些需求。

# 1. 配置视图控制器(View Controller)

使用 ViewControllerRegistry 可以将特定的 URL 直接映射到视图、重定向路径或返回特定的 HTTP 状态码。

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    // 将访问 "/home" 的请求映射到名为 "home" 的视图
    registry.addViewController("/home").setViewName("home");

    // 将访问 "/test5" 的请求重定向到 "/test4"
    registry.addRedirectViewController("/test5", "/test4");

    // 将访问 "/test/**" 的请求直接返回 HTTP 状态码 500(服务器内部错误)
    registry.addStatusController("/test/**", HttpStatus.INTERNAL_SERVER_ERROR);
}
1
2
3
4
5
6
7
8
9
10
11

# 2. 视图控制器的应用场景

  1. 简化页面跳转和视图渲染:

    • 使用 addViewController 可以将 URL 映射到视图名称,而无需编写控制器方法。适用于简单的静态页面展示,如首页、登录页等。
    registry.addViewController("/home").setViewName("home");
    
    1
    • 访问 http://localhost:8080/home 时,将直接返回名为 home 的视图。
  2. 实现页面重定向:

    • 使用 addRedirectViewController 可以将一个 URL 请求重定向到另一个 URL,例如将旧页面的请求重定向到新页面。
    registry.addRedirectViewController("/test5", "/test4");
    
    1
    • 访问 http://localhost:8080/test5 时,将被重定向到 http://localhost:8080/test4。
  3. 返回特定的 HTTP 状态码:

    • 使用 addStatusController 可以根据请求路径直接返回指定的 HTTP 状态码。这在模拟服务器错误或返回特定错误页面时非常有用。
    registry.addStatusController("/test/**", HttpStatus.INTERNAL_SERVER_ERROR);
    
    1
    • 访问 http://localhost:8080/test/anything 将返回 HTTP 500 状态码。

# 3. 关键 API 说明

  • addViewController(String path):将指定的 URL 映射到视图名称。这些视图通常是 JSP、HTML 或 Thymeleaf 模板等静态页面。
  • setViewName(String viewName):设置要返回的视图名称。视图名称需要与配置的视图解析器相匹配。
  • addRedirectViewController(String urlPath, String redirectUrl):将指定的 URL 请求重定向到新的 URL。通常用于 URL 重构或页面迁移。
  • addStatusController(String urlPath, HttpStatus status):将指定的 URL 直接返回指定的 HTTP 状态码。这在维护页面或特殊场景下非常有用。

# 4. 示例测试

控制器代码示例:

@RestController
public class TestController {

    @GetMapping("/test4")
    public String test4() {
        return "This is test4 page.";
    }
}
1
2
3
4
5
6
7
8

请求示例:

  1. 请求 /test5 重定向到 /test4:

    • URL: http://localhost:8080/test5
    • 返回结果:页面内容为 "This is test4 page."
  2. 请求 /test/test 返回 HTTP 500 状态码:

    • URL: http://localhost:8080/test/test
    • 返回结果:服务器返回 500 状态码,页面显示错误提示。

# 5. 总结

  • 使用视图控制器可以简化页面跳转、重定向和错误页面的处理逻辑,避免为简单的映射编写不必要的控制器代码。
  • 通过配置 addViewControllers,可以实现:
    • 简单的静态页面渲染。
    • 页面重定向。
    • 返回特定的 HTTP 状态码。
  • 在复杂的应用中,通过视图控制器的配置可以让页面跳转和状态返回更直观和简洁。

通过这些配置,你可以灵活地控制应用中的页面跳转和错误处理,提高代码的可读性和可维护性。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
SpringMVC 配置跨域(CORS)
Spring MVC 自定义视图解析器

← SpringMVC 配置跨域(CORS) Spring MVC 自定义视图解析器→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式