Java 如何将服务器端Jax-rs调用与没有前缀的本机文件混合使用?
我们目前正在使用Jersey JAX-RS实现来处理REST请求(服务器端Jersey)。我们的web.xml文件配置为所有/rest/*请求都由Jersey处理。那很好。我们的服务器目前是Tomcat6,使用Java6(在Ubuntu11.04上) 因此,://myserver/rest/customer/正常,Jersey使用@Path(“/customer”)前缀调用该类 现在我们还有静态内容,例如://myserver/images/。。。好的 有没有办法去掉/rest/*前缀并将其混合在一起 我们希望实现的目标: ://myserver/rest/customer/→ 运动衫 ://myserver/rest/images/→ 战争的本机映像目录Java 如何将服务器端Jax-rs调用与没有前缀的本机文件混合使用?,java,tomcat,jersey,Java,Tomcat,Jersey,我们目前正在使用Jersey JAX-RS实现来处理REST请求(服务器端Jersey)。我们的web.xml文件配置为所有/rest/*请求都由Jersey处理。那很好。我们的服务器目前是Tomcat6,使用Java6(在Ubuntu11.04上) 因此,://myserver/rest/customer/正常,Jersey使用@Path(“/customer”)前缀调用该类 现在我们还有静态内容,例如://myserver/images/。。。好的 有没有办法去掉/rest/*前缀并将其混合
感谢您的帮助首先,在servlet映射方面,优先级如下:
/rest/*
*.png
/
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>
不映射/rest中的静态资源
这可能不适合你的需要,但这是我最喜欢的!
在/rest
中映射静态资源会说“嘿,开发人员,过来获取/发布/放置/删除这些静态资源,没关系”:
- 如果无法获取/放置/发布/删除这些资源,则不应将它们映射到
。它给人一种错误的印象/rest
- 如果您真的想通过REST Web服务来操作这些资源,那么让Jersey来完成繁重的工作并为这些资源提供服务(查看示例)
- 这很容易实现。只需在web.xml中将Jersey ServletContainer注册为一个过滤器(而不是servlet)——请参见的底部示例——并使用或init param使静态内容可访问。谢谢您的回答。事实上,这恰恰相反,我们试图实现。我们希望将Jersey限制为一些特殊的东西(/employees,/customers…),并让Tomcat本地处理静态文件(/images,/dojo,/javascript)。问题是,对于SEO和URL美观,我们希望避免使用/rest/employees、/rest/customers。这就是我们想要实现的混音。完美!非常感谢。我也同意其他的选择,但觉得这个更合适。ServletContainer.FEATURE\u过滤器\u转发\u在\u 404上是一个隐藏良好的选项:)
<urlrewrite default-match-type="wildcard">
<rule>
<from>/rest/images/**</from>
<to>/images/$1</to>
</rule>
</urlrewrite>