SpringMVC--05视图

【SpringMVC笔记05】SpringMVC中的视图解析器 这篇文章主要介绍了SpringMVC中几种常用的视图解析器。 阅读详情

视图View

springmvc中常用视图

  • InternalResourceView
    • 内部资源视图
    • 是SpringMVC内置的,专门负责解析JSP模板语法,同时也负责转发功能的实现
  • RedirectView
    • 重定向视图
    • 是SpringMVC内置的,专门负责重定向功能实现
  • ThymeleafView
    • 第三方,专门负责解析Thymeleaf模板语法的
    • 使用时注意<html lang="en" xmlns:th="http://www.thymeleaf.org">

实现视图机制的核心类和接口

  • DispatcherServlet
    • 前端控制器
    • 负责接收前端的请求
    • 根据请求路径找到对应的处理器方法
    • 执行处理器方法,并最终返回ModelAndView对象
  • ViewResolver接口
    • 视图解析器接口
    • 将逻辑视图名称转换为物理视图名称(将逻辑名称转换为物理路径),并最终返回一个View接口对象
  • View接口
    • 视图接口
    • 负责将模板语法的字符串转换成html代码,并将html代码响应给浏览器

视图解析流程

下面的各个类|接口都是SpringMVC中源码选取的片段,这些类中方法的执行,反映了底层视图解析的流程

DispatcherServlet类

public class DispatcherServlet extends FrameworkServlet{
    // 前端控制器的核心方法,处理请求,返回视图,渲染视图,都是在这个方法中完成
    protected void doDispatch(HttpServletRequest request,HttpServletResponse response) throws Exception{
        // 根据请求路径调用映射的处理器方法,处理器方法执行结束之后,返回逻辑视图名称
        // 返回逻辑视图名称之后,DispatcherServlet会将逻辑视图名称ViewName+Model,将其封装为ModelAndView对象
        mv=ha.handle(processedRequest,response,mappedHandler.getHandler());
        
        // 这行代码作用是处理视图
        processDispatchResult(processedRequest,response,mappedHandler,mv,dispatchException);
    }

    private void processDispatchResult(
        HttpServletRequest request,
        HttpServletResponse response,
        @Nullable HandlerExecutionChain mappedHandler,
        @Nullable ModelAndView mv,
        @Nullable Exception exception)throws Exception{
            // 渲染页面(将模板字符串转换成html代码响应到服务器)
            render(mv,request,response);
        }

    protected void render(ModelAndView mv,HttpServletRequest request, HttpServletResponse response) throws Exception{
        // 这个方法作用是将逻辑视图名称转换成物理视图名称,并且最终返回视图对象view
        View view = resolveViewName(viewName,mv.getModelInternal(),locale,request);

        // 真正的将模板字符串转换成HTML代码,并且将HTML代码响应给浏览器(真正渲染)
        view.render(mv.getModelInternal(),request,response);
    }

    protected View resolveViewName(
        String viewName,
        @Nullable Map<String, Object> model,
        Locale locale,
        HtpServletRequest request) throws Exception{
            // 上述render方法中真正调用执行的方法
            ViewResolver viewResolver;//底层会创建一个ThymeleafViewResolver
            // ,如果使用Thymeleaf,那么该接口实现类就为ThymeleafView对象
            View view = viewResolver.resolveViewName(viewName,locale);
            return view;
        }
}

ViewResolver接口

public interface ViewResolver{
    // 这里只是一个规范了行为的接口,具体的实现类要根据所选择的模板解析器来确定(列如,如果使用Thymeleaf,那么该接口实现类就为ThymeleafViewResolver)
    // 该方法是将逻辑视图名称转换成物理视图名称,并且最终返回视图对象View
    View resolveViewName(String viewName,Locale locale) throws Exception;
}

View接口

// 该接口负责将模板字符串转换成HTML代码,响应给浏览器
public interface View(){
    void render(
        @Nullable Map<String, ?> model, 
        HttpServletRequest request, 
        HttpServletResponse response) throws Exception;
}

代码流程描述

若在SpringMVC中使用了Thymeleaf作为视图

  1. 浏览器发送请求给web服务器
  2. Spring MVC中的DispatcherServlet接收到请求
  3. DispatcherServlet根据请求路径分发到对应的Controller
  4. DispatcherServlet调用Controller的方法
  5. Controller的方法处理业务并返回一个逻辑视图名给DispatcherServlet
  6. DispatcherServlet调用ThymeleafViewResolver的resolveViewName方法,将逻辑视图名转换为物理视图名,并创建ThymeleafView对象返回给DispatcherServlet
  7. DispatcherServlet再调用ThymeleafView的render方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终渲染

若在SpringMVC中使用了JSP作为视图

  1. 浏览器发送请求给web服务器
  2. Spring MVC中的DispatcherServlet接收到请求
  3. DispatcherServlet根据请求路径分发到对应的Controller
  4. DispatcherServlet调用Controller的方法
  5. Controller的方法处理业务并返回一个逻辑视图名给DispatcherServlet
  6. DispatcherServlet调用InternalResourceViewResolver的resolveViewName方法,将逻辑视图名转换为物理视图名,并创建InternalResourceView对象返回给DispatcherServlet
  7. DispatcherServlet再调用InternalResourceView的render方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终渲染。

转发与重定向

转发和重定向的区别

  • 转发是一次请求,因此浏览器地址栏上的地址不会发生变化。
  • 重定向是两次请求,因此浏览器地址栏上地址会发送变化
  • 转发的代码实现request.getRequestDispatcher("/index").forward(request,response)
  • 重定向的代码实现response.sendRedirect("/webapproot/index");
  • 转发是服务器内部资源跳转,由服务器来控制,不可实现跨域访问
  • 重定向可以完成内部资源的跳转也可以完成跨域跳转。
  • 转发的方式可以访问WEB-INF目录下受保护的资源
  • 重定向相当于浏览器重新发送了一次请求,再浏览器直接发送的请求是无法访问WEB-INF目录下受保护的资源
转发的原理
  1. 假设发送了/a请求,执行了AServlet
  2. 在Aservlet中通过request.getRequestDispatcher("/b").forward(request,response)转发到BServlet
  3. 从AServlet跳转到BServlet是服务器内部来控制的。对于浏览器而言,浏览器只发送了一个/a请求
重定向原理
  1. 假设发送了/a请求,执行了AServlet
  2. 在Aservlet中通过response.sendRedirect("/webapproot/b")重定向到BServlet
  3. 此时浏览器会将请求路径/webapproot/b响应给浏览器
  4. 浏览器会自发的再次发送/webapproot/b请求来访问BServlet
  5. 因此对于重定向来说,发送了两次请求,一次是/webapproot/a,另一次是/webapproot/b

SpringMVC实现转发和重定向

@RequestMapping("/a")
public String toA(){
    return "a"; //转发到a
    //return "forward:/b" //转发到b
    //return "redirect:/b" //重定向到b
}

@RequestMapping("/b")
public String toB(){
    return "b"
}

当return “a”;的时候,返回了一个逻辑视图名称,这种方式跳转到视图,默认采用的是forward方式跳转过去,只不过,底层创建的视图对象是ThymeleafView

当return “forward:/b”;转发到/b,这桑一次请求,底层创建的视图对象是InternalResourceView对象

当return “redirect:/b”;转发到/b这是两次请求,底层创建的视图对象是RedirectView对象

上述所提到的转发和重定向使用的return "forward:/b|redirect:/b"中的/b是请求资源的路径不是逻辑视图名称

若要使用重定向进行跨域,则必须在redirect后面写上全路径

访问静态资源

由于在web.xml文件中配置了springmvc的前端控制器映射,使得浏览器的所有请求都会走向springmvc的DispatcherServlet,而我们并没有配置关于静态资源的映射,因此不能直接访问静态资源

解决方法1

在Tomcat服务器中提供了一个默认的Servlet,叫做org.apache,catalina.servlets.DefaultServlet
在CATALINA_HOME/conf/web.xml文件中,有这个默认的Servlet的相关配置

要使用这个Servlet需要在springmvc.xml文件中配置<mvc:default-servlet-handler/> <mvc:annotation-driven>
当开启这个Servlet后默认会先走DispatcherServlet若发生404是会走DefaultServlet然后DefaultServlet会定位静态资源

解决方法2

在springmvc.xml中配置静态资源处理器

<mvc:resources mapping="/static/**" location="/static/" /> <mvc:annotation-driven/>

这里的配置是指当路径符合/static/**的时候会去/static/位置找资源

MLX90640 热成像 STM32 MLX90640 热成像 阅读详情

相关推荐

基于MicroPython的ESP32与微信小程序MQTT通信实战

本文详细介绍了基于MicroPython的ESP32与微信小程序通过MQTT协议实现远程控制的完整实战方案。项目利用巴法云作为免费MQTT服务器,提供了从设备端编程、小程序开发到通信调试的全流程指南,帮助开发者快速构建低成本、易上手的物联网应用,如智能开关、传感器监控等。

week9的博客 632

05-SpringMVC 视图

1.相关概念   SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户; SpringMVC视图的种类很多,默认有转发视图和重定向视图;当工程引入jstl的依赖,转发视图会自动转换为JstlView;若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView. 2.ThymeleafView   当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会

鸣鼓ming的博客 729

安防相机宽动态(WDR)技术解析:从原理到实战应用

本文深入解析安防相机宽动态(WDR)技术原理,对比多次曝光与DOL-WDR等实现方式,并区分硬件WDR与数字WDR(DWDR)的本质差异。文章重点阐述了WDR在逆光出入口、夜间道路监控等五大典型场景的实战应用与调参技巧,旨在帮助用户根据实际需求正确选择与配置,确保监控系统在复杂光线下清晰成像。

weixin_29191081的博客 427

SpringMVC - 05 - SpringMVC视图

SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图InternalResourceView和重定向视图RedirectView 当工程引入jstl的依赖,转发视图会自动转换为JstlView 若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView

qq_39413850的博客 146

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

数据下载地址:https://www.kaggle.com/datasets/andradaolteanu/gtzan-dataset-music-genre-classification/data背景音乐。专家们长期以来一直在尝试理解声音以及是什么使一首歌曲与另一首不同。如何可视化声音。是什么使一个音调与另一个不同。这个数据集希望能提供实现这些目标的机会。内容原始流派 - 包含10种流派,每种流派有100个音频文件,每个文件长度为30秒(著名的GTZAN数据集,声音的MNIST)

2143

汽车零部件智能装配:C#+YOLOv8实现螺栓漏装检测与齿轮错位识别(附PLC通信与机械臂控制)

YOLOv8:小目标检测的最优解相比YOLOv7,YOLOv8的C2f特征融合网络对小目标(5-10mm螺栓)检测精度提升12%,且推理速度快8%;支持大输入尺寸(不显著增加耗时),可放大螺栓细节;官方提供yolov8n.pt(nano版),在边缘计算盒上能跑40+FPS,满足实时性。C#:工业软件的“兼容性核心”主流PLC(西门子S7-1200/1500)、机械臂(ABB、KUKA)的SDK多基于.NET开发,C#可直接调用,避免跨语言通信延迟;多线程管理成熟(Task。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1146

SpringMVC-05-视图解析器(ViewResolver)

SpringMVC-05-视图解析器(ViewResolver)

时光 970

C# ArcGIS Engine二次开发——实现“加载shp文件”

private void AddShpDataToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog OpFileDialog=new OpenFileDialog();//OpenFileDialog:打开文件对话框 OpFileDialog.Title="添加矢量数据"; OpFileDialog.Filter="(*.shp)|*.shp";//filter:过滤器;"(*.shp)|*.shp"

weixin_42191203的博客 5254

SSM-SpringMVC-05:SpringMVC视图解析器InternalResourceViewResolver配置

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 视图解析器------默认就有配置,但是默认的在实际使用过程中有很多不方便的地方,所以我们配置一道视图解析器 在自己的配置文件xml中,配一个bean节点 <!--视图解析器--> <bean class="org.spring...

Qgee2013的博客 238

SpringBoot 插件化开发详细总结

SpringBoot 插件化开发方案总结

congge 1万+

华为OD机试 - 停车场费用统计 - HashSet(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。停车场统计当日总收费,包月的车不统计,不包月的车半个小时收一块钱,不满半小时不收费,如果超过半小时,零头不满半小时按半小时算,每天11:30-13:30时间段不收费,如果一辆车停车时间超过8小时后不收费。现提供停车场进出车辆的统计信息,需要你来计

学Java,找哪吒 238

【SpringMVC学习05】响应数据和结果视图

  Spring MVC 在数据绑定的过程中,需要对传递数据的格式和类型进行转换,它既可以转换 String 类型的数据,也能够转换 JSON 等其他类型的数据。 这里介绍 String 等数据类型的转换和绑定, Spring MVC 中 JSON 类型的数据交互和 RESTful 支持进行详细讲解。 一、返回值分类 1、返回字符串 (1)Controller方法返回字符串可以指定逻辑视图的名称,...

weixin_43800761的博客 339

UNet 改进(45):轻松集成Triplet Attention,让分割效果起飞!

本文介绍了一种在U-Net架构中集成CSRA残差注意力模块的方法。该模块通过结合通道注意力和空间注意力机制,在U-Net的瓶颈层对特征进行自适应重标定,使网络聚焦于关键区域。文章详细解析了代码实现,包括基础构建块DoubleConv、核心CSRA模块原理及其在U-Net中的战略位置集成。测试表明该模型能保持标准U-Net的输入输出维度,同时通过注意力机制提升特征选择能力。这种模块化设计便于在不同任务中应用,为图像分割领域提供了有效的注意力增强方案。

2401_82355416的博客 103

基于51单片机的智能路灯系统:Proteus仿真与实物设计全解析

单片机作为嵌入式控制的核心,广泛应用于各类自动化场景中。在环境感知与执行控制链路里,传感器采集模拟信号后需经模数转换器(ADC)数字化,再由主控芯片依据阈值逻辑驱动继电器等执行机构,这一组合构成了智能控制系统的典型范式。以城市照明为例,智能路灯系统通过光敏电阻感知环境光照,结合ADC0832完成高精度采样,配合继电器实现自动开关,并可扩展手动强控与状态显示,兼顾能效与可靠性。然而,从Proteus仿真到实体电路焊接,时序差异、续流二极管、按键消抖等工程细节常成为成败的关键。本文基于一个通过实际调试的51单片

weixin_34289454的博客 412

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java 框架 05 — SpringMVC_02(响应数据和结果视图、SpringMVC文件上传_传统_SpringMVC_跨服务器、异常处理、拦截器)

文章目录一、响应数据和结果视图1.1 返回值分类1.1.1 字符串1.1.2 void1.1.3 ModelAndView1.2 转发和重定向1.2.1 forward转发1.2.2 redirect重定向1.3 ResponseBody响应json数据二、SpringMVC实现文件上传2.1 文件上传的回顾2.1.1 文件上传的必要前提2.1.2 借助第三方组件实现文件上传2.2 传统方式上传文...

文泽路小男孩的博客 199

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

微软Lab of Things:专为科研设计的物联网平台实战指南

物联网平台是连接物理世界与数字世界的核心枢纽,其核心原理在于通过统一的设备抽象层与数据管道,整合异构的硬件与通信协议,实现设备的互联互通与数据的高效采集。这一技术价值在于将研究人员从繁琐的底层工程中解放,使其能聚焦于算法验证与数据分析等创新工作。在智能家居、环境监测、健康感知等应用场景中,稳定可靠的数据流与远程管理能力至关重要。微软研究院推出的Lab of Things平台,正是为解决科研场景下的这些痛点而生。它基于分层的云端协同架构,提供了强大的设备驱动模型和以“时间戳-标签-值”为核心的数据流处理系统,

weixin_30924087的博客 335

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

springmvc中ParameterizableViewController的用法

在springmvc.xml中

fangmingzhmg的博客 523

SpringMVC的视图

SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发和重定向视图 当工程引入jstl的依赖,转发视图会自动转换成JstlView 若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器, 由此视图解析器解析之后所得到的是ThymeleafView 1.Thymel...

huing的博客 800

SpringMVC Day 05 : Spring 中的 Model

欢迎来到 SpringMVC 系列教程的第五天!在之前的教程中,我们已经学习了如何使用控制器处理请求和返回视图。今天,我们将深入探讨 Spring 中的 Model。在 Web 应用程序开发中,数据的传递和展示是非常重要的。SpringMVC 提供了一个名为 Model 的机制,用于在控制器和视图之间传递数据。Model 在 SpringMVC 中充当着数据容器的角色,它可以存储和传递各种类型的数据,例如对象、集合、基本类型等。

zhiqiuqiu2的博客 2437

狂神说SpringMVC05:整合SSM框架

狂神说SpringMVC系列连载课程,通俗易懂,基于Spring5版本(视频同步),欢迎各位狂粉转发关注学习。未经作者授权,禁止转载整合SSM框架在上一节中,我们了解了SpringMVC...

狂神说 4万+

【SpringMVC】SpringMVC模型数据+视图解析器

 我们在上一节已经对SpringMVC的基本使用有了一个大致的了解。当但我们提出一个新的需求:如何在request域中存入数据呢❓ 方案一:利用上一节所讲的,使用ServletAPI来存入。 方案二:利用SpringMVC的机制,将其自动放入request域。 使用方案二,我们有三种实现方式。

喃灬疯的博客 620

05_SpringMVC学习笔记

SpringMVC学习笔记,详细讲解了SpringMVC的执行流程与使用

qq_41781632的博客 918

SpringMVC 学习笔记(五)- 视图和视图解析器

1. 工作原理 请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 String,View 或 ModelMap 等类型的处理方法,SpringMVC 也会在内部将他们装配成一个 ModelAndView 对象,它包含了逻辑名和模型对象的视图 Spring MVC 借助 视图解析器(ViewResolver) 得到最终的视图对象(View),最终的视图可以是 J...

0start1的博客 258

java中SpringMVC里Controller结果跳转方式,跳转到哪个视图

1、ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} + viewName +{视图解析器后缀} <!--视图解析器:DispatcherServlet给他的ModelAndView 1.获取了ModelAndView的数据 2.解析ModelAndView的视图名字 3.拼接视图名字,找到对应的视图:/WEB-INF/jsp/hello.jsp

qq_45554909的博客 667

SpringMVC框架学习笔记(四):模型数据 以及 视图和视图解析器

模型数据处理放入request域和session域 以及 视图和视图解析器

2301_76144723的博客 968

SpringMVC执行流程(面试必考)

SpringMVC执行流程框图: SpringMVC流程: 01、用户发送出请求到前端控制器DispatcherServlet。 02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。 03、HandlerMapping找到具体的控制器(可查找xml配置或注解配置),生成处理器对象的执行链(如果有),再一起返回给DispatcherServlet。 0...

NewBeeMu的博客 1万+
上一篇: SpringMVC--04三个域对象
下一篇: SpringMVC--06RESTFul风格API
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值