视图和视图解析器

SpringMVC–视图和视图解析器

基本介绍

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

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

自定义视图

为什么需要自定义视图

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

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

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

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

<!--1. 配置可以解析自定义的视图的解析器2. BeanNameViewResolver 这个就是可以解析自定义视图的解析器3. name="order" :表示给这个解析器设置优先级, 默认优先级很低值Integer.MAX_VALUE4. 一般来说明,我们自己的视图解析优先级高,Order 值越小,优先级越高
-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"><property name="order" value="99"></property>
</bean>

创建springmvc\src\com\web\viewresolver\MyView.java -自定义视图类

/*** 1. MyView继承了AbstractView, 就可以作为一个视图使用* 2. @Component(value = "myView"),该视图会注入到容器中, 名字/id是 myView*/
@Component(value = "myView")
public class MyView extends AbstractView {@Overrideprotected void renderMergedOutputModel(Map<String, Object> model,HttpServletRequest request,HttpServletResponse response) throws Exception {//完成视图渲染//并且可以确定我们要跳转的页面 [请求转发] /WEB-INF/pages/my_view.jspSystem.out.println("进入到自己的视图..");//1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp//2. /WEB-INF/pages/my_view.jsp 会被springmvc解析  /springmvc/WEB-INF/pages/my_view.jsprequest.getRequestDispatcher("/WEB-INF/pages/my_view.jsp")   .forward(request, response);}
}

创建springmvc\src\com\web\viewresolver\GoodsHandler.java

@RequestMapping("/goods")
@Controller
public class GoodsHandler {@RequestMapping(value = "/buy")public String buy() {System.out.println("------buy()-----");return "myView";}
}

创建springmvc\web\view.jsp 和/WEB-INF/pages/my_view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>view</title></head><body><h2>测试自定义视图</h2><a href="goods/buy">测试自定义视图</a><br/></body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Title</title></head><body><h1>从自己的视图过来的</h1><hr/>welcome! </body>
</html>

自定义视图工作流程小结

自定义视图-小结

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

  2. 并把自定义View 加入到IOC 容器中。

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

  4. BeanNameViewResolver 的调用优先级需要设置一下,设置order 比Integer.MAX_VAL小的值,

以确保其在InternalResourceViewResolver 之前被调用。

自定义视图-工作流程

  1. SpringMVC 调用目标方法, 返回自定义View 在IOC 容器中的id。

  2. SpringMVC 调用BeanNameViewResolver 解析视图: 从IOC 容器中获取返回id 值对应的bean, 即自定义的View 的对象。

  3. SpringMVC 调用自定义视图的renderMergedOutputModel 方法渲染视图。

  4. 如果在SpringMVC 调用目标方法, 返回自定义View 在IOC 容器中的id不存在, 则仍然按照默认的视图处理器机制处理。

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

使用实例

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

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

      @PostMapping(value = "/buy")public String buy() {System.out.println("购买商品~");return "success";}
    
  2. 也可以在目标方法直接指定重定向或转发的url 地址

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

应用实例-代码实现

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

// 在目标方法直接指定重定向&请求转发
@RequestMapping(value = "/order")
public String order() {System.out.println("=======order()=====");//这里直接指定转发到哪个页面//return "forward:/WEB-INF/pages/my_view.jsp";//重定向, 如果是重定向,就不能重定向到/WEB-INF 目录中return "redirect:/login.jsp";
}

修改view.jsp,

<h2>测试自定义视图</h2>
<a href="goods/buy">测试自定义视图</a><br/>
<a href="goods/order">测试目标方法直接指定重定向&请求转发</a><br/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/8226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java通过InputStream判断word格式

Java通过InputStream判断word格式 1. 传入inputStream文件流2. 读取文件流前八个字节到字节流数组中3. 转为字符串4. 对比字符串判断文件类型5. 完整代码 Java通过InputStream判断word格式) 1. 传入inputStream文件流 2. 读取文件流前八个字节到字节流数组中 byte[] byteArra…

flink1.16使用消费/生产kafka之DataStream

flink高级版本后&#xff0c;消费kafka数据一种是Datastream 一种之tableApi。 上官网 Kafka | Apache Flink Kafka Source 引入依赖 flink和kafka的连接器&#xff0c;里面内置了kafka-client <dependency><groupId>org.apache.flink</groupId><arti…

C++类与对象 - 2(构造函数和析构函数)(超详细)

构造函数和析构函数 - 超详细讲解 1. 构造函数1.1 概念1.2特性 2. 析构函数2.1 概念2.2特性 1. 构造函数 1.1 概念 对于以下Date类&#xff1a; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout <&l…

C语言float类型学习

C语言的小数类型有两种&#xff0c;float和double&#xff1b; float 称为单精度浮点型&#xff0c;double 称为双精度浮点型&#xff1b; float 占用4个字节&#xff0c;double 占用8个字节&#xff1b; 下面看一下float&#xff1b; #include <stdio.h>int main() {…

电脑记事本在哪里?电脑桌面显示记事本要怎么设置?

绝大多数上班族在使用电脑办公时&#xff0c;都需要随手记录一些琐碎或重要的事情&#xff0c;例如工作注意事项、常用的文案、某项工作的具体要求、多个平台的账号和密码等。于是就有不少小伙伴想要使用电脑记事本软件来记录&#xff0c;那么电脑记事本在哪里呢&#xff1f;想…

JAVA基础-集合的工具类Collections

目录 引言 一&#xff0c;Collections工具类的操作方法方法 1&#xff0c;排序操作 2&#xff0c;替换 和 查找操作 二&#xff0c;Collections工具类的使用 2.1&#xff0c;排序操作 2.1.1&#xff0c;集合的逆序 2.1.2&#xff0c;集合的随机排序 2.1.3&#xff0c;集…

SkyWalking链路追踪中Trace概念以及Trace与span的关系

基本概念 在SkyWalking链路追踪中&#xff0c;Trace&#xff08;追踪&#xff09;是指一个请求或者一个操作从开始到结束的完整路径。它涵盖了分布式系统中所有相关组件的调用关系和性能信息。 具体来说&#xff0c;Trace包含了一系列的span&#xff08;跨度&#xff09;&…

【C#】.Net Framework框架使用JWT

2023年&#xff0c;第31周&#xff0c;第2篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 本篇文章主要简单讲讲&#xff0c;.Net Framework框架下使用JWT的代码例子&#xff0c;以及他们的基本概念。 2002年微软发布了.net framewo…

GFLv2 论文学习

1. 解决了什么问题&#xff1f; 预测定位质量对于目标检测很重要&#xff0c;在 NMS 时它能提供准确的得分排序&#xff0c;提高模型的表现。现有方法都是通过分类或回归的卷积特征来预测定位质量得分。 2. 提出了什么方法&#xff1f; 受到 GFLv1 的 general distribution …

前端开发实习总结参考范文(合集)

▼前端开发实习总结篇一 今天就简单聊聊上面的StrutsSpringHibernate吧。 Struts 代表&#xff1a;表示层;Spring代表&#xff1a;业务逻辑层;Hibernate则代表持久层。他们是目前在Java Web编程开发中用得最多的框架&#xff0c;其实这样区分是为了适应软件开发过程中各个分工…

Shell输出帮助手册

代码&#xff1a; 帮助手册雏形 function help(){echo -e "Help manual":echo -e " -h. -- help View the help manual"echo -e " install Installation"echo -e " uninstall Uninstall" }case "$1&qu…

无涯教程-不是(选择器)

not(selector)方法从匹配的元素集中过滤掉所有与指定选择器匹配的元素。 not( selector ) - 语法 selector.not( selector ) 这是此方法使用的所有参数的描述- selector - 可能是一个逗号分隔的选择器列表&#xff0c;可一次应用多个过滤器(如not(".class1&#…

【stable diffusion】保姆级入门课程05-Stable diffusion(SD)图生图-涂鸦重绘的用法

1.什么是涂鸦重绘 涂鸦重绘又称手涂蒙版。 简单来说&#xff0c;局部重绘手涂蒙版 就是涂鸦局部重绘的结合体&#xff0c;这个功能的出现是为了解决用户不想改变整张图片的情况下&#xff0c;对多个元素进行修改。 功能支持&#xff1a; 1.支持蒙版功能 2.笔刷决定绘制的元素…

基于Java+SpringBoot+Vue前后端分离摄影分享网站平台系统

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Git常用命令解释

目录 执行git status的信息解释Git基本操作Git仓库/分支相关远程跟踪分支的概念 本文记录学习git命令行的过程和命令的解释 执行git status的信息解释 Changes to be committed&#xff1a;只要在 Changes to be committed 这行下面的&#xff0c;就说明是已暂存状态。 如果此…

使用css 动画实现,水波纹的效果

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你向自己求救 需求&#xff0c;实现水波纹动画效果&#xff0c;要求中心一个圆点&#xff0c;然后有3个圈&#xff0c;一圈一圈的向里面缩小。 说实话我第一个想到了给3个圈设置不同的宽高&#xff0c;然后设置动画0-100%&a…

用Python实战,畅享音乐海洋,一键采集你喜爱的音乐!

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: requests >>> pip install requests re 第三方模块安装方法&#xff1a; win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速…

GitHub发布Copilot Chat公测版,助力开发者编写代码

近日微软GitHub推出了Copilot Chat 的公开测试版&#xff0c;而这个版本不仅仅局限于“代码缺省补充”与“代码纠错”&#xff0c;还能直接基于上文&#xff0c;自动联想出后文。 据了解&#xff0c;该AI工具主要用来助力开发者编写代码&#xff0c;可直接集成到开发者的桌面 …

linux五 进程控制

2 进程相关概念 2.1 程序和进程 程序&#xff0c;是指编译好的二进制文件&#xff0c;在磁盘上&#xff0c;占用磁盘空间, 是一个静态的概念. 进程&#xff0c;一个启动的程序&#xff0c; 进程占用的是系统资源&#xff0c;如&#xff1a;物理内存&#xff0c;CPU&#xf…

Python基础知识-2

名片管理系统 def addHandler():print("添加名片")def deleteHandler():IsDelete input("(づ&#xffe3;3&#xffe3;)づ╭❤&#xff5e;亲~您确定要删除名片吗&#xff1f;Yes/No").upper()if (IsDelete YES):print("删除名片")else:prin…