Search code examples
vaadinvaadin10

Polymer resource URLs does'nt work under 'context' when running on Tomcat container


I have a simple Vaadin Flow app (with SpringBoot integration) deployed under Tomcat as war file. App is running fine in dev mode localy, but when deployed in container under context, its not showing anything. When I look into page source I can see polymer resource URLs start with "/frontend/" so context is not honored and browser can't load it.

Whats more I can see (in the page source in browser) that some URLs start with "./frontend/" and some with "/frontend/" see example below. I tried this and that but can't figure out how to make Vaadin to generate URLs to be relative or to honor context given by Tomcat container. Any idea what's wrong here? All these polymer resources are common one from Vaadin, not custom.

<link rel="import" href="/frontend/bower_components/polymer/lib/utils/array-splice.html">
<link rel="import" href="/frontend/bower_components/polymer/lib/mixins/gesture-event-listeners.html">
<link rel="import" href="/frontend/bower_components/polymer/lib/elements/dom-if.html">
<link rel="import" href="/frontend/bower_components/polymer/lib/mixins/properties-changed.html">
<link rel="import" href="/frontend/bower_components/polymer/lib/utils/gestures.html">
<link rel="import" href="/frontend/bower_components/polymer/lib/elements/array-selector.html">
<link rel="import" href="/frontend/bower_components/polymer/lib/legacy/polymer.dom.html">


<link rel="import" href="./frontend/bower_components/vaadin-button/theme/lumo/vaadin-button.html">
<link rel="import" href="./frontend/bower_components/vaadin-ordered-layout/theme/lumo/vaadin-vertical-layout.html">

Solution

  • This behavior is planned to be improved in near future, here is an issue link for tracking the progress.

    For now, you can workaround the behaviour by adding a custom servlet for serving the frontend files:

    import javax.servlet.annotation.WebServlet;
    import com.vaadin.flow.server.VaadinServlet;
    
    @WebServlet(name = "frontendServlet", asyncSupported = true, urlPatterns = "/frontend/*")
    public class FrontendServlet extends VaadinServlet {
    }