Class InternalResourceView

All Implemented Interfaces:
Aware, BeanNameAware, InitializingBean, ApplicationContextAware, ServletContextAware, View
Direct Known Subclasses:
JstlView

public class InternalResourceView extends AbstractUrlBasedView
Wrapper for a JSP or other resource within the same web application. Exposes model objects as request attributes and forwards the request to the specified resource URL using a RequestDispatcher.

A URL for this view is supposed to specify a resource within the web application, suitable for RequestDispatcher's forward or include method.

If operating within an already included request or within a response that has already been committed, this view will fall back to an include instead of a forward. This can be enforced by calling response.flushBuffer() (which will commit the response) before rendering the view.

Typical usage with InternalResourceViewResolver looks as follows, from the perspective of the DispatcherServlet context definition:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>
Every view name returned from a handler will be translated to a JSP resource (for example: "myView" → "/WEB-INF/jsp/myView.jsp"), using this view class by default.
Author:
Rod Johnson, Juergen Hoeller, Rob Harrop
See Also:
  • RequestDispatcher.forward(ServletRequest, ServletResponse)
  • RequestDispatcher.include(ServletRequest, ServletResponse)
  • ServletResponse.flushBuffer()
  • InternalResourceViewResolver
  • JstlView
  • Constructor Details

    • InternalResourceView

      public InternalResourceView()
      Constructor for use as a bean.
      See Also:
    • InternalResourceView

      public InternalResourceView(String url)
      Create a new InternalResourceView with the given URL.
      Parameters:
      url - the URL to forward to
      See Also:
    • InternalResourceView

      public InternalResourceView(String url, boolean alwaysInclude)
      Create a new InternalResourceView with the given URL.
      Parameters:
      url - the URL to forward to
      alwaysInclude - whether to always include the view rather than forward to it
  • Method Details

    • setAlwaysInclude

      public void setAlwaysInclude(boolean alwaysInclude)
      Specify whether to always include the view rather than forward to it.

      Default is "false". Switch this flag on to enforce the use of a Servlet include, even if a forward would be possible.

      See Also:
    • setPreventDispatchLoop

      public void setPreventDispatchLoop(boolean preventDispatchLoop)
      Set whether to explicitly prevent dispatching back to the current handler path.

      Default is "false". Switch this to "true" for convention-based views where a dispatch back to the current handler path is a definitive error.

    • isContextRequired

    • renderMergedOutputModel

      protected void renderMergedOutputModel(Map<String,Object> model, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws Exception
      Render the internal resource given the specified model. This includes setting the model as request attributes.
      Specified by:
      renderMergedOutputModel in class AbstractView
      Parameters:
      model - combined output Map (never null), with dynamic values taking precedence over static attributes
      request - current HTTP request
      response - current HTTP response
      Throws:
      Exception - if rendering failed
    • exposeHelpers

      protected void exposeHelpers(jakarta.servlet.http.HttpServletRequest request) throws Exception
      Expose helpers unique to each rendering operation. This is necessary so that different rendering operations can't overwrite each other's contexts etc.

      Called by renderMergedOutputModel(Map, HttpServletRequest, HttpServletResponse). The default implementation is empty. This method can be overridden to add custom helpers as request attributes.

      Parameters:
      request - current HTTP request
      Throws:
      Exception - if there's a fatal error while we're adding attributes
      See Also:
    • prepareForRendering

      protected String prepareForRendering(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws Exception
      Prepare for rendering, and determine the request dispatcher path to forward to (or to include).

      This implementation simply returns the configured URL. Subclasses can override this to determine a resource to render, typically interpreting the URL in a different manner.

      Parameters:
      request - current HTTP request
      response - current HTTP response
      Returns:
      the request dispatcher path to use
      Throws:
      Exception - if preparations failed
      See Also:
    • getRequestDispatcher

      protected @Nullable jakarta.servlet.RequestDispatcher getRequestDispatcher(jakarta.servlet.http.HttpServletRequest request, String path)
      Obtain the RequestDispatcher to use for the forward/include.

      The default implementation simply calls ServletRequest.getRequestDispatcher(String). Can be overridden in subclasses.

      Parameters:
      request - current HTTP request
      path - the target URL (as returned from prepareForRendering(HttpServletRequest, HttpServletResponse))
      Returns:
      a corresponding RequestDispatcher
    • useInclude

      protected boolean useInclude(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
      Determine whether to use RequestDispatcher's include or forward method.

      Performs a check whether an include URI attribute is found in the request, indicating an include request, and whether the response has already been committed. In both cases, an include will be performed, as a forward is not possible anymore.

      Parameters:
      request - current HTTP request
      response - current HTTP response
      Returns:
      true for include, false for forward
      See Also: