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应用。

相关推荐
考虑考虑29 分钟前
Jpa使用union all
java·spring boot·后端
用户3721574261351 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊2 小时前
Java学习第22天 - 云原生与容器化
java
渣哥4 小时前
原来 Java 里线程安全集合有这么多种
java
间彧4 小时前
Spring Boot集成Spring Security完整指南
java
间彧4 小时前
Spring Secutiy基本原理及工作流程
java
Java水解5 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆7 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学8 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole8 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端