程序员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 自定义视图控制器
    • Spring MVC 自定义视图解析器
      • 1. 配置视图解析器(View Resolver)
      • 2. 关键配置参数解析
      • 3. 示例应用场景
      • 4. 示例控制器和视图
      • 5. 注意事项
      • 6. 扩展:支持 Thymeleaf 等其他视图技术
    • Spring MVC 自定义方法参数解析器
    • Spring MVC 自定义返回值处理器
    • Spring MVC 自定义消息转换器
    • Spring MVC 消息转换器扩展
    • Spring MVC 自定义异常处理器
    • Spring MVC 自定义异常处理器扩展
  • SpringMVC
  • SpringMVC
scholar
2024-08-17
目录

Spring MVC 自定义视图解析器

# Spring MVC 自定义视图解析器

前言

在 Spring MVC 中,视图解析器(View Resolver)用于将控制器返回的视图名解析为实际的视图资源,例如 JSP 文件、HTML 页面或 Thymeleaf 模板。通过配置自定义的视图解析器,可以灵活地管理视图文件的路径和类型。

# 1. 配置视图解析器(View Resolver)

在 WebMvcConfigurer 接口中,通过重写 configureViewResolvers 方法来配置视图解析器:

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    // 注册自定义的内部资源视图解析器,用于解析 JSP 文件
    registry.viewResolver(internalResourceViewResolver());
}

/**
 * 配置 InternalResourceViewResolver 视图解析器
 */
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
    // 创建 InternalResourceViewResolver 实例
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();

    // 设置视图文件的前缀路径
    // 例如,控制器返回 "home" 视图名时,解析器将寻找 "/WEB-INF/jsp/home.jsp"
    resolver.setPrefix("/WEB-INF/jsp/");

    // 设置视图文件的后缀
    // 这里指定 ".jsp",表示解析器主要解析 JSP 文件
    resolver.setSuffix(".jsp");

    // 可以设置视图解析器的顺序,数值越小优先级越高
    resolver.setOrder(1);

    return resolver; // 返回配置好的视图解析器实例
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 2. 关键配置参数解析

  • setPrefix(String prefix):设置视图文件的前缀路径。例如,当控制器返回的视图名为 "home" 时,视图解析器将定位到 "/WEB-INF/jsp/home.jsp"。
  • setSuffix(String suffix):设置视图文件的后缀。通常用于指定文件扩展名,如 .jsp、.html 等。
  • setOrder(int order):设置视图解析器的优先级,数值越小优先级越高。对于多个视图解析器的场景,通过此参数控制解析顺序。
  • InternalResourceViewResolver:这是 Spring MVC 内置的视图解析器,用于解析 JSP 文件等内部资源。

# 3. 示例应用场景

假设你在项目中使用 JSP 作为视图技术,通过配置 InternalResourceViewResolver 可以实现以下效果:

  • 视图文件组织结构:所有 JSP 文件都放置在 WEB-INF/jsp/ 目录下,例如 home.jsp、about.jsp 等。
  • 控制器返回的视图名解析:控制器返回的视图名(如 "home")将自动解析为 "/WEB-INF/jsp/home.jsp"。

# 4. 示例控制器和视图

创建一个简单的控制器,返回视图名:

@Controller
public class HomeController {

    @GetMapping("/home")
    public String home() {
        // 返回的视图名将由视图解析器解析为 /WEB-INF/jsp/home.jsp
        return "home";
    }
}
1
2
3
4
5
6
7
8
9

在 WEB-INF/jsp/ 目录下创建对应的 JSP 文件 home.jsp:

<!-- /WEB-INF/jsp/home.jsp -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home Page</title>
</head>
<body>
    <h1>Welcome to the Home Page!</h1>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11

启动应用后,访问 http://localhost:8080/home,将会渲染 home.jsp 页面。

# 5. 注意事项

  1. 视图解析器顺序:在复杂项目中,可能会有多个视图解析器(如 JSP、Thymeleaf、Freemarker)。通过设置 setOrder(int order) 可以确保正确的视图解析器在合适的场景下被优先使用。

  2. 路径设置:视图解析器的前缀和后缀配置应与项目的实际文件路径相匹配,否则可能会导致找不到视图文件的错误。

  3. 多视图技术支持:在某些项目中,你可能需要同时支持 JSP 和 Thymeleaf 等多种视图技术。此时可以配置多个视图解析器,并通过不同的路径或文件后缀进行区分。

# 6. 扩展:支持 Thymeleaf 等其他视图技术

除了 InternalResourceViewResolver,还可以配置其他类型的视图解析器,如:

  • ThymeleafViewResolver:用于解析 Thymeleaf 模板文件。
  • FreeMarkerViewResolver:用于解析 Freemarker 模板文件。

不同的视图解析器可以通过 ViewResolverRegistry 进行配置,实现多视图技术共存。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
Spring MVC 自定义视图控制器
Spring MVC 自定义方法参数解析器

← Spring MVC 自定义视图控制器 Spring MVC 自定义方法参数解析器→

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