java.lang.Object
org.apache.juneau.rest.server.view.jsp.JspView
All Implemented Interfaces:
View

public final class JspView extends Object implements View
Immutable value class returned from @RestOp-annotated methods to ask the framework to render a JSP template.

Companion to JspMixin and JspViewRenderer: the mixin sets up the /jsp/* mount and registers the renderer; the renderer detects JspView returns in the response-processor chain and dispatches via ServletContext.getRequestDispatcher(...).forward(...).

Usage:

@RestGet("/hello/{name}") public View hello(@Path String name) { return JspView.of("hello.jsp") .attr("name", name) .attr("ts", Instant.now()); }

Immutability:

Each attr(...) / attrs(...) / header(...) call returns a new JspView carrying the additional binding; the original instance is unchanged. This keeps JspView a value type safe to share across requests (e.g. as a static singleton built once and returned from many handlers).

See Also:
Since:
10.0.0
  • Method Details

    • of

      public static JspView of(String templateName)
      Creates a new JspView carrying the given template name and no attributes.
      Parameters:
      templateName - The template name (relative to the base path). Must not be null or blank.
      Returns:
      A new JspView instance.
      Throws:
      IllegalArgumentException - If templateName is null or blank.
    • attr

      public JspView attr(String key, Object value)
      Returns a copy of this view with the given attribute added (or replaced if a binding for key already exists).

      Per the Servlet spec, passing null to setAttribute(name, null) removes the binding rather than setting it; JspView mirrors that constraint at build-time so the renderer never has to short-circuit a request-attribute write at dispatch time.

      Parameters:
      key - The attribute key (exposed inside the JSP as ${key}). Must not be null or blank.
      value - The attribute value. Must not be null.
      Returns:
      A new JspView carrying the additional attribute.
      Throws:
      IllegalArgumentException - If key is null or blank, or value is null.
    • attrs

      public JspView attrs(Map<String,?> values)
      Returns a copy of this view with all entries from the given map added (or replaced if a binding for any key already exists).
      Parameters:
      values - The attributes to add. null is treated as an empty map (the result is logically the same instance with no entries added).
      Returns:
      A new JspView carrying the additional attributes.
    • header

      public JspView header(String name, String value)
      Returns a copy of this view with the given response header set on the rendered response.

      Typical usage: .header("Content-Type", "text/html; charset=UTF-8") or .header("Cache-Control", "no-store"). The renderer applies these headers via HttpServletResponse.setHeader(...) before forwarding to the JSP engine.

      Parameters:
      name - The header name. Must not be null or blank.
      value - The header value. Must not be null.
      Returns:
      A new JspView carrying the additional response header.
      Throws:
      IllegalArgumentException - If name is null or blank, or value is null.
    • getTemplateName

      Description copied from interface: View
      The name of the template to render — typically a path relative to the mixin-configured base path.

      For example, "hello.jsp" with a JSP mixin basePath("/WEB-INF/views/") resolves to "/WEB-INF/views/hello.jsp" on the request dispatcher.

      Specified by:
      getTemplateName in interface View
      Returns:
      The template name. Never null.
    • getAttributes

      Description copied from interface: View
      The attributes to expose to the template.

      Each entry is forwarded to the templating engine as a named binding accessible from inside the template (e.g. ${name} in JSP / EL, th:text="${name}" in Thymeleaf).

      Specified by:
      getAttributes in interface View
      Returns:
      The attributes map. Never null; returns an immutable empty map when no attributes are bound.
    • getResponseHeaders

      Description copied from interface: View
      Optional response headers applied by the renderer before forwarding to the templating engine.

      Typical use cases: setting Content-Type (e.g. "text/html; charset=UTF-8") or Cache-Control on the rendered response. The default implementation returns an empty map so most View impls don't need to override it.

      Specified by:
      getResponseHeaders in interface View
      Returns:
      An immutable map of headers to apply. Never null; defaults to an empty map.
    • toString

      public String toString()
      Overrides:
      toString in class Object