java解析javascript方法,scriptengine初体验,实现后台调用js方法验证。

第一次用java解析js文件,实现后台调用前台方法实现验证

1.js文件(放在src下)

//此处定义一个空的alert方法,否则解析下面checkRate(name)方法会报错没有定义alert(),只有这个用途;
function alert() {
}
//根据名字取标签的值
function getVal(name) {
    return document.getElementsByName(name)[0].value;
}
//验证邮箱格式是否合法
function checkRate(name) {
    var re =/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
    var nubmer =getVal(name);
    if (!re.test(nubmer)) {
        alert("请输入正确格式的邮件地址");
        // document.getElementById("email").value = "";
        return false;
    }
    return true;
}

2.jsp页面

<html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        function validateForm() {
            alert(checkRate("email"));
        }



    </script>
</head>
<body>
邮箱:<input type="text" name="email" id="email" οnblur="checkRate('email')"><br>
<input type="button" value="validate" οnclick="validateForm()"/>

</body>
</html>

当点击button时验证输入是否合法

3.java代码

package com.test;

import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 * Created by gaoziang on 2017/8/28.
 */
public class FunctionTest {
    public static void main(String[] args) throws Exception{
 
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");
        String jsFileName = "src/JavaScript";
        // 读取js文件
        FileReader reader = new FileReader("src/validate.js");
        // 执行指定脚本
        engine.eval(reader);
//此处的email是定义在主函数里的,正常应从表单提交里接收到email文本框的值并赋值给email
        String email="907273324@qq.com";
/此处重新定义一个getVal方法,这样在js里的checkRate方法就会调用下面的新的getVal方法,实现了避开document对象,如果不重写就会提示document没定义,外部js没法单独用document。
        engine.eval("function getVal(name) {var json = {'name':"+"'"+email+"'"+"};return json[name];}");
        if(engine instanceof Invocable) {
            Invocable invoke = (Invocable)engine;
            Boolean boo=(boolean)invoke.invokeFunction("checkRate","name");
            System.out.println("boo="+boo);


        }
        reader.close();
    }
}


此时输出的就应该是 true ;


总结:
    主要的一点就是重新写一个getVal方法,在jsp解析js时用js文件中的getVal通过document获得值进行邮箱正则表达式校验。
    
    而在后台解析js时用新写的getVal方法,把通过表单提交的email值(我是模拟的)传到checkRate方法中,进行正则表达式的校验。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值