【问题标题】:React.js server side rendering with Java [without Node.js]React.js 服务器端渲染与 Java [无 Node.js]
【发布时间】:2016-09-09 05:55:09
【问题描述】:

我们有一个纯 JSP/JQuery 应用程序,我们正试图将其迁移到 ReactJs 以实现可维护性。我看到的 ReactJs 的好处之一是服务器端渲染。但是,我看到的所有服务器端渲染示例都使用 Node.js 作为服务器端。我们目前使用的是 Tomcat,并不太倾向于部署 node.js 仅用于服务器端渲染。

我考虑过一些替代方案,例如使用 Nashorn (http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/)

但是,Nashorn 似乎还没有准备好生产。

有没有人在生产环境中在 Tomcat 上部署了带有服务器端渲染的 React.js?

【问题讨论】:

  • Nashrom 已与 Java 8 一起发布,因此我希望 Oracle 认为它已准备好用于生产。请参阅 augustl.com/blog/2014/jdk8_react_rendering_on_server 以使用 Java 呈现 React 应用服务器端。
  • 为什么你认为在服务器上运行 react 比 JSP 更易于维护?
  • 为什么要用 React 而不是 JSP 在服务器上渲染它?

标签: java node.js tomcat reactjs


【解决方案1】:

为什么不在服务器端渲染方面更进一步,在没有 Node.js 的普通 Java 语言中以响应式风格制作实时单页 Web 应用程序?

Reactive Server Pages 项目使用类似于 Elixir Phoenix Live View 或 Scala Korolev 框架的方法。

动机:

  • 熟悉 Java 的响应式 Web UI,没有客户端-服务器 API,没有 JS 需要框架和 npm 依赖管理;
  • 轻量级 SSR 生成几乎纯 HTML 页面以对 SEO 友好;
  • UI 组件是常规的 Java 类;
  • 将应用程序渲染工作负载和 UI 逻辑从客户端浏览器带到 服务器,您的代码始终保留在您的服务器上;
  • 像任何普通 Java 代码一样调试 UI 代码;
  • 使用 Java Web 标准构建,目前在 Jetty 上运行,但在 理论上,应该也可以在 Tomcat 上运行。

【讨论】:

    【解决方案2】:

    尝试在没有 NodeJS 的情况下渲染 Javascript 应用程序服务器端是一种折磨自己的好方法。尝试在 jvm 中运行 javascript 更糟糕。我建议不要这样做。

    可以使用 PhantomJS(在技术上无需 Node 即可运行)或什至在 *nix 上使用 xvfb 和 Chrome 来呈现完整的客户端服务器端。一切都已经完成,经过了不同程度的痛苦调试。

    运行 javascript inside tomcat 本身是相当不寻常的......除了“因为我们可以”之外,我看不出重点。我最好的猜测是在生产中没有人这样做。

    【讨论】:

    • 我大部分同意,但是 .NET 有一个用于 reactjs 的服务器端渲染框架。因此,我认为您不一定需要在 JVM 中运行 javascript 来完成此操作。 JSX 本质上是 JS+XML,所以你可以预渲染模板而不会有太多痛苦。我认为不需要通过解释 JS 服务端来完成某种程度的服务端渲染。
    • 没有人公开记录从 Java 渲染 React 组件并不意味着它很难或折磨。真的,在 Java 中运行 JavaScript 并不难、不复杂或不寻常。早在 JavaScript 在服务器端流行之前,这就是标准 JRE 的一部分。几年前,我们在生产环境中的 Java 应用程序中使用了嵌入 JavaScript(当时,我们使用的是旧的 Rhino 引擎)。
    • @PierreBuyle 我在回答中使用了夸张的说法(也许我应该将其编辑掉),但是当我尝试使用它来模拟浏览器应用程序时,我对 Rhino 的体验并不是很积极。也许你比我更聪明或更幸运,但你可能同意这不是阻力最小的道路。
    • 在非浏览器运行时运行浏览器应用程序确实很痛苦。通常,服务器端 React 不是通过运行完整的浏览器应用程序来完成的。而是在使用服务器端代码加载所需数据后渲染适当的 React 组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2015-03-10
    • 2016-04-06
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多