Spring MVC 页面渲染( render view )
一、理解view解析过程
在Spring MVC 中,controllers不会负责具体的页面渲染,它仅仅是调用业务逻辑并返回model数据给view层,至于view层具体怎么用HTML展现,由专门的view层具体负责,这就是MVC模式,业务层与展示层是松耦合的。那么,Spring MVC是如何解耦合请求处理逻辑和页面渲染的呢?
我们在Spring MVC配置介绍文章中已经知道,controller在处理外业务逻辑之后会返回一个逻辑view的字符串,那么Spring MVC是怎么根据这个逻辑view名到真正的物理view页面呢?这个工作就由Spring的ViewResolvers负责。
对于普通的JSP页面,最常用到的就是view resolver就是InternalResourceViewResolver
,它有两个属性,一个是匹配物理view的前缀,一个是后缀。前缀一般就是view页面的路径位置,后缀就是文件的格式,而前缀后缀之间的就是逻辑view名称。
<bean class=org.springframework.web.servlet.view.InternalResourceViewResolver>
<property name=prefix value=/WEB-IF/views/ />
<property name=suffix value=.jsp />
</bean>
比如按照上面的配置,如果controller返回的逻辑view名称是home的话,InternalResourceViewResolver
会根据这个逻辑view名home到其对应的实际物理view:/WEB-IF/views/home.jsp
。
@Controller
@RequestMapping(value = /)
public class HomeController {
@RequestMapping(method= RequestMethod.GET)
public String home() {
return home;
}
}
ViewResolver接口:
public interface ViewResolver {
View resolveViewame(String var1, Locale var2) throws Exception;
}
这个接口很简单,当我们传入一个逻辑view名和Locale对象,就会返回一个View实例。
View接口:
public interface View {
String getContentType();
void render(Map<String, ?> var1, HttpServletRequest var2, HttpServletRespe var) throws Exception;
}
View接口的职责就是接收model对象、Request对象、Respe对象,并渲染输出结果给Respe对象。如果我们要自己写一个ViewResolver也很简单,我们只需要实现ViewResolver和View两个接口,在View接口中把需要渲染的内容输出到Respe对象中去就可以了。
当然,我们基本上不需要自己去写ViewResolver,spring mvc为我们提供了各种各样的ViewResolver:
上面虽然列了很多个ViewResolver,但我们具体用哪个好呢?其实上面的每个ViewResolver都对应着一种view页面的实现技术,比如InternalResourceViewResolver
就是用来处理JSP页面,TilesViewResolver
主要处理Apache Tiles Views
,FreeMarkerViewResolver
和VelocityViewResolver
分别对应着FreeMarker
和Velocity Template
页面渲染技术。
二、创建一个JSP View
无可否认,在Java web编程领域,历史最悠久的页面处理技术便是JSP。所以,这里我们就拿JSP技术来展示spring是如何渲染页面的。
Spring有两种方式来支持JSP页面:
1. InternalResourceViewResolver可以用来解析JSP文件,当然,它也支持JSP页面使用JavaServer Standard Library(JSTL)
2. Spring自己也提供了两种JSP 标签类库,一种是表单数据绑定标签库,另一种是提供了一些通用特性的标签库
无论我们使用JSTL还是Spring JSP标签类库,我们都需要配置一个ViewResolver来解析JSP页面。当然一些其他的ViewResolver也可以解析JSP页面,但InternalResourceViewResolver是专门针对JSP技术设计的解析器,所以对于JSP页面,它用起来最简单也最方便。
其实InternalResourceViewResolver
的配置在1.1节已经介绍了,它可以直接把一个逻辑view名映射到转实际渲染数据的物理view页面。如果按照我们这样的配置:
<bean class=org.springframework.web.servlet.view.InternalResourceViewResolver>
<property name=prefix value=/WEB-IF/views/ />
<property name=suffix value=.jsp />
</bean>
那么对于下面这些逻辑view名,InternalResourceViewResolver
则会将其映射成相应的JSP页面:
- home 解析成 /WEB-IF/views/home.jsp
- productList 解析成 /WEB-IF/views/productList.jsp
- books/detail 解析成 /WEB-IF/views/books/detail.jsp
上面例子中还可以看到,当我们的逻辑名称中含有反斜线/时,解析器会将其解析成资源文件的路径,这样我们就可以对页面资源文件进行目录管理了。
如果要想在JSP中使用JSTL标签很简单,我们只需在InternalResourceViewResolver中指定一个viewClass属性即可:
<bean class=org.springframework.web.servlet.view.InternalResourceViewResolver >
<property name=prefix value=/WEB-IF/views/ />
<property name=suffix value=.jsp />
<property name=viewClass value=org.springframework.web.servlet.view.JstlView />
</bean>
上面已经讲过,Spring JSP提供了两种类库,一种是表单数据绑定标签库,另一种提供了更多样话的通用标签库。
2..1 使用表单数据绑定标签库
Spring的表单数据绑定标签库提供了14个标签,它和普通标签的区别就是能够将表单属性和model对象属性绑定在一起。要想使用表单数据绑定标签库,只需要在JSP页面中声明:
<%@ taglib uri=http://www.springframework/tags/form prefix=sf %>
标签库中的14个标签:
下面举个例子,我们使用这个标签库来重写一个注册页面:
<sf:form method=POST commandame=user>
First ame: <sf:input path=firstame /><br/>
Last ame: <sf:input path=lastame /><br/>
Email: <sf:input path=email /><br/>
Username: <sf:input path=username /><br/>
Password: <sf:password path=password /><br/>
<input type=submit value=Register />
</sf:form>
commandame:对应后端model数据对象名称,也就是Model中的对应的key值
@RequestMapping(value=/register, method= RequestMethod.GET)
public String showRegistrationForm(Model model) {
model.addAttribute(user,new User());
return register;
}
path:我们可以看到form表单内部每个标签都有个path属性,这个属性对应的就是Model对象的属性
2..2 使用通用标签库
除了表单数据绑定标签库之外,Spring还提供了一个更加通用的标签库,要想使用这个更通用的标签库,只需要在JSP页面中添加:
<%@ taglib uri=http://www.springframework/tags prefix=s %>
标签库中的标签:
关于这些标签的详细使用说明可以查看spring的官方文档,这里不多做介绍了。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 18 条评论) |
本站网友 奇人绝技 | 7分钟前 发表 |
2.1 InternalResourceViewResolver的配置 其实InternalResourceViewResolver的配置在1.1节已经介绍了,它可以直接把一个逻辑view名映射到转实际渲染数据的物理view页面 | |
本站网友 周文斌 | 10分钟前 发表 |
理解view解析过程 1.1 从逻辑view到物理view 在Spring MVC 中,controllers不会负责具体的页面渲染,它仅仅是调用业务逻辑并返回model数据给view层,至于view层具体怎么用HTML展现,由专门的view层具体负责,这就是MVC模式,业务层与展示层是松耦合的 | |
本站网友 李昕瑶 | 30分钟前 发表 |
一 | |
本站网友 麻雀肉 | 16分钟前 发表 |
View接口: public interface View { String getContentType(); void render(Map<String | |
本站网友 财智理财 | 22分钟前 发表 |
<sf | |
本站网友 于都租房 | 9分钟前 发表 |
2.2 解析标准的JSTL文件 如果要想在JSP中使用JSTL标签很简单,我们只需在InternalResourceViewResolver中指定一个viewClass属性即可: <bean class=org.springframework.web.servlet.view.InternalResourceViewResolver > <property name=prefix value=/WEB-IF/views/ /> <property name=suffix value=.jsp /> <property name=viewClass value=org.springframework.web.servlet.view.JstlView /> </bean> 2. 使用Spring JSP类库 上面已经讲过,Spring JSP提供了两种类库,一种是表单数据绑定标签库,另一种提供了更多样话的通用标签库 | |
本站网友 阿里儿子 | 29分钟前 发表 |
<sf | |
本站网友 保障性住房政策 | 19分钟前 发表 |
<sf | |
本站网友 北京万达广场电影院 | 26分钟前 发表 |
如果按照我们这样的配置: <bean class=org.springframework.web.servlet.view.InternalResourceViewResolver> <property name=prefix value=/WEB-IF/views/ /> <property name=suffix value=.jsp /> </bean> 那么对于下面这些逻辑view名,InternalResourceViewResolver则会将其映射成相应的JSP页面: home 解析成 /WEB-IF/views/home.jspproductList 解析成 /WEB-IF/views/productList.jspbooks/detail 解析成 /WEB-IF/views/books/detail.jsp 上面例子中还可以看到,当我们的逻辑名称中含有反斜线/时,解析器会将其解析成资源文件的路径,这样我们就可以对页面资源文件进行目录管理了 | |
本站网友 什么杀毒软件比较好 | 25分钟前 发表 |
HttpServletRespe var) throws Exception; } View接口的职责就是接收model对象 | |
本站网友 李耳香油 | 22分钟前 发表 |
本站网友 远处传来熟悉的歌谣 | 3分钟前 发表 |
如果按照我们这样的配置: <bean class=org.springframework.web.servlet.view.InternalResourceViewResolver> <property name=prefix value=/WEB-IF/views/ /> <property name=suffix value=.jsp /> </bean> 那么对于下面这些逻辑view名,InternalResourceViewResolver则会将其映射成相应的JSP页面: home 解析成 /WEB-IF/views/home.jspproductList 解析成 /WEB-IF/views/productList.jspbooks/detail 解析成 /WEB-IF/views/books/detail.jsp 上面例子中还可以看到,当我们的逻辑名称中含有反斜线/时,解析器会将其解析成资源文件的路径,这样我们就可以对页面资源文件进行目录管理了 | |
本站网友 东景花园 | 27分钟前 发表 |
input path=firstame /><br/> Last ame | |
本站网友 侯凯文 | 14分钟前 发表 |
<sf | |
本站网友 认了 | 3分钟前 发表 |
要想使用表单数据绑定标签库,只需要在JSP页面中声明: <%@ taglib uri=http | |
本站网友 青岛健身 | 4分钟前 发表 |
2..1 使用表单数据绑定标签库 Spring的表单数据绑定标签库提供了14个标签,它和普通标签的区别就是能够将表单属性和model对象属性绑定在一起 | |
本站网友 双神吧 | 14分钟前 发表 |
要想使用表单数据绑定标签库,只需要在JSP页面中声明: <%@ taglib uri=http |