我的 Spring Dispatcher servlet url-pattern 是 /* (正如 spring MVC REST 建议的那样)
现在所有请求都由这个 Servlet 解决。甚至 CSS/JS/Images 也被 servlet 解析和处理。
所以,Spring MVC 试图找到控制器.. :(
如何绕过这个?有没有解决这个问题的标准方法?
& 不想将 url-pattern 更改为 /rest/*(因此,其他静态资源会被 /css/ 或 /js 等访问)
我的 Spring Dispatcher servlet url-pattern 是 /* (正如 spring MVC REST 建议的那样)
现在所有请求都由这个 Servlet 解决。甚至 CSS/JS/Images 也被 servlet 解析和处理。
所以,Spring MVC 试图找到控制器.. :(
如何绕过这个?有没有解决这个问题的标准方法?
& 不想将 url-pattern 更改为 /rest/*(因此,其他静态资源会被 /css/ 或 /js 等访问)
您可以将您的控制器映射到一组较小的 URL(即 /app/*),然后重写您的用户实际看到的 URL,以便他们甚至不知道。查看mvc-basic webapp 示例,特别是 web.xml 和 urlrewrite.xml 以了解这是如何完成的。
将 Spring 调度程序映射到 URL 空间的某个子部分,并使用Tuckey重写用户处理的 URL。
http://www.example.org/app/controller/action -> http://www.example.org/controller/action
只是对此的提醒更新:Spring 示例中定义的默认重写配置对我来说不是开箱即用的。样式表、脚本等的重写规则仍然被处理到 /app/* 规则,随后由 处理DispatchServlet
,这是不可取的。
我必须将last="true"
属性添加到样式/脚本/图像规则以指示不应应用其他规则,并且我必须在任何 CSS/JS 包含路径中使用 FreeMarker Spring URL 宏。
以防万一有人遇到同样的问题。