gpt4 book ai didi

spring-mvc - 如何使用 Spring MVC 和 Thymeleaf 实现 Dart?

转载 作者:行者123 更新时间:2023-12-03 13:19:59 27 4
gpt4 key购买 nike

我目前正在尝试实现 Dart 在使用 的现有项目中Spring MVC (4.0.0) 和 thymeleaf (2.1.1) 作为模板引擎。

目前我正在部署我所有的 Dart 资源到/dart如下图所示。

<link rel="import" th:href="@{/dart/wb-control-text.html}" />
<script type="application/dart" th:src="@{/dart/packages/polymer/init.dart}"></script>
<script th:src="@{/dart/packages/browser/dart.js}"></script>

thymeleaf 将 url 重写为 http://localhost:8080/context/dart/... , 哪个是正确的。

如果您直接打开带有 packages 的 HTML 文件,Dart 的效果非常好。文件夹正下方。但是,在我的项目中情况并非如此,它有 友情链接 喜欢 /action/users/browse并且您无法直接访问 HTML 文件。

Dart 库尝试导入包,我收到 404 错误,因为它在错误的位置寻找它(例如 /dart/packages/polymer/packages/polymer/polymer.dart )。

我是否需要提供一个 URL 请求处理程序或一个过滤器来处理所有 **/packages/**请求(并且只使用相对于当前 url 的路径)?或者在 Dart 中是否有一个选项可以设置它应该在哪里查找包?

对此的解决方案(或解决方法)是什么?

编辑

我目前有一个 临时解决方案有效,但它很脏,我仍在寻找更清洁的解决方案。

我将包添加到我的类路径中,并创建了一个 DartPackagesFilter流式传输资源:
public class DartPackagesFilter extends OncePerRequestFilter

@Override
protected void doFilterInternal(final HttpServletRequest request,
final HttpServletResponse response,
final FilterChain filterChain)
throws ServletException, IOException {
final String uri = request.getRequestURI();

final int index = uri.indexOf("/packages/");

if ( index != -1 ){
final String resourceName = uri.substring(index);
writeResourceToResponse(response, resourceName);
return;
}

filterChain.doFilter(request, response);
}

private void writeResourceToResponse(final HttpServletResponse response, final String resourceName) throws IOException {
final ClassPathResource resource = new ClassPathResource(resourceName);

response.setContentType(resolveContentType(resourceName));

ChannelUtils.stream(resource.getInputStream(), response.getOutputStream());
}

private String resolveContentType(final String resourceName){
if ( resourceName.endsWith("dart") ){
return "application/dart";

} else if ( resourceName.endsWith("js")){
return "text/javascript";
}

throw new IllegalArgumentException("Resource must be a Dart or Javascript file!");
}
}

在 web.xml 中:
<filter-mapping>
<filter-name>DartPackagesFilter</filter-name>
<url-pattern>*.dart</url-pattern>
<url-pattern>*.js</url-pattern>
</filter-mapping>

在我的 HTML 文件中,我指的是相对于当前 URL 的包:
<script src="packages/browser/dart.js"></script>

最佳答案

您需要单独处理/packages/请求,就像您的解决方法一样。但是,只有在使用实际的 .dart 文件时,才需要这些 hack 来进行开发。

部署应用程序时,您将使用 dart2js , dart2dart或者,最有可能的,两者都有。这些工具生成一个不依赖于外部包目录的整体脚本文件。

由于您只需要/packages/目录进行开发,因此可以通过 Dartium 中的标志设置包 URL。然而,根据我的经验,这是一个尴尬的解决方案,因为该标志适用于所有 Dart 应用程序——所有 Dart 应用程序都需要通过相同的 URL 方案获取包。这也使得与其他 Dartium 安装共享您的应用程序变得困难。

关于spring-mvc - 如何使用 Spring MVC 和 Thymeleaf 实现 Dart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075670/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com