当前位置: 首页 > news >正文

(8)SpringMVC中的视图类型及其特点,以及视图控制器view-controller的配置

SpringMVC的视图

转发和重定向的区别及其原理,参考文章

视图类型及特点

视图的作用就是将Model中的数据渲染到页面上并展示给用户,SpringMVC中视图对应的View接口有三种实现类对应三种视图解析器

  • 默认有转发视图InternalResourceView重定向视图RedirectView以及ThymeleafView视图,当工程引入jstl的依赖转发视图会自动转换为JstlView
// 视图接口
View view; 
// 获取视图名称
String viewName = mv.getViewName();
if (viewName != null) {// 解析视图名称,根据视图名称创建对应的视图解析器view = resolveViewName(viewName, mv.getModelInternal(),locale,request);
}

ThymeleafView视图

当控制器方法返回或在ModelView对象中设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的ThymeleafView视图解析器解析

  • ThymeleafView视图解析器会给视图名称拼接上视图前缀和视图后缀得到页面的物理地址,然后解析页面中的Thymeleaf语法渲染数据并通过转发的方式实现跳转
<a th:href="@{/testThymeleafView}">测试ThymeleafView</a><br>
@RequestMapping("/testThymeleafView")
public String testThymeleafView(){return "success";
}

转发视图

当控制器方法返回或在ModelView对象中所设置的视图名称以"forward:"为前缀时,此时的视图名称会被InternalResourceView视图解析器解析

  • InternalResourceView视图解析器会将前缀"forward:"去掉,剩余部分作为最终请求路径转发到某个请求或页面(可以解析jsp页面中的语法)
<a th:href="@{/testForward}">测试InternalResourceView</a><br>		
@RequestMapping("/testForward")
public String testForward(){// 这种方式转发到的页面中如果有ThymeleafView语法是不会被解析的return "forward:/testThymeleafView";
}																	

重定向视图

当控制器方法返回或在ModelView对象中所设置的视图名称以"redirect:"为前缀时,此时的视图名称会被RedirectView视图解析器解析

  • RedirectView视图解析器会将前缀"redirect:"去掉,如果剩余部分以/开始则会自动拼接上下文路径作为最终请求路径重定向到某个请求或页面
<a th:href="@{/testRedirect}">测试RedirectView</a><br>
@RequestMapping("/testRedirect")
public String testRedirect(){//redirect:/会自动加上下文路径return "redirect:/testThymeleafView";
}

配置视图控制器view-controller

在控制器方法中只需要实现页面跳转(只设置页面视图名称)功能而没有其他业务,此时可以在SpringMvc的配置文件中使用view-controller标签表示控制器方法

  • 首先要引入mvc的命名空间及其约束文件
  • 只要在SpringMvc的配置文件中设置了view-controller标签,此时只有视图控制器配置的请求才会生效,其他控制器方法中配置的请求映射将全部失效
  • 开启MVC的注解驱动mvc:annotation-driven,可以保证视图控制器设置的请求和控制器方法设置的请求全部都会被前端控制器处理
属性功能
path设置处理的请求地址即请求映射RequestMapping
view-name设置请求地址所对应的视图名称即控制器方法返回值,依然遵守视图解析器的流程

需求: WEB-INF目录下的资源是受保护的即不能通过路径在浏览器中直接访问

<!DOCTYPE html>
<!--引入thymeleaf的命名空间,使用thymeleaf标签-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body><h1>Hello SpringMvc</h1>
</body>
</html>

单独定义一个控制器方法跳转到首页

@Controller
public class HelloController {// 处理http://localhost:8080/SpringMvc/请求@RequestMapping("/")public String index() {// 返回逻辑视图名称,对应页面的物理地址为/WEB-INF/templates/index.htmlreturn "index";}
}

在SpringMvC的核心配置文件中使用视图控制器标签跳转到首页

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 					http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd 					http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--自动扫描控制层组件--><context:component-scan base-package="com.atguigu.mvc.controller"></context:component-scan><!--配置Thymeleaf视图解析器--><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"></bean><!--视图控制器,设置请求对应的视图名称实现页面的跳转--><mvc:view-controller path="/" view-name="index"></mvc:view-controller><!--开启MVC的注解驱动,保证视图控制器设置的请求和控制器方法设置的请求全部都会被前端控制器处理--><mvc:annotation-driven />
</beans>
http://www.lryc.cn/news/187621.html

相关文章:

  • ansible学习笔记分享
  • 以dzzoffice为例设置通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)
  • 加拿大艾伯塔省执法部门利用OpenText Encase显着提高案件效率
  • 【Codeforces】Educational Codeforces Round 156 [Rated for Div. 2]
  • 结合swagger的前端架构小记
  • Python字典全解析:从基础到高级应用
  • Fourier变换中的能量积分及其详细证明过程
  • 保护 Web 服务器安全性
  • docker数据管理和网络通信
  • 代理IP与Socks5代理:网络工程师的神奇魔法棒
  • 【K8S系列】深入解析k8s 网络插件—kube-router
  • Flutter的Platform介绍-跨平台开发,如何根据不同平台创建不同UI和行为
  • gitlab docker部署,备份,恢复
  • 腾讯云/阿里云国际站代理:阿里云、华为云和腾讯云“大展拳脚”,与国际巨头未来竞争焦点是AI计算?
  • 基于Java+SpringBoot+Vue企业OA管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
  • Java架构师系统架构设计性能评估
  • Android可滑动的分时图以及常用动画
  • 软考系统架构师常考知识点整理(含案例分析、论文历年题目总结)
  • Netty通信在中间件组件中的广泛使用-Dubbo3举例
  • 基于Java的在线拍卖系统设计与实现(源码+lw+部署文档+讲解等)
  • Maven Pom
  • 【运维日常】mongodb 集群生产实践
  • 【MATLAB源码-第45期】基于matlab的16APSK调制解调仿真,使用卷积编码软判决。
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 八)
  • SQL按照id集合顺序返回
  • 04训练——基于YOLO V8的自定义数据集训练——在windows环境下使用pycharm做训练-1总体步骤
  • iview表格 异步修改列数据卡顿 滚动条失效
  • 【Linux】常驻内核和虚拟内存的区别
  • Qt 串口接收包含汉字的数据,汉字乱码
  • 设计模式 - 结构型模式考点篇:适配器模式(类适配器、对象适配器、接口适配器)