Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将服务器端Jax-rs调用与没有前缀的本机文件混合使用?_Java_Tomcat_Jersey - Fatal编程技术网

Java 如何将服务器端Jax-rs调用与没有前缀的本机文件混合使用?

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/*前缀并将其混合

我们目前正在使用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/→ 战争的本机映像目录


感谢您的帮助首先,在servlet映射方面,优先级如下:

  • 路径映射:
    /rest/*
  • 扩展映射:
    *.png
  • 默认值:
    /
  • 路径映射+扩展映射:坏主意 因此,不能在现有路径映射中通过静态资源的文件扩展名映射静态资源(无论如何,管理web.xml中的所有静态文件扩展名是个坏主意)

    路径映射的优先级>外部映射

    使用过滤器 在
    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>