
理论上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方法有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)