【问题标题】:Spring MVC REST : static files unaccessible because of url-patternSpring MVC REST:由于 url 模式而无法访问静态文件
【发布时间】:2011-01-04 02:27:35
【问题描述】:

我的 Spring Dispatcher servlet url-pattern 是 /*(正如 spring MVC REST 建议的那样)
现在所有的请求都由这个 Servlet 解决了。甚至 CSS/JS/Images 也被 servlet 解析和处理..

所以,Spring MVC 试图找到控制器.. :(

如何绕过这个?有什么标准的方法可以解决这个问题吗?

& 不想将 url-pattern 更改为 /rest/*(因此,其他静态资源会被 /css/ 或 /js 等访问)

【问题讨论】:

    标签: java servlets spring-mvc url-pattern tuckey-urlrewrite-filter


    【解决方案1】:

    您可以将您的控制器映射到一组较小的 URL(即 /app/*),然后重写您的用户实际看到的 URL,这样他们甚至都不知道。看看the mvc-basic webapp sample,尤其是 web.xml 和 urlrewrite.xml 看看这是怎么做到的。

    【讨论】:

    • 谢谢,嗯.. 我非常接近在 ROO 生成的代码中找到这个解决方案.. ;)
    • 有点离题,但 Roo 非常值得研究构建网络应用程序。绝对值得关注。
    • 我已经开始了一个演示项目.. :) 我喜欢它.. 因为.. 它可以做我手动做的事情..
    • 不是一个好的解决方案。许多应用程序都在模块中,重构所有内容以使用单个 /app/* 目录是不切实际的。更复杂的通配符更有意义,例如 /**Servlet**
    • @TwistedPear 应用程序/业务逻辑仍然可以分布在许多模块中,这很好。我们要说的是,通常(但不总是)是单个模块的 Web 层可以这样处理以方便使用。如果您需要使用更复杂的通配符,那么绝对要这样做。如果您不需要,请采用简单的解决方案。
    【解决方案2】:

    将 Spring 调度程序映射到 URL 空间的某个子部分,并使用 Tuckey 重写用户处理的 URL。

    http://www.example.org/app/controller/action -> http://www.example.org/controller/action

    【讨论】:

      【解决方案3】:

      只是一个提醒更新:Spring 示例中定义的默认重写配置对我来说开箱即用。样式表、脚本等的重写规则还是被处理到 /app/* 规则,随后被DispatchServlet 处理,这是不可取的。

      我必须将 last="true" 属性添加到样式/脚本/图像规则以指示不应应用其他规则,并且我必须在任何 CSS/JS 包含路径中使用 FreeMarker Spring URL 宏。

      以防万一有人遇到同样的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-08
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 2020-11-26
        • 2021-03-11
        相关资源
        最近更新 更多