什么是视图解析
浏览器只识别静态的html文件。MVC中,controller并不直接生成html文件,而只负责为model填充数据,然后将model转给视图(view)。并且controller只知道视图的逻辑名称,并不负责视图的内容。这样,就将转发请求和解析视图这两件事在Spring MVC中进行了解耦。controller和view之间的耦合只在于对model中数据的定义。
由于controller只提供了视图的逻辑名称,Spring要知道怎样渲染视图,就需要视图解析器的帮助。视图解析器定义了视图模板文件所在的目录和后缀,和视图逻辑名称拼接之后,就构成了视图完整的路径。
Spring MVC中定义的视图解析器接口和视图接口如下:
1 | public interface ViewResolver { |
ViewResolver解析视图名称,并返回View。View则根据model(数据)以及request渲染出response。只要实现了代码中的两个方法,就可以解析视图了。然而在Spring MVC中,一般不需要再这样做,因为Spring MVC为各种常用视图框架提供了视图解析器的实现。
视图解析器 | 描述 |
---|---|
InternalResourceViewResolver | 将视图解析为Web应用的内部资源(一般为JSP) |
TilesViewResolver | 将视图按Apache Tile定义进行解析,Tiles 2.0和Tiles 3.0分别有一个TilesViewResolver实现。 |
FreeMarkerViewResolver | 将视图按FreeMarker模板解析 |
ThymeleafViewResolver | 将视图按Thymeleaf模板解析 |
ResourceBundleViewResolver | 将视图解析为ResourceBundle(一般是属性文件) |
UrlBasedViewResolver | 根据视图名称直接解析 |
VelocityViewResolver | 根据Velocity模板解析 |
VelocityLayoutViewResolver | 根据Velocity布局,找到对应定义进行解析 |
BeanNameViewResolver | 将视图解析成Spring应用上下文中的bean,bean的id和视图一样 |
XmlViewResolver | 解析XML,和BeanNameViewResolver类似 |
XsltViewResolver | 解析XSLT |
ContentNegotiatingViewResolver | 根据视图的类型将视图转发给相应的另一个视图解析器 |
JasperReportsViewResolver | 将视图按JasperReports定义解析 |
其中,InternalResourceViewResolver一般用来解析JSP,TilesViewResolver用来解析Apache Tile,FreeMarkerViewResolver用来解析FreeMarker,ThymeleafViewResolver用来解析Thymeleaf。ResourceBundleViewResolver一般用来解析属性文件。在一个项目中,可以同时使用多个视图解析器,解析不同类型的文件。 |
创建JSP视图
使用InternalResourceViewResolver解析jsp模板文件很简单,只需要配置前缀和后缀。
1 |
|
经过这样配置后,home将会解析到/WEB-INF/views/home.jsp
小结
本文讲解了视图解析,以及如何创建JSP视图,将在后续文章中讲解如何解析其它视图模板。