我们目前正在使用Jersey JAX-RS实现来处理我们的REST请求(服务器端Jersey)。我们的web.xml文件已配置好所有/ rest / *请求由Jersey处理。没关系。我们的服务器目前是Tomcat6,并使用Java6(在Ubuntu 11.04上)
所以,:// myserver / rest / customer /没问题,Jersey用@Path(“/ customer”)前缀调用该类。
现在我们也有静态内容,例如:// myserver / images / ... wich加载正常。
有没有办法这样做,我们可以摆脱/ rest / *前缀并将它们混合在一起?
我们想要实现的目标: :// myserver / rest / customer /→Jersey :// myserver / rest / images /→本机图片战争目录
感谢您的帮助
答案 0 :(得分:2)
这很容易实现。只需在web.xml中注册Jersey ServletContainer作为过滤器(而不是servlet) - 请参阅this page的底部以获取示例 - 并使用ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX或ServletContainer.FEATURE_FILTER_FORWARD_ON_404 init param来创建静态内容可访问。
答案 1 :(得分:0)
首先,当谈到servlet映射时,优先级如下:
/rest/*
*.png
/
因此,您无法在现有路径映射中按照文件扩展名映射静态资源(无论如何,管理web.xml中的所有静态文件扩展名都是个坏主意。)
路径映射的优先级> ext mapping。
在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>
在urlrewrite.xml
配置文件中:
<urlrewrite default-match-type="wildcard">
<rule>
<from>/rest/images/**</from>
<to>/images/$1</to>
</rule>
</urlrewrite>
这可能不适合您的需求,但这是我的最爱!
在/rest
内映射静态资源说“嘿,开发人员,来GET / POST / PUT / DELETE来获取静态资源,没关系”:
/rest
中映射它们。它给人的印象是错误的。