2

是否可以在类似于 grails-resources 的 Spring MVC 中管理 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"/>

<mvc:resources>所以我想知道有什么方法可以在 Spring MVC 中使用或任何其他选项来做类似的事情吗?

4

2 回答 2

3

简短的回答:当然。但我认为真正的问题是“如何?” :)

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”,您可能会找到它。
于 2012-05-22T07:56:09.217 回答
0

grails-app/conf/spring/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']
    }
}
于 2018-09-19T03:42:49.820 回答