14.2. JSP和JSTL

Spring为JSP和JSTL这些view层技术提供了几个即取即用的解决方案。使用JSP和JSTL的话,采用WebApplicationContext中定义的普通视图解析器就好;当然,还得自己写一些实际做渲染的JSP页面。本章介绍了一些Spring提供的用于简化JSP开发的额外特性。

14.2.1. 视图解析器

与你在Spring中采用的任何其他视图技术一样,使用JSP方式的话你需要一个用来解析你的视图的视图解析器,常用的是在WebApplicationContext中定义的 InternalResourceViewResolverResourceBundleViewResolver

<!-- the ResourceBundleViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
  <property name="basename" value="views"/>
</bean>

# And a sample properties file is uses (views.properties in WEB-INF/classes):
welcome.class=org.springframework.web.servlet.view.JstlView
welcome.url=/WEB-INF/jsp/welcome.jsp

productList.class=org.springframework.web.servlet.view.JstlView
productList.url=/WEB-INF/jsp/productlist.jsp

正如你所看到的,ResourceBundleViewResolver需要一个属性文件来定义view名到1) class 2) URL的映射。使用ResourceBundleViewResolver,你可以只使用一个解析器来混用不同类型的视图技术。

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>

如上例所示,使用JSP时可以配置一个InternalResourceBundleViewResolver。作为一个最佳实践,我们强烈推荐你用 WEB-INF 下的一个目录来存放JSP文件,以避免被客户端直接访问。

14.2.2. 'Plain-old' JSPs versus JSTL 'Plain-old' JSP与JSTL

使用JSTL时,你必须使用一个特别的view类 JstlView,因为JSTL需要一些准备工作,然后像i18N这样的特性才能工作。

14.2.3. 帮助简化开发的额外的标签

前面的章节中提到过,Spring提供了从请求参数到命令对象的数据绑定。为了简化与数据绑定特性配合使用的JSP页面的开发,Spring提供了一些标签让事情变得更简单。这些标签都提供了 html escaping 的特性,能够打开或关闭字符转码的功能。

spring.jar 包含了标签库描述符(TLD),就好像它自己的tag。关于每个tag的更多资料请参阅附录附录 D, spring.tld