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页面



    Title
    


邮箱:

当点击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="[email protected]";
/此处重新定义一个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方法中,进行正则表达式的校验。



你可能感兴趣的:(java解析javascript方法,scriptengine初体验,实现后台调用js方法验证。)