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

2024-04-19

是否可以像grails-resources那样在Spring MVC中管理HTML资源?

与此类似:http://www.anyware.co.uk/2005/2011/09/12/optimising-your-application-with-grails-resources-plugin/ 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 有一种公开资源的方式(参考 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”,您可能会找到它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring MVC 中管理 HTML 资源(CSS、JS 文件) 的相关文章

  • Spring Security 上的组和 acl

    我想使用 Spring Security 来管理用户 组和权限 我想使用 ACL 来保护我的域对象 但我找不到将组分配给 acl 的方法 例如 我有用户和组 每个组可以拥有以下证券 管理论坛 可以是类似的角色ROLE FORUM MANAG
  • Spring MVC 中 ApplicationContext 和 WebApplicationContext 有什么区别?

    应用程序上下文和 Web 应用程序上下文有什么区别 我知道WebApplicationContext用于面向Spring MVC架构的应用程序 我想知道有什么用ApplicationContext在 MVC 应用程序中 以及定义了什么样的b
  • Spring Data (JPA) 多个存储库,没有很多类

    在我当前的项目中 我使用 Spring Data JPA 并且有 20 多个 Entity类 我想为它们创建存储库 但创建另一个类 每个类适用于任何模型 Repository注释似乎是某种矫枉过正和大量 重复 代码 所有存储库类将如下所示
  • 配置Spring的MappingJacksonHttpMessageConverter

    我在用MappingJacksonHttpMessageConverter在 Spring MVC 中自动序列化对象 如下所示 RequestMapping value getAccount method RequestMethod GET
  • Spring 的 LdapTemplate 搜索:PartialResultException:未处理的延续引用;剩余名称 '/'

    我通过 LDAP 为某个使用 spring 制作的应用程序添加用户 虽然这适用于大多数情况 但在某些情况下 它不起作用 检索我使用的用户 public class LdapUserServiceImpl implements ILdapUs
  • Spring IO 这个名字是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 2013 年秋季 Spring 推出了新网站 spring io http spring io 并宣布了其新平台 弹簧IO http sp
  • Spring Batch - ItemStreamException:未创建输出文件

    我在多线程步骤中定义了以下 FlatFileItemWriter public FlatFileItemWriter
  • 如何以编程方式创建 Spring 上下文?

    有谁知道是否有任何方法可以以编程方式创建 bean 上下文 我希望能够做类似的事情 ConfigurableApplicationContext c new ConfigurableApplicationContext BeanDefini
  • org.springframework.security.oauth2.common.exceptions.InvalidGrantException:凭据错误

    我正在开发Spring Boot 授权服务器 OAuth 资源服务器 在这个例子中 我可以通过邮递员轻松查询spring microservices oauth 服务器并获取受保护的数据 我创建了客户端来访问邮递员正在执行的数据 但我遇到了
  • 使用 AuthenticationFailureHandler 在 Spring Security 中自定义身份验证失败响应

    目前 每当用户身份验证失败时 Spring Security 都会响应 error invalid grant error description Bad credentials 我想通过以下响应代码来增强此响应 responsecode
  • Autowired spring bean 不是代理

    我正在开发一个连接到 MySQL 数据库的非常小的应用程序 我正在尝试创建表记录 但收到 没有正在进行的事务 我已经准备好了所有正确的东西 服务接口 MyService 及其实现 MyServiceImpl 我已经用 Service 注释了
  • Spring Boot 中 application.properties 可用的属性列表?

    Spring Boot文档说我们可以在application properties文件中设置属性 但我找不到列出可以设置的可用属性的文档 我在哪里可以找到这样的文档 例如 我想为嵌入式servlet设置documentRoot 我发现set
  • Spring Boot 模板未解决

    我正在尝试使用 Spring Boot 和 Thymeleaf 构建一个独立的 Web 应用程序 该应用程序在 IntelliJ IDEA 中运行良好 但我无法单独运行该 jar 显然模板不包括在内 我的项目结构如下 src main ja
  • Grails - 如何对 addTo* 进行单元测试

    是否可以在 Grails 中对 addTo 函数进行单元测试 感谢您的帮助 文档第 9 1 节中说 http grails org doc latest guide 9 20Testing html 9 1 20Unit 20Testing
  • grails/mysql 时区更改

    完成更改应用程序时区的最佳方法是什么 在我看来 必须发生以下情况 服务器 TZ 已被系统管理员更改 mysql必须重新启动 数据库中每个基于时间的列都必须使用convert tz 或等效方法更新所有值 因此 要么必须编写一个 mysql 脚
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 使用 Spring / JPA 写入 Postgres 数据库的 JSON 列

    我有一个名为 test 的表 其中包含 Postgres 9 3 中 json 类型的列 sample column 我正在尝试使用 Spring JPA 将以下内容写入列中 name 更新的名称 我在其他帖子中读到 我需要添加自定义转换器
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样

随机推荐

  • C# 中的图像处理库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 从哪里可以获得 C Net 中的图像处理库 edit 在这里查看列表https github com quozd awesome dotn
  • 使用 ConcurrentHashMap 避免空指针异常

    我知道这个问题已被问过多次 但我没有找到该问题的正确答案 从 ConcurrentHashMap 获取结果时如何避免抛出 NullPointerException 我有下面的代码 它向我抛出一个空指针 public static Strin
  • Python C Api 将 PyObject * 传输到 c 数组中

    我使用 python c api 并希望从 python 返回一个数组 我从 python 端返回了一个 python 数组 并希望将 PyObject 结果传输到一个 c 数组中 以便我可以使用它 我能做到吗 附带问题 在什么情况下尝试返
  • Objective C 中 NSArray、NSDictionary 等类的可变和不可变版本背后的逻辑是什么?

    为什么 Objective C 中常见的集合类 如 NSString NSArray NSDictionary 等 有可变版本和不可变版本 分别定义它们背后的逻辑是什么 性能 内存管理还是其他什么 类的不可变版本之所以存在 是因为不可变对象
  • Ruby 访问哈希元素

    我有以下哈希 title gt ga browser Firefox dimensions gt browser gt Firefox metrics gt pageviews gt 25474 id gt http www google
  • navigator.language 所有语言的列表

    我在哪里可以看到语言及其代码列表 我想比较语言并在模板中自动选择所需的语言 它们跨浏览器相同吗 还有其他解决方案吗 出于复制和粘贴目的 af af NA af ZA agq agq CM ak ak GH am am ET ar ar 00
  • 如何在 gdb 上进行 grep 打印

    有没有办法在 gdb 中 grep 打印命令的输出 就我而言 我正在使用 gdb 调试核心转储 并且我正在调试的对象包含大量元素 我发现很难寻找匹配的属性 即 gdb print this grep
  • Java Collat​​or 与 MySQL 的 utf8_general_ci 排序规则具有相似的特性

    有没有Collator与MySQL的utf8 general ci具有相同特征的实现 我需要一个不区分大小写的整理器不区分德语元音变音如 与元音a 背景 我们最近遇到了一个错误 该错误是由表中的错误排序规则引起的 使用的排序规则是utf8
  • Xamarin 表单从可绑定属性更新视图模型字段

    我觉得我错过了一些非常明显的东西 我有一个自定义控件 它有一个视图模型 其中包含一堆字段 但此示例中最重要的是文本值 我可以使用自定义控件 XAML 中的以下内容非常轻松地绑定到它
  • 获取 Spotify 当前播放的曲目

    编辑 让我们尝试澄清这一切 我正在编写一个 python 脚本 我希望它告诉我 Spotify 当前正在播放的歌曲 我尝试寻找可以帮助我的库 但没有找到任何仍在维护和工作的库 我还浏览了 Spotify 的 Web API 但它没有提供任何
  • Rails + Cucumber/Capybara:如何在测试中设置/检索 cookie?

    我正在实现延迟登录功能 我的黄瓜功能应该描述它 Feature User log in Scenario Lazy login Given I didn t log out the last time I was on the site W
  • Qt 在信号/槽中使用 boost::shared_ptr

    是否可能 如果可以 如何在 Qt 中创建一个对共享指针常量引用的信号 槽 我想要一个如下所示的信号 void signal shared ptr
  • Python 电子邮件机器人 Pyzmail/IMAPclient 错误

    所以我正在编写一个Python脚本来从电子邮件中提取文本并遵循这些说明 https automatetheboringstuff com chapter16 这样做 这是迄今为止的脚本 import imapclient import pp
  • JavaScript - 获取浏览器支持的区域设置的完整列表

    我发现了支持的语言环境 https developer mozilla org en US docs Web JavaScript Reference Global Objects DateTimeFormat supportedLocal
  • 如何清除/删除 Knockout.js 中的可观察绑定?

    我正在将功能构建到用户可以多次执行的网页上 通过用户的操作 创建一个对象 模型并使用 ko applyBindings 将其应用于 HTML 数据绑定 HTML 是通过 jQuery 模板创建的 到目前为止 一切都很好 当我通过创建第二个对
  • C 中的临时对象

    在 C11 中 术语temporary lifetime被定义为 C11 6 2 4p8 结构体或联合体类型的非左值表达式 其中结构体或联合体包含数组类型的成员 递归地包括所有包含的结构体和联合体的成员 是指具有自动存储期限和临时生存期的对
  • 为什么 HTML 5 音频忽略移动设备音频设置(例如静音或音量)?

    我有一个针对移动 Android 用户的网站 我正在使用 HTML5 音频来播放背景音乐 即使设备处于静音状态也会播放音频 无论设备音量设置如何 音频都会以最高音量播放 有谁知道为什么会发生这些事情或如何获取设备当前的音频设置 我更喜欢客户
  • 在 Azure 服务总线命名空间上启用 CORS

    我想在 JavaScript 中使用 Azure 服务总线 REST API 不幸的是 我遇到了跨源问题 因为我的服务总线命名空间与我的站点不在同一域中 我知道您可以使用许多 Azure 服务启用 CORS 但我在 Azure 文档或其他地
  • 从 data.frame 中删除 NA 超过列长度 15% 的列 [重复]

    这个问题在这里已经有答案了 我有一个data frame10 个不同的列 每列的长度相同 我想消除任何具有 NA 大于柱长的 15 我首先需要制作一个函数来计算百分比NA对于每一列 然后再制作另一列data frame我在哪里应用该函数 最
  • 在 Spring MVC 中管理 HTML 资源(CSS、JS 文件)

    是否可以像grails resources那样在Spring MVC中管理HTML资源 与此类似 http www anyware co uk 2005 2011 09 12 optimising your application with