`

实现在前端后端都能运行的脚本

 
阅读更多

大家都清楚,语言是需要执行环境的。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();
		}
	}

 这样就实现的一段脚本,在前端和后台都能运行。

2
0
分享到:
评论

相关推荐

    前端ocr.js 识别图片器,简单有效,不用后端实现,前端直接实现

    标题提到的"前端ocr.js 识别图片器"是一个专为前端开发者设计的轻量级OCR解决方案,它允许在浏览器环境中直接处理图像中的文字识别,无需依赖后端服务,简化了开发流程。 这个OCR工具包基于JavaScript编程语言,...

    志汇门店会员卡小程序(前端后端)

    "志汇门店会员卡小程序(前端后端)"是一个综合性的项目,主要涵盖了微信小程序的开发,涉及到前端用户界面和后端服务器的交互。在这个项目中,开发者需要具备扎实的前端技术,如JavaScript(基础语言)、WXML(微信...

    前端后端的一些资源文档

    这个压缩包“前端后端的一些资源文档”包含了与这两个领域相关的多个技术及其资源。让我们深入探讨这些技术及其重要性。 1. **Ajax(Asynchronous JavaScript and XML)**:Ajax是一种在无需重新加载整个网页的情况...

    小说完整源码(含小程序前端后端源码数据库)

    该资源包包含的是一个完整的网络小说平台的源代码,涵盖了小程序的前端、后端以及数据库相关的文件。这个项目对于想要学习或开发类似应用的IT从业者来说,是一个宝贵的实践材料。 首先,我们要关注的是"前端"部分。...

    商业版E4A原生态影视APP前端+后端源码

    【标题】"商业版E4A原生态影视APP前端+后端源码"涉及的核心技术主要围绕移动应用开发...这些知识点的掌握将有助于开发者全面理解并运行、修改这个商业版E4A影视APP,无论是对于个人学习还是商业部署都是非常有价值的。

    前端后端连接复习新手代码安装包

    同时,安全性问题也不能忽视,例如防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。 总的来说,这个安装包为初学者提供了一个全面了解和实践前端后端连接的平台。通过学习和运行其中的代码,新入行的开发者可以...

    全新借贷APP系统源码 独立uni前端 java后端 全开源.zip

    在借贷APP中,uni前端可能包括用户界面的设计、交互逻辑的实现以及与后端的数据通信等功能。uni-app的强大组件库和丰富的API让开发者能轻松创建出美观且用户体验良好的界面,同时提供了丰富的动画效果和页面路由管理...

    开源商城代码,前端后端小程序

    此外,为了适应不同设备的屏幕尺寸,前端代码需要遵循响应式设计原则,确保在手机、平板和桌面电脑上都能良好运行。 后端部分是系统的“大脑”,处理业务逻辑、数据存储和接口通信。常见的后端技术栈包括Node.js...

    【毕业设计】基于Java+vue的车辆信息管理凭条【前端+后端源码+SQL脚本】.zip

    这是一个基于Java和Vue技术栈的毕业设计项目,主要实现了车辆信息管理平台的开发,包括前端用户界面和后端服务器逻辑。项目的核心功能集中在车联信息的录入、车辆信息的管理和故障码的处理上,旨在提供一个高效、...

    近期前端后端的一些笔记保存下

    4. 响应式设计:随着移动设备的普及,前端开发者需要确保网站在不同屏幕尺寸上都能正常工作。这需要掌握媒体查询和流式布局等技巧。 5. 框架和库:React、Vue.js和Angular是目前最流行的JavaScript框架,它们提供了...

    游轮中心平台_前端后端_java前后端交互.zip

    以上是针对“游轮中心平台_前端后端_java前后端交互.zip”项目中可能涉及的主要知识点,这些技术栈和实践方法共同构建了一个完整的、高效的游轮中心平台。在实际开发过程中,团队还需要根据具体需求和业务场景进行...

    前端后端+跨域请求+java/js

    总的来说,前端后端通信中的跨域问题可以通过CORS、JSONP等方式解决,理解并掌握这些技术对于构建高效的Web应用至关重要。在实际项目中,应根据需求选择合适的方法,并注意安全性和性能的优化。

    酒店系统管理(前端vue.js框架+后端springboot+mybaits)

    本文将深入探讨一套基于Vue.js前端框架、SpringBoot后端框架以及MyBatis持久层技术构建的酒店管理系统,帮助读者理解如何实现前后端分离,以及这一架构的优势。 首先,让我们关注前端部分。Vue.js是一个轻量级、高...

    C++基于QT与Socket套接字实现的邮件系统源代码,主要实现前端界面,后端数据库,以及Csocket套接字实现通信

    基于QT与Socket套接字的邮件系统实现 主要实现前端界面,后端数据库,以及Csocket套接字实现通信。 软件架构 运行环境:Windows10 + QT 前端: Qt项目工程,呈现界面,负责处理与分发用户请求,绑定监听端口。 ...

    RSA前端加密后端解密.rar

    JavaScript是一种运行在浏览器端的脚本语言,它可以方便地与用户交互并处理表单数据。前端加密的主要目的是保护用户的敏感信息,如密码或个人信息,不被中间人攻击。使用RSA,前端可以将用户信息转化为密文,然后...

    java记账管理系统基于vue前端,后端springboot(含数据库脚本).rar

    本文将深入探讨一个基于Vue前端和SpringBoot后端的Java记账管理系统,通过解析项目中的关键组件和实现原理,帮助读者理解如何构建这样的系统。 首先,让我们关注系统的核心组成部分——前端。Vue.js,作为一款轻量...

    nodejs简单搭建前端后端网站demo

    本教程将通过一个简单的Node.js项目——"nodejs简单搭建前端后端网站demo",来讲解如何利用Node.js创建一个基本的前后端交互的Web应用。 一、准备工作 在开始之前,确保已经安装了Node.js和npm(Node包管理器)。这...

    脚本包含了对前端和后端项目的部署

    在这种架构下,前端负责用户界面与交互逻辑,而后端则专注于业务逻辑和数据处理。为了确保系统的稳定运行,我们需要设计一套合理的部署方案。以下是对给定脚本中涉及的前后端部署流程的详细解析: 1. **定义项目...

    数字IC前端到数字IC后端的synopsysEDA自动化流程脚本

    这个“数字IC前端到数字IC后端的Synopsys EDA自动化流程脚本”旨在简化和优化整个设计流程,确保高效和精确的设计实现。 前端设计通常包括逻辑综合(Synthesis)、时序分析(Timing Analysis)和功耗估算等步骤。在...

    外卖搭伴拼团php后端_前端后端.zip

    【标题解析】:“外卖搭伴拼团php后端”这个标题揭示了这是一个关于构建外卖拼团功能的项目,使用的编程语言...在实际项目中,开发者还需要考虑用户体验、系统扩展性、可维护性等因素,确保系统的稳定运行和持续优化。

Global site tag (gtag.js) - Google Analytics