广告
返回顶部
首页 > 资讯 > 精选 >SpringMVC视图和视图解析器实例分析
  • 481
分享到

SpringMVC视图和视图解析器实例分析

2023-07-02 11:07:56 481人浏览 泡泡鱼
摘要

这篇“springMVC视图和视图解析器实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springmvc视图和视图解

这篇“springMVC视图和视图解析器实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springmvc视图和视图解析器实例分析”文章吧。

SpringMVC-视图和视图解析器

1.基本介绍

在 springMVC 中的目标方法最终返回都是一个视图(有各种视图).

返回的视图都会由一个视图解析器来处理 (视图解析器有很多种)

2.自定义视图

1.为什么要自定义视图

在默认情况下,我们都是返回默认的视图, 然后这个返回的视图交由 SpringMVC 的 InternalResourceViewResolver 视图处理器来处理的

<bean id="internalResourceViewResolver" class="org.springframework.WEB.servlet.view.InternalResourceViewResolver">    <property name="prefix" value="/WEB-INF/pages/"/>    <property name="suffix" value=".jsp"/></bean>

在实际开发中,我们有时需要自定义视图,这样可以满足更多更复杂的需求

2.自定义视图实例-代码实现

配置 springDispatcherServlet-servlet.xml , 增加自定义视图解析器

<!--    1. 配置自定义视图解析器BeanNameViewResolver    2. BeanNameViewResolver可以去解析我们自定义的视图    3. 配置 属性 order, 表示视图解析器执行的顺序, 值越小, 优先级越高    4. 属性 order 的默认值是最低优先级 ,值为 Integer.MAX_VALUE       int LOWEST_PRECEDENCE = 2147483647--><bean class="org.springframework.web.servlet.view.BeanNameViewResolver">    <property name="order" value="99"/></bean>

创建自定义视图类

@Component(value = "view")public class MyView extends AbstractView {    @Override    protected void renderMergedOutputModel(Map<String, Object> model,                                           httpservletRequest request,                                           HttpServletResponse response) throws Exception {        //完成视图渲染        //并且可以确定我们要跳转的页面 [请求转发] /WEB-INF/pages/my_view.jsp        System.out.println("进入到自己的视图..");   Object o = model.get("name");        //llp        System.out.println(o);        //1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp        //2. /WEB-INF/pages/my_view.jsp 会被springmvc解析        //   /springmvc/WEB-INF/pages/my_view.jsp        request.getRequestDispatcher("/WEB-INF/pages/my_view.jsp").forward(request, response);    }}

创建GoodsHandler测试

@Controller@RequestMapping("goods")public class GoodsHandler {    @RequestMapping(value = "/buy")    public String byGoods(Map<String,Object> map){        map.put("name","llp");        return "view";    }}

创建my_view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>my_view页面</title></head><h2>进入到my_view页面</h2><p>是从自定义视图来的..</p><body></body></html>

测试效果

SpringMVC视图和视图解析器实例分析

3.自定义视图工作流程小结

自定义视图-小结

自定义视图: 创建一个 View 的 bean, 该 bean 需要继承自 AbstractView, 并实现 renderMergedOutputModel 方法.

并把自定义 View 加入到 ioc 容器

自定义视图的视图处理器,使用 BeanNameViewResolver, 这个视图处理器也需要配置 到 ioc 容器

BeanNameViewResolver 的调用优先级需要设置一下,设置 order 比 Integer.MAX_VAL 小的值. 以确保其在 InternalResourceViewResolver 之前被调用

自定义视图-工作流程

SpringMVC 调用目标方法, 返回自定义 View 在 IOC 容器中的 id 
1. SpringMVC 调用 BeanNameViewResolver 解析视图: 从 IOC 容器中获取 返回 id 值对应的 bean, 即自定义的 View 的对象
1. SpringMVC 调用自定义视图的 renderMergedOutputModel 方法渲染视图 
1.  说明: 如果在 SpringMVC 调用目标方法, 返回自定义 View 在 IOC 容器中的 id, 不存在, 则仍然按照默认的视图处理器机制处理
1. 如果将默认视图解析器设置的优先级比自定义视图高,默认视图解析器不管页面是否存在都会直接返回,不会在走自定义视图解析器。

自定义 View在IOC容器中的 id存在时,自定义视图解析器执行流程:

SpringMVC视图和视图解析器实例分析

SpringMVC视图和视图解析器实例分析

自定义 View在IOC容器中的 id不存在时,自定义视图解析器执行流程

通用会先执行BeanNameViewResolver,可以看到此时,容器中不包含id=”view”的bean

SpringMVC视图和视图解析器实例分析

回到DispatcherServlet我们可以看到 List viewResolvers列表包含两个视图解析器,一个时自定义的视图还有一个是默认的视图解析器。如果返回的自定义视图为空,会继续遍历最终初始化默认视图解析器从而按照默认视图解析器的处理机制继续执行,不管/WEB-INF/pages/view.jsp 是否存在程序都会返回

SpringMVC视图和视图解析器实例分析

SpringMVC视图和视图解析器实例分析

4.目标方法直接指定转发或重定向

1.使用实例

目标方法中指定转发或者重定向

默认返回的方式是请求转发,然后用视图处理器进行处理,比如在目标方法中这样写:

@Controllerpublic class LoginServlet {    @RequestMapping(value = "/login")    public String login(){        System.out.println("login....");        return "login_ok";    }}

也可以在目标方法直接指定重定向或转发的 url 地址

如果指定重定向,不能定向到 /WEB-INF 目录中

应用实例-代码实现

修改 GoodsHandler.java, 增加方法 order()

@RequestMapping(value = "/order")public String order() {    System.out.println("=======order()=====");    //请求转发到 /WEB-INF/pages/my_view.jsp    //下面的 /WEB-INF/pages/my_view.jsp 被解析成 /springmvc/WEB-INF/pages/my_view.jsp    //return "forward:/WEB-INF/pages/my_view.jsp";    //return "forward:/aaa/bbb/ok.jsp";    //直接指定要重定向的页面    //1. 对于重定向来说,不能重定向到 /WEB-INF/ 目录下    //2. redirect 关键字,表示进行重定向    //3. /login.jsp 在服务器解析 /springmvc/login.jsp    return "redirect:/login.jsp";    // /WEB-INF/pages/my_view.jsp 被解析 /springmvc/WEB-INF/pages/my_view.jsp    //return "redirect:/WEB-INF/pages/my_view.jsp";}

修改view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>自定义视图测试</title></head><body><h2>自定义视图测试</h2><a href="goods/buy" rel="external nofollow" >点击到自定义视图-</a><br/><a href="goods/order" rel="external nofollow" >测试在目标方法中指定请求转发或者重定向的页面-</a><br/></body></html>
2.指定请求转发流程-Debug源码

SpirngMVC默认情况下

@RequestMapping(value = "/order")public String order() {    System.out.println("=======order()=====");      return  "my_view.jsp";}

可以看到默认转发是走的InternalResourceView默认视图解析器,beanName=my_view.jsp 对应的实例则是InternalResourceView

SpringMVC视图和视图解析器实例分析

最终执行到InternalResourceView的renderMergedOutputModel方法中dispatcherPath=/WEB-INF/pages/my_view.jsp.jsp进行请求转发

SpringMVC视图和视图解析器实例分析

指定forward关键字

@RequestMapping(value = "/order")public String order() {    System.out.println("=======order()=====");    return "forward:/WEB-INF/pages/my_view.jsp";}

在DispatcherServlet中我们可以看到,当我们指定了forward关键字时,viewResolver还是默认的InternalResourceView,和不指定forward关键字不同的地方子在于,指定了关键字后beanName变成了forward: 而url则是我们后面指定的路径,因此我们在使用forward关键字进行请求转发时,SpringMVC底层会根据程序员在后面指定的路径进行请求转发,如果设置的路径不存在则会抛出404NOTFOUND异常

SpringMVC视图和视图解析器实例分析

SpringMVC视图和视图解析器实例分析

3.指定重定向流程-Debug源码
@RequestMapping(value = "/order")public String order() {    System.out.println("=======order()=====");    return "redirect:/login.jsp";}

在前面我们配置了自定义视图和默认视图解析器,可以看到这里走的是默认的视图解析器。redirect: 被作为beanName, RedirectView则是对应的bean实例

SpringMVC视图和视图解析器实例分析

从里可以看出在SpringMvc中,重定向"redirect:/login.jsp" ,斜杠被浏览器解析成ip:port,而在服务端springmvc底层RedirectView会解析成“/springmvc/login.jsp”

SpringMVC视图和视图解析器实例分析

RedirectView

@Overrideprotected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,      HttpServletResponse response) throws IOException {   String targetUrl = createTargetUrl(model, request);   targetUrl = updateTargetUrl(targetUrl, model, request, response);   // Save flash attributes   RequestContextUtils.saveOutputFlashMap(targetUrl, request, response);   // Redirect 重定向   sendRedirect(request, response, targetUrl, this.http10Compatible);}

以上就是关于“SpringMVC视图和视图解析器实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: SpringMVC视图和视图解析器实例分析

本文链接: https://www.lsjlt.com/news/341585.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringMVC视图和视图解析器实例分析
    这篇“SpringMVC视图和视图解析器实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringMVC视图和视图解...
    99+
    2023-07-02
  • SpringMVC超详细讲解视图和视图解析器
    目录SpringMVC-视图和视图解析器1.基本介绍2.自定义视图1.为什么要自定义视图2.自定义视图实例-代码实现3.自定义视图工作流程小结自定义视图-小结自定义视图-工作流程4....
    99+
    2022-11-13
  • SpringMVC源码分析6:SpringMVC的视图解析原理
    转自 SpringMVC视图机制详解[附带源码分析]...
    99+
    2023-06-02
  • 浅谈SpringMVC之视图解析器(ViewResolver)
    SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图。当用户对SpringMVC应用程序发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,通过处理器找到最为合适的Handl...
    99+
    2023-05-31
    spring mvc 视图解析器
  • springMVC中的view视图详细解析
    目录1、ThymleafView2、转发视图3、重定向视图4、视图控制器view-controllerSpring MVC中的视图是view接口,视图的作用是渲染数据,将模型mode...
    99+
    2022-11-13
  • SpringMVC ViewResolver视图解析器组件怎么用
    本篇内容主要讲解“SpringMVC ViewResolver视图解析器组件怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC ViewResolver视...
    99+
    2023-07-05
  • SpringMVC响应视图和结果视图详解
    目录1、返回字符串,Model传输数据2、void(不经常使用)3、返回ModelAndView完成跳转页面和传输数据4、forward转发5、redirect重定向1、返回字符串,...
    99+
    2022-11-12
  • python数据分析绘图可视化实例分析
    本篇内容介绍了“python数据分析绘图可视化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:数据分析初始阶段,通常都要进行可视...
    99+
    2023-07-02
  • 使用springmvc配置视图解析器和重定向方式
    目录springmvc配置视图解析器和重定向为什么需要配置视图解析器配置步骤解决配置视图解析器带来的问题重定向配置多个视图解析器springmvccontrollerspringmv...
    99+
    2022-11-12
  • SpringBoot视图解析实现原理深入分析
    目录一、写在前面二、写个demo三、流程解析一、写在前面 前面我们分析了Spring boot是如何解析请求参数和如何处理相应信息的 那么它是如何进行视图解析,找到我们要跳转的视图并...
    99+
    2022-11-13
  • PostgreSQL物化视图的示例分析
    这篇文章主要介绍PostgreSQL物化视图的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、创建视图CREATE MATERIALIZED VIEW&...
    99+
    2022-10-18
  • MySQL视图原理的示例分析
    这篇文章主要介绍MySQL视图原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:概述视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列...
    99+
    2022-10-18
  • mysql视图功能与用法实例分析
    本文实例讲述了mysql视图功能与用法。分享给大家供大家参考,具体如下: 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。 //单表视图 CREATE [ALGORITHM]={U...
    99+
    2022-10-18
  • PyQt5中图形视图框架的示例分析
    这篇文章将为大家详细讲解有关PyQt5中图形视图框架的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.QGraphicsItem图元类图元可以是文本、图片,规则几何图形或者任意自定义图形。该类已...
    99+
    2023-06-29
  • SpringMVCViewResolver视图解析器组件
    目录作用类型InternalResourceViewResolverFreeMarkerViewResolverTilesViewResolverContentNegotiating...
    99+
    2023-05-15
    SpringMVC ViewResolver SpringMVC视图解析器
  • Ember.js的视图层分析
    这篇文章主要讲解了“Ember.js的视图层分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ember.js的视图层分析”吧!Ember.js 有一套复杂...
    99+
    2022-10-19
  • Python数据分析之绘图和可视化的示例分析
    小编给大家分享一下Python数据分析之绘图和可视化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言matplotlib是一个用于创建出版质量图表...
    99+
    2023-06-15
  • mysql中视图原理的示例分析
    小编给大家分享一下mysql中视图原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视...
    99+
    2022-10-18
  • vue中命名视图的示例分析
    这篇文章给大家分享的是有关vue中命名视图的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在views 创建 UserProfile.vue UserProfilePre...
    99+
    2022-10-19
  • MINA框架的视图层和逻辑层实例分析
    本篇内容主要讲解“MINA框架的视图层和逻辑层实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MINA框架的视图层和逻辑层实例分析”吧!1. 开篇导言    目标用户:...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作