简短的回答:当然。但我认为真正的问题是“如何?” :)
Spring MVC 是 Grails 构建的基础,所以它可以做 Grails 可以做的事情。Grails-resources 只是 Grails 为帮助更轻松地开发工作而开发的实用程序。如果你想在 Spring 中做同样的事情,你必须做一些工作。
首先,Spring MVC 有一种公开资源的方法(参考, 第 17.15.6 章,“配置资源服务”);例如:
<mvc:resources mapping="/images/**" location="/images/"/>
上面的行将每个文件公开[Web folder]/images/
为资源,并且可以由 Web 浏览器请求。
其次,要像 Grails 一样简单地将资源嵌入到 HTML 中,您必须将 Spring与其他一些视图技术结合起来,例如 sitemesh、freemarker/velocity/JSP...(Grails 在幕后为您做这些)。现在你有freemarker 或 Velocity 的宏,而不是grails 标签。但我建议编写一些您自己的自定义宏,因为内置宏并不总是好的。
我使用过 Grails 和 Spring MVC。我很欣赏 Grails 为使开发人员的生活更轻松所做的努力,但使用 Spring 时情况有所不同。使用 Spring,您将编写更多代码,做出更多选择(在 Grails 中,它们被选为“默认”,如果您不想自定义,它们是“不可见的”)。作为回报,你被迫更加了解底层机制,这是一件好事。
我已经使用 sitemesh 进行布局,并使用 freemarker 作为 HTML 渲染引擎用于几个 Web 项目,它们运行良好。
更新:
我想明确指出这mvc:resources
不是您问题的完整答案。这只是将Web 资源公开以供浏览器获取的一部分。对于 Grails,这已经是默认设置了,但对于 Spring 来说并非如此。您必须指定文件夹 'images' 中的内容是资源,并且可以通过 url 访问它们http://your-domain-name/context-name/images/image-name
。话说,Spring 比 Grails 明确得多。
另一件事是模板引擎。在使用 Spring 时,Library Sitemesh 是一个流行的选择(它也是 Grails 的默认设置),所以它并没有太大的不同(主要是关于语法)。模板引擎的主要目的是用动态数据“填充”您的 html,我将向您展示......其中的一些内容。
请注意,制作满足您示例的教程超出了答案的范围。此外,Spring 启用了许多相关的解决方案,这意味着不同的开发人员可能有不同的组织/配置方式。但是为了给你一个感觉,我会做一个简单的例子(我正在使用 freemarker 做这个例子):
在文件:common.ftl 中,我有:
<#macro commonInclude>
<script type="text/javascript" src="${rc.getContextUrl('/js/jquery.js')}"></script>
<link rel="stylesheet" type="text/css" href="${rc.getContextUrl('css/main.css')}" />
</#macro>
再加一点配置,然后在视图文件中我可以调用:
<@common.commonInclude />
它会呈现你想要的代码。
如您所见,主要区别在于它们的语法。Grails 允许更简洁的样式,而 Spring 为您提供更“明确”的样式,如果您想自定义事物,这将受益。
- 奖励:如果您正在寻找 的替代品
Grails layout
,请快速搜索“Spring and Sitemesh”,您可能会找到它。