16.3. ViewRendererServlet

From Spring Framework

16.3. ViewRendererServlet

Portlet MVC中的显示过程比Web MVC的复杂一点,为了复用所有Spring Web MVC里 的视图技术,必须把 PortletRequest / PortletResponse 转换到 HttpServletRequest / HttpServletResponse,然后调用 View的 render方法。为此,DispatcherPortlet 使用了一个特殊的servlet:ViewRendererServlet。

为了DispatcherPortlet能够显示, 必须在web.xml文件里为你的web应用声明一个 ViewRendererServlet的实例,如下:

<servlet>
    <servlet-name>ViewRendererServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>ViewRendererServlet</servlet-name>
    <url-pattern>/WEB-INF/servlet/view</url-pattern>
</servlet-mapping>

在实际执行显示时,DispatcherPortlet这样做:

  1. 把 WebApplicationContext作为属性绑定在请求上, 使用和DispatcherServlet相同的 WEB_APPLICATION_CONTEXT_ATTRIBUTEkey。

  2. 把Model和 View对象绑定在请求上,使它们对 ViewRendererServlet可见。

  3. 构造 PortletRequestDispatcher对象,利用 映射到ViewRendererServlet的/WEB- INF/servlet/viewURL来执行include操作。

然后,ViewRendererServlet能够以合适的参数 调用View的render方法。

可以通过DispatcherPortlet的viewRendererUrl 配置参数来修改ViewRendererServlet的实际URL。