是否有可能来管理Spring MVC中类似的Grails资源HTML资源?
与此相似: http://www.anyware.co.uk/2005/2011/09/12/optimising-your-application-with-grails-resources-plugin/
例如:在Grails中,模块被指定为
modules = {
common {
resource url:"css/main.css"
resource url:"js/jquery.js"
}
}
在HTML中,此标记与模块名指定要加载的所有文件。
<r:require module="common"/>
所以我想知道有没有什么办法,我可以做类似这样的事情在Spring MVC与<mvc:resources>
或任何其他的选择吗?
简短的回答:当然 。 但我认为,真正的问题是“怎么样?” :)
Spring MVC的是,由Grails建在,所以它可以做什么的Grails可以做的基础。 Grails的资源仅仅是一个工具,它的Grails使帮助发展中国家作品更容易。 如果你想要做同样的春天,你必须做一些工作。
首先,Spring MVC的有办法暴露出资源( 参考 ,17.15.6章“配置资源的份量”); 例如:
<mvc:resources mapping="/images/**" location="/images/"/>
上面一行于所有文件揭露[Web folder]/images/
作为资源,并且可以通过Web浏览器请求。
其次,嵌入资源到HTMLS容易像Grails的,你必须结合春季与其他一些视图技术 ,如SiteMesh的,freemarker的/速度/ JSP ...(这Grails的为你做幕后)。 相反Grails的标签的,现在你的freemarker的或Velocity的宏 。 但我会建议写一些自己的自定义宏,因为内置一个并不总是好的。
我都用了Grails和Spring MVC的。 我很欣赏Grails的努力,使开发者的生活更轻松,但随着春节的事情是有点不同。 使用Spring,你会得到多写一些代码,做一些更多的选择(在他们选择你作为“默认”的Grails,而且是“看不见”的,如果你不希望自定义)。 由于放,你被迫要与下洼机制,这是一件好事,更awared。
我已经使用的sitemesh布局,并freemarker的为多个Web项目的HTML渲染引擎,和他们工作得很好。
更新:
我要明确的是mvc:resources
是不完整的回答你的问题。 这是暴露在网络资源出来的浏览器获得的只是一部分。 使用Grails,这已经在默认情况下做出的,但它不是真正的春季。 您必须指定文件夹中的内容“图像”的资源,他们可以通过网址访问http://your-domain-name/context-name/images/image-name
。 至于说,春天是一个很多比Grails的更加明确。
另一件事是模板引擎。 图书馆的sitemesh是一个流行的选择弹簧工作时(这也是Grails的默认值),所以它不是一个很大的不同(主要是它是关于语法)。 模板引擎的主要目的是您的HTMLS与动态数据“填满”了,我要告诉你......有点吧。
请注意,以使该满足您的例子是超过一个答案的范围的教程。 此外,春季使许多相关的解决方案,这意味着不同的开发人员可能具有的组织/配置的不同方式。 但是,给你的感觉,我会做出一个简单的例子(我用的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的”快速搜索,你会发现它。
的grails-app / CONF /弹簧/ resources.groovy
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
import org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler
// Place your Spring DSL code here
beans = {
resourceHttpRequestHandler(ResourceHttpRequestHandler) {
locations = ['file:/D:/fupload/']
}
resourceHandlerAdapter(HttpRequestHandlerAdapter)
resourceHandlerMapping(SimpleUrlHandlerMapping) {
urlMap = ['/fupload/**':'resourceHttpRequestHandler']
}
}