springmvc视图解析器_SpringMVC视图及REST风格

17fc57cceda281ac2651e9a0b199651a.png

什么是视图解析器?

springMVC用于处理视图最重要的两个接口是ViewResolver和View。

ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图,而SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的View对象。

View接口的主要作用是用来处理视图,返给给客户端。

3a4eb618612a7ce422a2f560f383328b.png

视图解析器的执行流程:

请求方法执行完成后,最终返回一个ModelAndView对象,对于那些返回String,View,ModelMap等类型SpingMVC最终会在内部给他们装配成一个ModelAndView对象,它包含了逻辑名和模型对象的视图。StringMVC借助视图解析器得到最终的视图对象,最终的视图可以是JSP,也可能是其他的文件形式的视图。对于最终采取那一种方式渲染处理器并不关心,处理器重点焦距在生产模型数据的工作上,从来实现了MVC充分的解耦。

视图:

视图的作用是渲染模型数据,将模型里面的数据以某种形式呈现给用户。为了实现视图模型和具体实现技术的解耦,Sping定义了一个View接口。视图对象由视图解析器负责实例化,由于视图是无状态的,所以它们不会有线程安全问题。

常用的视图实现类:

InternalResourceView:将JSP资源封装成一个视图,是springmvc默认使用的视图解析器。

JstlView:在JSP项目中引入jstl包springmvc会自动使用该解析器

MapingJackJsonView:将模型通过Jackson开源框架的ObjectMapper以Json方式输出。

AbstractExcelView:Excel文档视图的抽象类,该视图基于POI构造Excel文档

AbstractPdfVIew:PDF文档视图的抽象类,该视图基于iText构建Pdf文档

BeanNameViewResolver:将逻辑视图名解析为一个Bean,Bean的id等于逻辑视图名。

视图解析器的作用比较单一,将逻辑视图解析为一个具体的视图对象,所有的视图解析器必须实现ViewResolver接口。

JSP是最常用的视图技术,可以使用InternalResourceView作为视图解析器

bae9295e2d5a0ba88baaccac0554b6ce.png

项目中只要引入了JSTL标签则springmvc会自动把视图有InternalResourceView转换成JstlView,JstlView是它的子类。

每一个视图解析器都实现了Ordered接口并开发出一个order属性,可以通过它设置解析器的优先级,order越小优先级越高。Spring MVC会按视图解析器顺序的优先级对逻辑视图名进行解析,直到解析成功并返回视图对象,否则会抛出ServletException异常

自定义视图:

@Componentpublic class MyView implements View { @Override public String getContentType() { return "text/html"; } @Override public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().println("

Spring MVC Custom view

"); }}

我们需要将这个自定义的视图实现View接口然后重写接口中的两个方法。然后我们把这个类声明成Bean交给spring管理。在这里我们配置一个beanName解析器。

 

然后写一个请求,这个请求返回Bean的名字,默认是首字母小写以驼峰式展现。

@RequestMapping("myView") public String myView(){ System.out.println("myView load ..."); return "myView"; }

这样就可以完成我们的自定以视图。

关与重定向:

如果返回字符串中带有”redirect:“或"forward:",SpringMvc会将其做特殊的处理。

如果我们需要直接访问视图可以这样配置

REST章节

REST(Representational State Transfer):即(资源)表现层状态传递。

资源(Resources):网络上的一个实体,或者说网络上的一段信息。它可以是一段文本,一段歌曲,一张图片等等,可以用一个URL指向它,每个资源都有一个特定的,独一无二的URL,要访问这个资源,直接访问这个URI即可。

表现层(Representation):将资源呈现出来的形式。

状态转化(State Transfer):每发出一个请求,就代表客户端和服务器一次交互。HTTP协议是一个无状态的协议,即所有的状态都保存在服务器端。客户端想要操作服务器,必须通过某些手段,让服务器发生状态转化,而这种转化是建立在表现层之上的,所以就是表现层状态转化。

在我们的SpringMVC之中支持HTTP四种请求状态,REST规定的HTTP协议中四种表示操作方式的动词

GET请求:获取资源

POST请求:新建资源

PUT:更新资源

DELETE:删除资源

我们需要在WEB.xml中配置实现PUT,DELETE请求方式,大家都知道在我们传统的HTML中只有GET,POST两种请求方式。

HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter HiddenHttpMethodFilter/*

GET请求

GET请求:test RestGet请求
@RequestMapping(value="/testRest/{id}

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

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

相关文章

mysql5.7.x 1251_MySql-8.0.x免安装版下载与配置,Navicat打开数据库链接报错1251的解决办法...

概述MySQL从5.7一下子跳到了MySQL8.0, 其中的变化必然是很大的, 这里就不说了, 本文主要讲解最新版MySQL安装的事情.实际上5.7版本后的mysql免安装版都是没有data文件和my.ini文件的,下面再具体说明怎么生成,注意不能自己手动新建.下载下载程序必然去官网…

To install 64-bit ODBC drivers

为了更充分的利用硬件资源,我想很多人都开使用64位操作系统了,同时你可以也发现了在64位操作系统上ODBC的驱动找不到了,所以ODBC的东西都没法用了。 因为2007以前版本的Office只有32位版本,所以我们不能在64位系统上使用ODBC。使用…

【Qt开发】QTableWidget设置根据内容调整列宽和行高

QTableWidget要调整表格行宽主要涉及以下一个函数 1.resizeColumnsToContents(); 根据内容调整列宽 2.resizeColumnToContents(int col); 根据内容自动调整给定列宽 3.horizontalHeader()->setResizeMode 把给定列…

深入浅出mysql数据开发_深入浅出MySQL数据库开发、优化与管理维护 PDF扫描版[513KB]...

深入浅出MySQL数据库开发、优化与管理维护 内容介绍:本书从数据库的基础、开发、优化、管理维护4个方面对MySQL进行了详细的介绍,其中每一部分都独立成篇。本书内容实用,覆盖广泛,讲解由浅入深,适合于各个层次的读者。…

Understand Lambda Expressions in 3 minutes(翻译)

本文翻译自CodeProject上的一篇简单解释Lambda表达式的文章,适合新手理解。译文后面我补充了一点对Lambda表达式的说明。 1.什么是Lambda表达式? Lambda表达式是一种匿名方法,多数情况下用来在LINQ中快速创建委托。简单地说,它代表…

Hibernate二级缓存配置

一、定义: 二级缓存是进程或集群范围内的缓存,可以被所有的Session共享,是可配置的插件 二、二级缓存原理图 解析:每次从二级缓存中取出的对象,都是一个新的对象。 三、配置步骤如下: 同理:以员…

redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用

Redis哨兵(Sentinel)其实本质就是一个RedisServer节点,通过设置 运行模式 来开启哨兵的功能;主要功能如下:监控(Monitoring ):哨兵节点会不断地检查的主服务和从服务的运行状态;自动故障迁移(Automatic failover) &…

闰秒导致MySQL服务器的CPU sys过高

今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图。 注意:他的生产环境是物理机,单个CPU,4个Core。 于是&…

新安装数据库sqlserver2008r2,使用javaweb连接不上问题处理

鼠标右键【计算机】--》【管理】,打开界面如下: 选择自己数据库的实例名: 选择TCP/IP:右键【属性】,将所有TCP动态端口的【0】删掉,TCP端口设为1433;重启服务,即可连接。PS:不知道这…

vue 鼠标点击事件_VBA代码解决方案第115讲:点击鼠标实现精准控制触发事件的VBA代码第二方案...

大家好,我们今日继续讲解VBA代码解决方案的第115讲内容:工作表事件中,根据Target参数不同,实现精准控制触发事件的VBA代码第二方案。在上一讲中我们讲了利用Address的属性实现控制触发事件的方案,今日讲解第二方案&…

(翻译)31天Windows Phone学习-1-项目模板

今天在在外文网站Google关于Windows Phone 7的学习资料,无疑间Google到了Jeff Blankenburg的 31 Days of Windows Phone这个系列,感觉写的比较基础和浅显易懂,适合我这种入们级的人学习,所以准备拿来对Windows Phone 7的简单入门学…

MOSS点滴(2):自定义Application Page

在MOSS中后台管理的页面都是Application Page,比如网站设置的页面(settings.aspx)就是典型的Application Page,它不能被Sharepoint Desiger定制。如果我们要修改只能手动的使用其他工具来修改,我们也可以添加Application Page,必须…

wpf使用webbrowser时提示当前页面脚本发生错误_win7系统internet脚本错误的应对办法...

最近有win7系统用户反馈,上网时遇到ie浏览器总会提示internet脚本错误的问题,不知如何解决,为此非常苦恼,那么win7系统提示internet脚本错误怎么办呢?就此问题,下面小编教你win7系统internet脚本错误的应对办法。有不…

JDK的目录结构及结构图

-bin目录: JDK开发工具的可执行文件 -lib目录: 开发工具使用的归档包文件 -jre: Java 运行时环境的根目录,包含Java虚拟机,运行时的类包和Java应用启动器, 但不包含开发环境中的开发工具 -demo: 含有源代码的程序示例 -include: 包含…

Cacti 使用安装详解-企业级实例

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还…

linux教程:配置Tomcat开机启动

我们在linux下安装好tomcat之后;经常是需要配置到开机启动的; 这样的话就不需要我们每次重启linux服务器之后自己在登陆运行startup.sh文件启动tomcat了 本次的演示环境是在centos7中完成的;也在centos6.5中测试过;理论上所有版本…

操作系统内存分配算法_操作系统基础45-伙伴系统和slab内存分配

当在用户模式下运行进程请求额外内存时,从内核维护的空闲页帧列表上分配页面。这个列表通常使用页面置换算法来填充,如前所述,它很可能包含散布在物理内存中的空闲页面。也要记住,如果用户进程请求单个字节内存,那么就…

Sublime Text 3新建工程

1. 创建工程 Project > Add Folder to Project 这时在sidebar中将出现刚刚添加的文件目录,如果还需要添加其他目录,则重复这一操作即可。 2. 保存工程 Project > Save Project As 点击保存后Sublime Text将自动生成两个文件: 如图&…

445端口 mysql_关于如何关闭window端口445的详细介绍

首先,来查看下系统当前都开放了什么端口,怎样查看呢?调出cmd命令行程序,输入命令”netstat -na“,可以看到。接着,可以发现当前系统开放了135、445以及5357端口,而且从状态看都处于监听状态”Li…

输入圆的半径,计算并输出圆的周长和面积

转载于:https://www.cnblogs.com/nicebaby/p/5866320.html