播放框架:如何用静态 js 和 css 渲染静态 HTML 页面?

Posted

技术标签:

【中文标题】播放框架:如何用静态 js 和 css 渲染静态 HTML 页面?【英文标题】:Play framework: how to render static HTML pages with static js and css? 【发布时间】:2018-11-26 06:03:54 【问题描述】:

我正在尝试找出一种方法来呈现或路由到托管在 Play 的公共文件夹中的一些静态 Web 应用程序。我的项目结构如下:

myapp
  + app
  + conf
  + modules
  + public
      |   + webapp1
      |        + css
      |        + images
      |        + index.html
      |   + webapp2
      |        + css
      |        + images
      |        + index.html
  + ...

我想渲染 webapp1 和 webapp2。每个 web 应用中的 index.html 将使用每个 web 应用中 css 文件夹中的 css 文件。

我尝试使用这样的路由并在控制器中使用重定向来呈现静态 html 页面:

Redirect("/webapp1/").withCookies(Cookie("token", "")).bakeCookies()
Redirect("/webapp2/").withCookies(Cookie("token", "")).bakeCookies()
GET  /webapp1/  controllers.Assets.at(path="/public/webapp1", file="index.html")
GET  /webapp1/*file   controllers.Assets.at(path="/public/webapp1", file)
GET  /webapp2/  controllers.Assets.at(path="/public/webapp2", file="index.html")
GET  /webapp2/*file   controllers.Assets.at(path="/public/webapp2", file)

index.html 将被正确路由和呈现。但是,文件夹中的 css 和图像未正确加载。 index.html 使用相对路径加载它们。然后以某种方式在 localhost/css/css1 等顶层加载 css 和图像,而不是 localhost/webapp1/css/css1。

建议将不胜感激。

比尔

【问题讨论】:

【参考方案1】:

尝试使用下面的路由来加载 css 和 javascript

用于加载 CSS:

/css/*file controllers.Assets.at(path="/public/css", file)

用于加载 Java 脚本:

/javascript/*file controllers.Assets.at(path="/public/css", file)

【讨论】:

【参考方案2】:

对于面临类似情况的人来说,让多个网络应用在 Play 中运行的最佳方法是在静态资源的相对路径中添加一个路径。

例如,在 webapp1 的 index.html 中,不是将 css 加载为 <link href="/static/css/hash.chunk.css" rel="stylesheet">,而是将 css 加载为 <link href="/webapp1/static/css/hash.chunk.css" rel="stylesheet">

然后在播放路由文件中,你可以像这样配置 GET /webapp1/*file controllers.Assets.at(path="/public/webapp1_folder", file).

这样就可以了。

【讨论】:

以上是关于播放框架:如何用静态 js 和 css 渲染静态 HTML 页面?的主要内容,如果未能解决你的问题,请参考以下文章

如何用phpcms将静态网页生成动态网页?

如何用powermockrunner覆盖循环

静态网页中如何用js实现搜索功能?

了解与学习 Next.js

了解与学习 Next.js

构建多页面应用——静态资源的处理