Class BootstrapHandler

All Implemented Interfaces:
RequestHandler, Serializable
Direct Known Subclasses:
JavaScriptBootstrapHandler, WebComponentBootstrapHandler

public class BootstrapHandler extends SynchronizedRequestHandler
Request handler which handles bootstrapping of the application, i.e. the initial GET request.
Since:
1.0
Author:
Vaadin Ltd
See Also:
  • Field Details

  • Constructor Details

    • BootstrapHandler

      public BootstrapHandler()
      Creates an instance of the handler with default BootstrapHandler.PageBuilder.
    • BootstrapHandler

      protected BootstrapHandler(BootstrapHandler.PageBuilder pageBuilder)
      Creates an instance of the handler using provided page builder.
      Parameters:
      pageBuilder - Page builder to use.
  • Method Details

    • getPageBuilder

      protected BootstrapHandler.PageBuilder getPageBuilder()
      Returns the current page builder object.
      Returns:
      Page builder in charge of constructing the resulting page.
    • canHandleRequest

      protected boolean canHandleRequest(VaadinRequest request)
      Description copied from class: SynchronizedRequestHandler
      Check whether a request may be handled by this handler. This can be used as an optimization to avoid locking the session just to investigate some method property. The default implementation just returns true which means that all requests will be handled by calling SynchronizedRequestHandler.synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse) with the session locked.
      Overrides:
      canHandleRequest in class SynchronizedRequestHandler
      Parameters:
      request - the request to handle
      Returns:
      true if the request handling should continue once the session has been locked; false if there's no need to lock the session since the request would still not be handled.
    • isFrameworkInternalRequest

      public static boolean isFrameworkInternalRequest(VaadinRequest request)
      Checks whether the request is an internal request.

      Warning: This assumes that the VaadinRequest is targeted for a VaadinServlet and does no further checks to validate this. You want to use HandlerHelper.isFrameworkInternalRequest(String, jakarta.servlet.http.HttpServletRequest) instead.

      This is public only so that IndexHtmlRequestHandler can access it. If you are not IndexHtmlRequestHandler, go away.

      Parameters:
      request - the request
      Returns:
      true if the request is Vaadin internal, false otherwise
    • isVaadinStaticFileRequest

      public static boolean isVaadinStaticFileRequest(VaadinRequest request)
      Checks whether the request is a request for /VAADIN/*.

      Warning: This assumes that the VaadinRequest is targeted for a VaadinServlet and does no further checks to validate this.

      This is public only so that IndexHtmlRequestHandler can access it. If you are not IndexHtmlRequestHandler, go away.

      Parameters:
      request - the request
      Returns:
      true if the request is for /VAADIN/*, false otherwise
    • isRequestForHtml

      protected boolean isRequestForHtml(VaadinRequest request)
      Checks if the request is potentially a request for an HTML page.
      Parameters:
      request - the request to check
      Returns:
      true if the request is potentially for HTML, false if it is certain that it is a request for a script, image or something else
    • synchronizedHandleRequest

      public boolean synchronizedHandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException
      Description copied from class: SynchronizedRequestHandler
      Identical to SynchronizedRequestHandler.handleRequest(VaadinSession, VaadinRequest, VaadinResponse) except the VaadinSession is locked before this is called and unlocked after this has completed.
      Specified by:
      synchronizedHandleRequest in class SynchronizedRequestHandler
      Parameters:
      session - The session for the request
      request - The request to handle
      response - The response object to which a response can be written.
      Returns:
      true if a response has been written and no further request handlers should be called, otherwise false
      Throws:
      IOException - If an IO error occurred
      See Also:
    • writeErrorCodeIfRequestLocationIsInvalid

      protected boolean writeErrorCodeIfRequestLocationIsInvalid(VaadinRequest request, VaadinResponse response) throws IOException
      Checks whether the request is for a valid location, and if not, writes the error code for the response.
      Parameters:
      request - the request to check
      response - the response to write
      Returns:
      true if location was invalid and error code was written, false if not (location was valid)
      Throws:
      IOException - in case writing to response fails
    • resolvePageTitle

      protected static Optional<String> resolvePageTitle(BootstrapHandler.BootstrapContext context)
      Resolves the initial page title for the given bootstrap context and cancels any pending JS execution for it.
      Parameters:
      context - the bootstrap context
      Returns:
      the optional initial page title
    • createAndInitUI

      protected BootstrapHandler.BootstrapContext createAndInitUI(Class<? extends UI> uiClass, VaadinRequest request, VaadinResponse response, VaadinSession session)
    • initializeUIWithRouter

      protected void initializeUIWithRouter(BootstrapHandler.BootstrapContext context, UI ui)
    • createBootstrapContext

      protected BootstrapHandler.BootstrapContext createBootstrapContext(VaadinRequest request, VaadinResponse response, UI ui, Function<VaadinRequest,String> contextPathCallback)
      Creates a new instance of BootstrapHandler.BootstrapContext for given request, response and ui.
      Parameters:
      request - the request object
      response - the response object
      ui - the UI object
      Returns:
      a new bootstrap context instance
    • setupPushConnectionFactory

      protected void setupPushConnectionFactory(PushConfiguration pushConfiguration, BootstrapHandler.BootstrapContext context)
    • getUIClass

      protected static Class<? extends UI> getUIClass(VaadinRequest request)
      Returns the UI class mapped for servlet that handles the given request.

      This method is protected for testing purposes.

      Parameters:
      request - the request for the UI
      Returns:
      the UI class for the request
    • readResource

      protected static String readResource(String fileName)
    • getInitialUidl

      protected static elemental.json.JsonObject getInitialUidl(UI ui)
      Generates the initial UIDL message which is included in the initial bootstrap page.
      Parameters:
      ui - the UI for which the UIDL should be generated
      Returns:
      a JSON object with the initial UIDL message
    • getPushScript

      protected static String getPushScript(BootstrapHandler.BootstrapContext context)
    • setupErrorDialogs

      protected static void setupErrorDialogs(org.jsoup.nodes.Element style)
    • setupHiddenElement

      protected static void setupHiddenElement(org.jsoup.nodes.Element styles)
    • setupPwa

      protected static void setupPwa(org.jsoup.nodes.Document document, VaadinService service)
    • getStatsJson

      protected static elemental.json.JsonObject getStatsJson(DeploymentConfiguration config) throws IOException
      Throws:
      IOException
    • getStylesheetTags

      protected static Collection<org.jsoup.nodes.Element> getStylesheetTags(VaadinContext context, String fileName) throws IOException
      Gives link tags for referencing the custom theme stylesheet files (typically styles.css or document.css), which are served in express build mode by static file server directly from frontend/themes folder.
      Parameters:
      context - the vaadin context
      fileName - the stylesheet file name to add a reference to
      Returns:
      the collection of link tags to be added to the page
      Throws:
      IOException - if theme name cannot be extracted from file
    • getStylesheetLinks

      protected static Collection<String> getStylesheetLinks(VaadinContext context, String fileName)
      Gives a links for referencing the custom theme stylesheet files (typically styles.css or document.css), which are served in express build mode by static file server directly from frontend/themes folder.
      Parameters:
      context - the vaadin context
      fileName - the stylesheet file name to add a reference to
      Returns:
      the collection of links to be added to the page