简短回答:当然。但我认为真正的问题是“如何?” :)
Spring MVC 是 Grails 构建的基础,因此它可以做 Grails 能做的事情。 Grails-resources 只是 Grails 为帮助更轻松地开发工作而提供的一个实用程序。如果你想在Spring中做同样的事情,你必须做一些工作。
首先,Spring MVC 有一种公开资源的方式(参考 http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-config-static-resources,第 17.15.6 章,“配置资源服务”);例如:
<mvc:resources mapping="/images/**" location="/images/"/>
上面的行公开了每个文件[Web folder]/images/
作为资源,可以通过网络浏览器请求。
其次,要像Grails一样简单地将资源嵌入到HTML中,必须结合Spring与其他一些视图技术 http://static.springsource.org/spring/docs/2.5.x/reference/view.html,如 sitemesh、freemarker/velocity/JSP...(Grails 在幕后为您完成这些工作)。代替grails标签,现在你有freemarker 或 Velocity 的宏。但我建议您编写一些自己的自定义宏,因为内置宏并不总是好的。
我使用过 Grails 和 Spring MVC。我很欣赏 Grails 为让开发人员的生活变得更轻松而做出的努力,但对于 Spring 来说情况有些不同。使用 Spring,您将需要编写更多代码,做出更多选择(在 Grails 中,它们被选择为“默认”,如果您不想自定义,则它们是“不可见的”)。作为回报,你是forced更加了解底层机制,这是一件好事。
我已经使用 sitemesh 进行布局,并使用 freemarker 作为几个 Web 项目的 HTML 渲染引擎,它们运行得很好。
UPDATE:
我想澄清的是mvc:resources
不是您问题的完整答案。这只是一部分exposing将网络资源拿出来供浏览器获取。对于 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 和 Sitemesh”,您可能会找到它。