数据怎样在java 和javascript之间传输 比如java如何得到javascript的变量对象值

数据怎样在java 和javascript之间传输 比如java如何得到javascript的变量对象值,第1张

理论上java获得所有请求都是通过servlet,但是现在很多框架进行了封装,建议使用框架,可以轻松的实现,比如DWR就可以用js在页面调用java代码,还能传递参数,获得返回值,原理就是它对ajax异步请求做了相应的封装。

js获得java的代码可以直接通过<%=%>这种方式获取。

DWR原理介绍:

dwr框架是服务器端的ajax框架,那么最基础的还是XML>

其实网上有很多方法

/ 加载脚本引擎,并在java中调用js方法 /

public void test2(){

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = managergetEngineByName("javascript");

try {

String str="2&1";

Double d = (Double) engineeval(str);

Integer i=dintValue();

Systemoutprintln(i);

} catch (ScriptException ex) {

exprintStackTrace();

} }

/

在java中调用js,jdk16中有加载js引擎类,然后由它来调用js方法。

并通过JDK平台给script的方法中的形参赋值

/

public void test(String name)

{

ScriptEngineManager sem = new ScriptEngineManager();

/semgetEngineByExtension(String extension)参数为js

semgetEngineByMimeType(String mimeType) 参数为application/javascript 或者text/javascript

semgetEngineByName(String shortName)参数为js或javascript或JavaScript

/

ScriptEngine se = semgetEngineByName("js");

try

{

String script = "function say(){ return 'hello,'"+name+"; }";

seeval(script);

Invocable inv2 = (Invocable) se;

String res=(String)inv2invokeFunction("say",name);

Systemoutprintln(res);

}

catch(Exception e)

{

eprintStackTrace();

}

}

/ 演示如何将java中对象作为js中全局变量,同时演示将file类赋给脚本语言,并获得其属性。

/

public void testScriptVariables()

{

ScriptEngineManager sem=new ScriptEngineManager();

ScriptEngine engine=semgetEngineByName("js");

File file=new File("c:\\1txt");

engineput("f", file);

try {

engineeval("println('path:'+fgetPath())");//无法使用alert方法

} catch (ScriptException e) {

eprintStackTrace();

}

}

/

演示如何在java中如何通过线程来启动一个js方法

/

public void testScriptInterface() throws ScriptException

{

ScriptEngineManager sem=new ScriptEngineManager();

ScriptEngine engine=semgetEngineByName("js");

String script="var obj=new Object();objrun=function(){println('test thread')}";

engineeval(script);

Object obj=engineget("obj");//获取js中对象

Invocable inv=(Invocable)engine;

Runnable r=invgetInterface(obj,Runnableclass);

Thread t=new Thread(r);

tstart();

}

jsp获取地址栏上的参数有如下几种办法:

1、使用jsp小脚本实现

<%

String value=requestgetParameter("key");

%>

即可取出地址栏传递的key所代表的值

2、使用EL表达式实现

<h2>${paramkey}</h2>

也可以取出地址栏传递的key所代表的值

3、使用javascript实现

<script type="text/javascript">

function GetQueryString(name)

{

var reg = new RegExp("(^|&)"+ name +"=([^&])(&|$)");

var r = windowlocationsearchsubstr(1)match(reg);

if(r!=null)return unescape(r[2]); return null;

}

var myurl=GetQueryString("key");

</script>

也可以取出地址栏传递的key所代表的值

4、jQuery扩展方法实现

jquery扩展了一个getUrlParam()方法

<script type="text/javascript" src="js/jquery183minjs"></script>

<script type="text/javascript">

$(function($){

$getUrlParam = function(name)

{

var reg = new RegExp("(^|&)"+name +"=([^&])(&|$)");

var r= windowlocationsearchsubstr(1)match(reg);

if (r!=null) return unescape(r[2]); return null;

}

});

$getUrlParam('key');也可以取出地址栏传递的key所代表的值

</script>

思路:

通过页面提交或者ajax等方式把页面参数传入到java中。

代码示例:

<select name="test" name="test" onchange="test1($(this)val())">

    <option value="1">test</option>

</select>

<div id="display"></div>

function test1(val)

{

    $ajax({

        url:"新建的服务器的URL地址,比如servlet",

       data:{selectValue:val},//这把val值传入到后台java,后台可以通过requestgetParameter("selectValue")获取到val值

       dataType:"json",   //如果JSP里输出的数据格式为json的话,这里就必须要写了,如果不是,这里可以省去

       type:"GET",

       beforeSend:function(){},

       success:function(data){

            $("#display")html(data);  //如果返回格式为文本格式的话,直接这样就可以,如果是JSON的话,就看你输出的是什么数据了

       }

    });

}

页面中的java代码无法获得js中的变量,因为在页面渲染的时候,首先执行的是java代码,编译完成后生成html页面反馈给用户。这时页面只剩下js代码和html代码了。

详细参考jsp的编译过程:>

以上就是关于数据怎样在java 和javascript之间传输 比如java如何得到javascript的变量对象值全部的内容,包括:数据怎样在java 和javascript之间传输 比如java如何得到javascript的变量对象值、java 如何得到javascript 方法的返回值 我给本地的一个html文件中的javascript方法中传入一个参数,、java调用请求页面js方法有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9307418.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存