本文内容纲要:
-一、视图
-常用的视图实现类
-二、视图解析器
-常用的视图解析器
-InternalResourceViewResolver
-Excel视图
-三、重定向和转发
请求处理方法执行完成后,最终返回一个ModelAndView对象。对于那些返回String,View或ModeMap等类型的处理方法,SpringMVC也会在内部将它们装配成一个ModelAndView对象,它包含了逻辑名和模型对象的视图
SpringMVC借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP,也可能是Excel、JFreeChart等各种表现形式的视图
对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工作上,从而实现MVC的充分解耦
一、视图
视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。
为了实现视图模型和具体实现技术的解耦,Spring在org.springframework.web.servlet包中定义了一个高度抽象的View接口:
视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全的问题
常用的视图实现类
InternalResourceView
JstlView
XsltView
TilesView
TilesJstlView
AbstractExcelView
AbstractJExcelView
AbstractPdfStamperView
AbstractPdfView
FreeMarkView
VelocityLayoutView
VelocityView
ConfigurableJasperReportsView
JasperReportsCsvView
JasperReportsHtmlView
JasperReportsMultiFormatView
JasperReportsPdgView
JasperReportsXlsView
MarshallingView
MappingJackson2JsonView
MappingJackson2XmlView
redirectView
视图实现类
说明
将jsp或其他资源封装成一个视图,这是InternalResourceViewResolver解析成的视图
如果jsp文件中需要用到JSTL国际化标签功能,则需要使用该视图类,而非InternalResourceView视图类
XSTL驱动的视图
基于Tiles页面布局的视图
如果Tiles模版的jsp组成文件使用到了JSTL了,则需要用该视图替换TilesView
Excel视图抽象类,开发者需要继承AbstractExcelView,获取视图模型进行填充,实现自己的文档视图,需要依赖POI
和AbstractExcelView只不过他是依赖JExcelAPI
PDF文档视图抽象类,通过AcroForm对PDF文档进行操作
PDF文档视图抽象类,可以通过该抽象类实现自己的PDF文档视图,依赖iText
使用FreeMark模版引擎的视图
使用Velocity模版引擎的视图
使用Velocity模版引擎的视图
使用javaJasperReports报表技术的视图
使用javaJasperReports报表技术的视图
使用javaJasperReports报表技术的视图
使用javaJasperReports报表技术的视图
使用javaJasperReports报表技术的视图
使用javaJasperReports报表技术的视图
通过oxm和Marshaller技术将模型数据以xml方式输出
将模型数据通过Jackson开发框架的ObjectMapper已JSON方式输出
将模型数据通过Jackson开发框架的ObjectMapper已XML方式输出
通过redirect:和forword:前缀进行重定向的视图
二、视图解析器
SpringMVC为逻辑视图名的解析提供了不同的策略,可以在SpringWEB上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。
视图解析器的作用比较单一:将逻辑视图解析为一个具体的视图对象。
所有的视图解析器都必须实现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作为视图解析器:
<!--配置视图解析器:如何把handler方法返回值解析为实际的物理视图-->
<!--该视图的优先级为Integer的最大值-->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/pages/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
Excel视图
若希望使用Excel展示数据列表,仅需要扩展SpringMVC提供的AbstractExcelView或AbstractJExcelView即可。实现buildExcelDocument()方法,在方法中使用模型数据对象构建Excel文档就可以了。
AbstractExcelView基于POIAPI,而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
protectedViewcreateView(StringviewName,Localelocale)throwsException{
if(!this.canHandle(viewName,locale)){
returnnull;
}else{
StringforwardUrl;
if(viewName.startsWith("redirect:")){
forwardUrl=viewName.substring("redirect:".length());
RedirectViewview=newRedirectView(forwardUrl,
this.isRedirectContextRelative(),
this.isRedirectHttp10Compatible());
returnthis.applyLifecycleMethods(viewName,view);
}elseif(viewName.startsWith("forward:")){
forwardUrl=viewName.substring("forward:".length());
returnnewInternalResourceView(forwardUrl);
}else{
returnsuper.createView(viewName,locale);
}
}
}
本文内容总结:一、视图,常用的视图实现类,二、视图解析器,常用的视图解析器,InternalResourceViewResolver,Excel视图,三、重定向和转发,
原文链接:https://www.cnblogs.com/realshijing/p/8143138.html