java 视图解析器_SpringMVC——视图和视图解析器

请求处理方法执行完成后,最终返回一个 ModelAndView对象。对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象,它包含了逻辑名和模型对象的视图

Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是Excel、JFreeChart 等各种表现形式的视图

对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工作上,从而实现 MVC 的充分解耦

一、视图

视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客 户。

为了实现视图模型和具体实现技术的解耦,Spring 在 org.springframework.web.servlet 包中定义了一个高度抽象的View 接口:

视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们 不会有线程安全的问题

常用的视图实现类

视图实现类说明

InternalResourceView

将jsp或其他资源封装成一个视图,这是InternalResourceViewResolver解析成的视图

JstlView

如果jsp文件中需要用到JSTL国际化标签功能,则需要使用该视图类,而非InternalResourceView视图类

XsltView

XSTL驱动的视图

TilesView

基于Tiles页面布局的视图

TilesJstlView

如果Tiles模版的jsp组成文件使用到了JSTL了,则需要用该视图替换TilesView

AbstractExcelView

Excel视图抽象类,开发者需要继承AbstractExcelView,获取视图模型进行填充,实现自己的文档视图,需要依赖POI

AbstractJExcelView

和AbstractExcelView只不过他是依赖JExcelAPI

AbstractPdfStamperView

PDF文档视图抽象类,通过AcroForm对PDF文档进行操作

AbstractPdfView

PDF文档视图抽象类,可以通过该抽象类实现自己的PDF文档视图,依赖iText

FreeMarkView

使用FreeMark模版引擎的视图

VelocityLayoutView

使用Velocity模版引擎的视图

VelocityView

使用Velocity模版引擎的视图

ConfigurableJasperReportsView

使用java JasperReports报表技术的视图

JasperReportsCsvView

使用java JasperReports报表技术的视图

JasperReportsHtmlView

使用java JasperReports报表技术的视图

JasperReportsMultiFormatView

使用java JasperReports报表技术的视图

JasperReportsPdgView

使用java JasperReports报表技术的视图

JasperReportsXlsView

使用java JasperReports报表技术的视图

MarshallingView

通过oxm和Marshaller技术将模型数据以xml方式输出

MappingJackson2JsonView

将模型数据通过Jackson开发框架的ObjectMapper已JSON方式输出

MappingJackson2XmlView

将模型数据通过Jackson开发框架的ObjectMapper已XML方式输出

redirectView

通过redirect:和forword:前缀进行重定向的视图

二、视图解析器

SpringMVC 为逻辑视图名的解析提供了不同的策略,可 以在 Spring WEB 上下文中配置一种或多种解析策略,并 指定他们之间的先后顺序。每一种映射策略对应一个具体 的视图解析器实现类。

视图解析器的作用比较单一:将逻辑视图解析为一个具体 的视图对象。

所有的视图解析器都必须实现 ViewResolver 接口

常用的视图解析器

视图解析器实现类说明

beanNameViewResolver

常用,将视图名解析为一个bean,视图名是bean的id

XmlViewResolver

和beanNameViewResolver类似,它和beanNameViewResolver的区别是bean的定义是放在xml文件中,而不是DispatchServert的配置文件中

ResourceBundleViewResolver

可以利用该类为不同本地化类型提供不同的解析结果

InternalResourceViewResolver

常用,一般通过该类配置前缀和后缀,然后解析为一个URL文件,例如jsp页面,解析优先级最低

XsltViewResolver

将视图名解析为一个指定的XSLT样式表的URL文件

JasperReportsViewResolver

JasperReports是一个基于java的开源报表工具,该解析器将视图名解析为报表文件对应的路径

FreeMarkerViewResolver

解析基于FreeMarker模版技术的模版文件

VelocityViewResovler,                                      VelocityLayoutViewResovler

解析为基于Velocity模版技术的模版文件

ContentNegotiatingViewResovler

常用,内容协商视图解析器,它不负责具体的视图解析,而且根据请求的媒体类型,从注册的视图解析器中选择一个合适的解析器来将视图解析,解析优先级最高

程序员可以选择一种视图解析器或混用多种视图解析器

每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高。

SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解 析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常

InternalResourceViewResolver

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

Excel 视图

若希望使用 Excel 展示数据列表,仅需要扩展 SpringMVC 提供的 AbstractExcelView 或 AbstractJExcel View 即可。实现 buildExcelDocument() 方法,在方法中使用模型数据对象构建 Excel 文档就可以 了。

AbstractExcelView 基于 POI API,而 AbstractJExcelView 是基于 JExcelAPI 的。

视图对象需要配置 IOC 容器中的一个 Bean,使用 BeanNameViewResolver 作为视图解析器即可

若希望直接在浏览器中直接下载 Excel 文档,则可以设置 响应头 Content-Disposition 的值为 attachment;filename=xxx.xls

三、重定向和转发

①、一般情况下,控制器方法返回字符串类型的值会被当成逻 辑视图名处理

②、如果返回的字符串中带 forward: 或 redirect: 前缀 时,SpringMVC 会对他们进行特殊处理:

将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理

redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作

forward:success.jsp:会完成一个到 success.jsp 的转发操作

org.springframework.web.servlet.view.UrlBasedViewResolver.class

protected View createView(String viewName, Locale locale) throwsException {if(!this.canHandle(viewName, locale)) {return null;

}else{

String forwardUrl;if(viewName.startsWith("redirect:")) {

forwardUrl= viewName.substring("redirect:".length());

RedirectView view= new RedirectView(forwardUrl,

this.isRedirectContextRelative(),

this.isRedirectHttp10Compatible());return this.applyLifecycleMethods(viewName, view);

}else if(viewName.startsWith("forward:")) {

forwardUrl= viewName.substring("forward:".length());return newInternalResourceView(forwardUrl);

}else{return super.createView(viewName, locale);

}

}

}

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

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

相关文章

Android app 应用签名

为什么要签名? 这个要从Android的系统设计来解释。 ---Android系统中的每个应用都是一个用户,应用的包名(清单文件中 package的值)就是用户名。 当一个已安装的应用A和一个正要安装的应用B,它们的包名相同&#xff…

[.Net线程处理系列]专题五:线程同步——事件构造

引言: 其实这部分内容应该是属于专题四,因为这篇也是讲关于线程同步的,但是由于考虑到用户的阅读习惯问题,因为文章太长了,很多人不是很愿意看包括我也是这样的,同时也有和我说可以把代码弄成折叠的&#x…

java redis set list_RedisTemplate的各种操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...

注入以下RedisTemplateAutowiredprivate RedisTemplate redisTemplate;1、保存和读取Set:代码示例:SetOperations set redisTemplate.opsForSet(); set.add("set1","22"); set.add("set1","33"); set.add(&quo…

闪屏页面(Splash)开发

业余作品--365安全卫士 ------------------------------------------- 闪屏页面(Splash):app刚启动时的页面 作用: 1、展示公司品牌logo 2、应用初始化。如游戏app第一次启动初始化数据 3、检测新版本。 4、检测程序合法性。如 招商银行app在启动…

matlab2016b ubuntu命令行安装 + matconvnet的安装

0. 下载安装包 下载的文件有Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd2.iso,R2016b_glnxa64_dvd1.iso。 1. 拷贝安装文件并上传服务器 在Windows下用虚拟光驱打开,并将R2016b_glnxa64_dvd1.iso和R2016b_glnxa64_dvd2.iso所有内容复…

科普dip,dp,sp,dpi,ppi,px,Density

一、概念 DPI:DPI是Dots Per Inch的缩写,也就是“每英寸点数”,打印机分辨率。这里所说的“点”,在屏幕上并不是不变的,并不是唯一对应屏幕上的像素点,而是受到分辨率等因素的影响。这个点有可能是1个像素…

do与mysql数据类型对照_dophon-db: dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysql多数据源配置...

dophon-db项目介绍dophon框架的数据库模块,也可单独作为一个与数据库模块交互的部件支持mysql数据库连接支持orm形式的数据操作如有疑问请发送邮件联系作者:ealohu163.com软件架构模块架构分为以组件:mysql连接组件(包括连接池,连接封装类,分页,结果输出过滤器,远程接收器,增量…

clamp 函数

返回范围内的一个数值。可以使用 clamp 函数将不断增加、减小或随机变化的数值限制在一系列的值中。 float clamp(float minnumber, float maxnumber, float parameter) 最小数值和最大数值指定返回值的范围。 参数是值要钳制在范围内的属性或变量。 如果参数位于最小数值和最大…

jquery $.each遍历json数组方法

转载地址&#xff1a;http://blog.sina.com.cn/s/blog_636f2d150101ezs1.html <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.o…

java 责任链模式 链表_责任链模式的实现及源码中应用

01—责任链模式的实现假设一个出差任务的流程需要审批出差行程和出差报销金额。那么&#xff0c;对应两个部门的审核。我们先定义一个出差任务Task类&#xff1a;然后&#xff0c;我们定义一个抽象的处理类Handler&#xff0c;其中具体的处理方法Handle交给子类去实现。然后&am…

JQuery $.each遍历JSON字符串报Uncaught TypeError:Cannot use 'in' operator to search for

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象。 [js] view plaincopy var json [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":&quo…

php setcookie 过期,php cookie怎么设置过期时间?

PHP中可以使用setcookie()函数设置cookie的过期时间。语法为“setcookie(name,value,expire,path,domain,secure)”&#xff1b;其中expire参数用于指定cookie的有效期&#xff0c;即过期时间戳。setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器…

nginx自定义500、404错误页面

1&#xff0c;首先在http添加以下内容 http{ fastcgi_intercept_errors on; } 2&#xff0c;server中添加以下内容&#xff1a; 注意路径 error_page 500 502 503 504 /500.html; location /500.html { internal; } error_page 404 /404.html; location /404.html { intern…

php如何输出复选框的值,php 怎么输出复选框呢?

表单有6个复选框&#xff0c;如果选中的分别是第126个&#xff0c;数据库存为 1&#xff0c;2&#xff0c;6现在的问题是 在修改的页面 怎么用php从数据库取值&#xff0c;输出6个复选框&#xff0c;让126为checked &#xff1f;回复讨论(解决方案)$row[id]1;>我的意思是 从…

jQuery Mobile动态刷新页面样式

见 百度经验 http://jingyan.baidu.com/article/7f766dafbc18f24101e1d014.html JQM里面当我们更新了某些页面标签(如: listview, radiobuttons, checkboxes, select menus)里的数据时,必须做refresh操作. 为什么必须做refresh操作操作呢?因为JQM在做页面渲染的时候,为了使样…

R-CNN论文翻译

R-CNN论文翻译Rich feature hierarchies for accurate object detection and semantic segmentation用于精确物体定位和语义分割的丰富特征层次结构2017-11-29摘要过去几年&#xff0c;在权威数据集PASCAL上&#xff0c;物体检测的效果已经达到一个稳定水平。效果最好的方法是融…

inflate简介,LayoutInflater和inflate()方法的用法

一、inflate简介 inflate这个方法总共有四种形式&#xff08;见下面&#xff09;&#xff0c;目的都是把xml表述的layout转化为View对象。 其中有一个比较常用&#xff0c;View inflate(int resource, ViewGroup root)&#xff0c;另三个&#xff0c;其实目的和这个差不多。 …

php ci框架 实例化类,php框架CI(codeigniter)自动加载与自主创建对象操作实例分析...

本文实例讲述了php框架CI(codeigniter)自动加载与自主创建对象操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;CI的autoload很好用&#xff0c;自动创建对象&#xff0c;但是注意&#xff0c;他的对象只有一个。我们很多情况下需要生成对象&#xff0c;这就很麻烦…

sass、gulp应用

Sass介绍n CSS 不是一个编程语言&#xff0c;可以用它来开发网页样式&#xff0c;但是没有办法用它进行编程。SASS 的出现&#xff0c;让 CSS 实现了通过代码编程来实现的方式。n SASS 是一种 CSS 开发工具&#xff0c;提供了许多便利的写法&#xff0c;让CSS 的处理实现了可编…

自定义控件SettingItemView

一、效果图 选中&#xff1a;显示自动更新开启不选择&#xff1a;显示自动更新关闭------------在布局文件中的使用方式和android自生的控件一样 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andro…