大家都清楚,语言是需要执行环境的。js运行在前端浏览器,由js解释引擎,java运行在jvm中。最近在项目中遇到需要前端和后台都能执行的需求。在前端执行是为了节约服务器资源和提前验证脚本是否正确。在后端执行是用于定时作业。两边的脚本是同一个。即我要在不修改脚本的情况让脚本在JS和JAVA里面都能运行。
我选择的JavaScript,在前端执行很简单,问题是在服务器端,在网上找了找发现JDK自带了运行JS的环境。ScriptEngineManager这个类可以获取到JS的引擎。
现在的问题是怎么把JAVA对象传入到JS脚本中使用,虽然引擎提供了import功能。如下:engine.eval("importPackage(java.util)");这里有个矛盾就是前端不支持JAVA对象。所以我的脚本中不能出现JAVA对象,因为JAVA对象和获取值的方式和JS不一样。比如
在js中:var data={name:'rain',age:28};我要获取name可以通过data.name获取。
如果在java中Map<String,String> data=new HashMap<String,String>();data.put("name","rain");我也用data.name是会抛异常中。为了做到统一。所以我要做的全部使用JS支持的语法。把java对象转成JS对象。
转法很简单,先序列化JSON字符串传入engine,然后在engine中eval()把json字符串转成JS对象。这样就可以调用了。看代码吧。
先看看前端的JS代码效果:
<script> var params={name:'rain',age:'28'}; eval("var result=params.name;"); alert(result)//弹出的是rain </script>
在看看JAVA端没有转换时的结果:
@Test public void test_params_error(){ ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js");// ScriptEngine用来处理脚本解释和求值 try{ Bindings bindings = engine.createBindings(); Map<String,String> params=new HashMap<String,String>(); params.put("name", "rain"); params.put("age", "28"); bindings.put("params", params); engine.eval("var result=params.name;",bindings); System.out.println(bindings.get("result"));//输出的是:sun.org.mozilla.javascript.internal.Undefined@4f1d0d }catch(Exception e){ e.printStackTrace(); } }
最后看看转换后的效果:
@Test public void test_params_ok(){ ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js");// ScriptEngine用来处理脚本解释和求值 try{ Bindings bindings = engine.createBindings(); Map<String,String> params=new HashMap<String,String>(); params.put("name", "rain"); params.put("age", "28"); //序列化成json bindings.put("paramsStr", SerializableTool.serialize(params)); engine.eval("var params=eval('('+paramsStr+')')",bindings); engine.eval("var result=params.name;",bindings); System.out.println(bindings.get("result"));//输出的是:rain }catch(Exception e){ e.printStackTrace(); } }
这样就实现的一段脚本,在前端和后台都能运行。
相关推荐
基于QT与Socket套接字的邮件系统实现 主要实现前端界面,后端数据库,以及Csocket套接字实现通信。 软件架构 运行环境:Windows10 + QT 前端: Qt项目工程,呈现界面,负责处理与分发用户请求,绑定监听端口。 ...
前端有Android开发的,后端有Java web开发的,数据库用的mysql,系统完整,学长之前找人订做的毕业设计,可供参考学习使用。如有配置或者运行问题可私信博主,博主看到会回。
基于JavaScript和Vue开发的前后端分离的高校运动会管理系统源码()前端Vue+后端Node.js).zip 【项目说明】 高校运动会管理系统的设计与实现 sportssystem:前端Vue代码 ...项目都经过严格调试,确保可以运行!
1、采用Java语言开发,集成SpringBoot,Redis、Mybatis,SpringEvent、Maven,项目 2、包含前端、后端源码,数据库设计、SQL脚本,抽奖算法如果没有实现思路,这是一个很好的入门案例。
JavaScript:用于在网页上实现交互性和动态效果的脚本语言。 React:一个流行的JavaScript库,用于构建用户界面。 Angular:一个用于构建Web应用的前端框架。 Vue.js:一个渐进式JavaScript框架,用于构建交互式界面...
ExtJs属于比较重的前端框架,基于当下流行的几种前端框架,选择了Vue + ElementUI重新实现了一个后台管理系统前端 权限管理选用了Shiro 权限管理框架,并且对权限进行了细粒度的设计,控制到按钮。 2. 后端技术栈...
适用于Python脚本执行的Python Flask网站 使用python中的Flask库,单击按钮即可创建网站并执行脚本。 如果您要使用python进行网站创建并在使用http链接的按钮单击上执行python代码,请使用此选项。 使用Flask使其...
所用技术:Django + Vue + 支付宝接口 内容包括:数据库设计、使用Resful API、登录认证、支付宝支付。包括前端脚本和后端脚本,代码可以直接运行。
基于QT与Socket套接字的邮件系统实现 主要实现前端界面,后端数据库,以及Csocket套接字实现通信。运行环境:Windows10 + QT 前端: Qt项目工程,呈现界面,负责处理与分发用户请求,绑定监听端口。 通信设计:...
基于QT与Socket套接字的邮件系统实现 主要实现前端界面,后端数据库,以及Csocket套接字实现通信。 软件架构 运行环境:Windows10 + QT 前端: Qt项目工程,呈现界面,负责处理与分发用户请求,绑定监听端口。 ...
用于前端和后端的最小 JavaScript 测试框架。目标易于测试。 易于扩展。 处理同步/异步测试。 将测试分组到套件中。 启用嵌套测试套件。 可跳过的测试/套件。 有条件地跳过测试(例如,如果网络不可用)。 “Todo”...
农场驿站平台在系统的安卓手机上可以运行,主要实现了管理员后端;首页、个人中心、农场资讯管理、用户管理、卖家管理、用户分享管理、分享类型管理、商品信息管理、系统管理、订单管理,卖家前端;首页、农场资讯、...
项目都经过严格调试,确保可以运行! 二、技术实现 数据库:mysql5.7 后端框架: SpringBoot HTML模板: ThymeLeaf 持久层: Mybatis UI: Bootstrap 登录验证和用户权限: SpringSecurity 三、系统划分与功能 系统包含两...
功能完整,可运行 启动文档、数据库脚本、启动脚本等说明文档齐全 可以学习借鉴,可以二次开发
在项目目录中,可以运行: npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误。 npm test 在交互式监视模式下启动测试运行器...
项目都经过严格调试,确保可以运行! 技术实现 后台框架:SpringBoot 数据库:MySQL 开发环境:JDK、IDEA、Tomcat 基于springboot的在线小说阅读管理系统功能完善、界面美观、操作简单、功能齐全、管理便捷,...
毕设&课设&项目&实训-基于STM32的Lua脚本运行器,目前还在做裸机调试。下一步是移植FreeRTOS操作系统和Lua解释器 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件...
日语词汇学习小程序客户端要求在系统的安卓上可以运行,主要实现了词汇单词和签到打卡信息等相关信息的查看,并且根据需求进行对管理员后端;首页、个人中心、用户管理、词汇单词、签到打卡、试卷管理、试题管理、...
毕设源代码部分,提供了系统的完整代码实现,包括前端页面、后端接口、数据库脚本等。代码结构清晰、逻辑严谨,易于阅读和理解。同时,代码中包含了大量的注释和文档,方便读者快速上手并进行二次开发定制。
前端使用 Layui 框架搭建前端 的具体渲染样式,同时采用诸如 Jquery 和 Ajax 等库或技术实现前端的数据处理, 后端则采用 SSM 框架,以 SpringMVC、Spring、Mybatis 组合成的框架构建整一个 后端系统,最后采用 ...