在Spring MVC中管理HTML资源(CSS,JS文件)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Spring MVC中管理HTML资源(CSS,JS文件)相关的知识,希望对你有一定的参考价值。

是否可以在Spring MVC中管理类似于grails-resources的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-resources只是Grails为帮助开发工作更容易实现的实用工具。如果你想在Spring中做同样的事情,你必须做一些工作。

首先,Spring MVC有一种公开资源的方法(reference,第17.15.6章,“配置资源服务”);例如:

<mvc:resources mapping="/images/**" location="/images/"/>

上面的行将[Web folder]/images/中的每个文件作为资源公开,并且可以由Web浏览器请求。

其次,要像Grails一样将资源嵌入到HTML中,你必须结合Spring with some other view technologies,比如sitemesh,freemarker / velocity / JSP ......(Grails为你做幕后的事情)。而不是grails标签,现在你有freemarker或Velocity的宏。但我建议你写一些自己的自定义宏,因为内置的宏并不总是好的。

我使用过Grails和Spring MVC。我很欣赏Grails为使开发人员的生活更轻松而付出的努力,但是对于Spring来说,事情有点不同。使用Spring,您将可以编写更多代码,进行更多选择(在Grails中,它们被选为“默认”,如果您不想自定义,则为“隐形”)。作为回报,你被迫对底层机制更加清楚,这是一件好事。

我已经使用sitemesh进行布局,并将freemarker用作多个Web项目的HTML呈现引擎,并且它们运行良好。


更新:

我想说明mvc:resources不是你问题的完整答案。这只是暴露网络资源以供浏览器获取的部分。使用Grails,这已经默认生成了,但对Spring来说并非如此。您必须指定文件夹'images'中的内容是资源,并且可以通过URL http://your-domain-name/context-name/images/image-name访问它们。如上所述,Spring比Grails更明确。

另一件事是模板引擎。使用Spring时,Library Sitemesh是一个很受欢迎的选择(它也是Grails的默认选项),所以它没有太大区别(主要是关于语法)。模板引擎的主要目的是用动态数据“填充”你的htmls,我将向你展示......一点点。

请注意,制作符合您示例的教程超出了答案的范围。此外,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”,您可能会发现它。
另一答案

的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']
    }
}

以上是关于在Spring MVC中管理HTML资源(CSS,JS文件)的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC程序中怎么得到静态资源文件css,js,图片文件的路径问题

[Java Web – 3A] – Spring MVC开发注意事项

Spring MVC 拦截 js,css,png 等资源

Spring MVC禁止对CSS,JS,IMAGE等静态资源过滤

spring静态资源无法访问

spring mvc访问静态资源的问题, .js .jpg .css