Spring MVC 视图解析器

在Spring MVC中,配置视图解析器可以帮助将Controller返回的字符串转换为实际的页面地址。以下是配置视图解析器的步骤:

  1. 选择视图解析器 :根据使用的模板技术,选择合适的视图解析器。常见的视图解析器有InternalResourceViewResolverThymeleafViewResolver等。
  2. 配置前缀和后缀:在视图解析器的配置中,通常需要设置前缀(prefix)和后缀(suffix)。前缀指的是存放页面文件的目录,后缀则是页面文件的扩展名。例如,如果设置前缀为"/WEB-INF/views/",后缀为".jsp",那么当Controller返回逻辑视图名"home"时,视图解析器会将其解析为"/WEB-INF/views/home.jsp"。
  3. 配置视图解析器 :可以在XML配置文件中使用<bean>标签来定义视图解析器,或者通过Java Config的方式进行配置。
  4. 理解工作原理:当DispatcherServlet接收到一个HTTP请求时,它会调用HandlerMapping来查找处理该请求的Controller。Controller处理完请求后,会返回一个逻辑视图名。然后DispatcherServlet会使用配置的视图解析器将逻辑视图名解析成实际的页面地址,并将该地址的内容返回给客户端。
XML 复制代码
#yml配置
spring:
  mvc:
#  视图解析器
    view:
      prefix: /imf/
      suffix: .html
#  静态资源访问前缀(区分动态资源和静态资源)
    static-path-pattern: /imf/**
#  静态资源的加载路径
  resources:
    static-locations: classpath:/templates/

将Controller返回的字符串填写到地址栏中,通常涉及到前端页面的跳转和后端Controller的返回值处理。以下是一些可能的方法:

  1. 使用重定向:在Controller中,可以通过返回"redirect:目标URL"的方式来实现页面的重定向。这样,浏览器会自动将"目标URL"加载到地址栏中。
  2. 视图解析器:如果Controller返回的是一个字符串,这个字符串可以被视作逻辑视图名。通过配置视图解析器(ViewResolver),可以将逻辑视图名解析成实际的页面地址,并显示在地址栏中。
  3. 直接返回地址:在某些情况下,Controller可以直接返回一个代表URL的字符串,前端页面可以通过JavaScript等技术将这个URL设置到地址栏中。
  4. 前端页面操作 :在前端页面中,可以使用JavaScript的window.location.href或者history.pushState()等方法来改变地址栏中的URL。
  5. 表单提交 :如果是通过表单提交的方式,可以在表单的action属性中填写Controller返回的字符串作为处理的URL,提交后浏览器会自动更新地址栏。
  6. Ajax请求:在使用Ajax进行页面局部刷新时,虽然可以获取到Controller返回的数据,但不会改变地址栏中的URL。如果需要改变地址栏,可以在Ajax请求成功后,使用JavaScript进行操作。

当使用Springboot配置视图解析器时,

一定不能使用@RestController注解,需要替换成@Controller

@RestController 是一个组合注解 ,@Controller和@ResponseBody的结合。当使用@RestController 注解的类时,其中的方法默认返回的数据会直接以JSON或XMl格式写入HTTP响应体,而不是作为视图解析。这意味着@RestController 适用于构建Restful风格的API,主要用于前后端分离的机构中。

@Controller 这是一个传统的控制器注解,用于处理客户端发起的请求。当使用@Controller注解的类时,其中的方法通常返回视图名称(如JSP界面),由视图解析器处理。这适用于传统的MVC架构,其中控制器负责返回视图,而不是直接数据。

小结:@RestController 适合用于构建返回数据(如Json或XMl) 的Restful API,而@Controller 更适合于需要渲染视图(如Html界面)的传统MVC应用。

相关推荐
她的男孩12 分钟前
数据库改了配置,说好的 30 秒自动刷新根本没跑:那条 @Scheduled 是注释状态
java·后端·架构
君顾120 分钟前
西安24小时自助健身房系统软件开发实战:需求分析与技术落地指南
java·开发语言·健身房
starzy19901 小时前
Flink Session Window 详解及代码实现:从用户会话切割到窗口合并机制
java·flink
gb42152871 小时前
FastExcel和EasyExcel的区别
java
我不会起名字3221 小时前
一天一道力扣Hot100(37):深度优先算法--括号生成
java·数据结构·c++·后端·python·算法·go
大圣编蚕1 小时前
Java 运算符详解:赋值类运算符
java
君顾12 小时前
24小时自助健身房系统开发实战:从0到1完整技术架构指南
java·开发语言·健身房
白远山2 小时前
城市电竞陪玩调度系统实战:从派单算法到多端协同的架构拆解
java·架构·uni-app·需求分析
鹿角片ljp10 小时前
LeetCode 64:最小路径和复盘|二维 DP 与 ACM 模式完整写法
java·数据结构·算法