基于JVM使用React.js和Spring Boot建立同构的Web应用

这是一个展示如何使用Java的Spring Boot实现预渲染前端MVC(MVC-frontend)的同构Web应用开源项目:winterbe/spring-react-example · GitHub

所谓同构Isomorphic应用是指Javacript在客户端和服务器端同时运行,后端和前端同享相同的代码。

传统Web应用是在服务器端产生HTML,然后发往客户端,后来这被客户端MVC改变如 Angular.js, Backbone.js or Ember.,但是在客户端产生HTML视图有优点和缺点,同构webapp试图克服其缺点,方式是通过在服务器端和客户端使用相同的技术同时产生视图来实现。

React.js是一个可程序化产生视图的Javascript库包,React是一种对传统MVC替代的Flux模式,它的组件能在服务器端和客户端实现渲染。

所以,这种同构架构一般需要前后端都是统一的Javascript环境,后端一般使用Node.js,但是本开源项目后端使用Java,通过Nashorn这个JVM的Javascript引擎在后端运行React的服务器端代码。

这种方式可能有性能损失,从严格概念上讲,不是真正的同构,但是考虑到后端大量的Java投入,这个设计不失为衔接传统遗留系统与现代潮流系统的折中方式,不过,千万要记住计算机科学的一条原则:

All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.
在计算机科学中所有问题都可以通过引入另外一个间接层来解决,除了因为间接层太多带来的新问题。