How to mix server-side Jax-rs call with native files without prefix?

前端 未结 2 1311
攒了一身酷
攒了一身酷 2021-01-15 00:27

We are currently using a Jersey JAX-RS implementation to handle our REST requests (server-side Jersey). Our web.xml file is configured so all /rest/* requests are handled by

相关标签:
2条回答
  • 2021-01-15 00:55

    First, when it comes to servlet mapping, priority goes like this:

    1. Path mapping: /rest/*
    2. Extension mapping: *.png
    3. Default: /

    Path mapping + extension mapping: bad idea

    So you can't map static resources by their file extension within an existing path mapping (that would be a bad idea anyway, managing all static file extensions in your web.xml).

    Path mapping's priority > ext mapping.

    Using a filter

    Set up an UrlRewriteFilter in your web.xml

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    And in your urlrewrite.xml configuration file:

    <urlrewrite default-match-type="wildcard">
        <rule>
            <from>/rest/images/**</from>
            <to>/images/$1</to>
        </rule>
    </urlrewrite>
    

    Not mapping static resources in /rest

    This may not suit your needs, but this is my favorite! Mapping static resources within /rest says "Hey, developer, come GET/POST/PUT/DELETE thoses static resources, it's okay":

    • If you can't GET/PUT/POST/DELETE those resources, then you shouldn't map them in /rest. It gives the wrong impression.
    • If ou actually want to manipulate those resources through a REST webservice, then let Jersey do the heavy lifting and serve those resources (check out the jersey-samples for an example).
    0 讨论(0)
  • 2021-01-15 00:58

    This is pretty easy to achieve. Just register Jersey ServletContainer in web.xml as a filter (instead of servlet) - see the bottom of this page for an example - and either use ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX or ServletContainer.FEATURE_FILTER_FORWARD_ON_404 init param to make the static content accessible.

    0 讨论(0)
提交回复
热议问题