如何从JavaScript读取/访问JSP变量?
答案 0 :(得分:76)
alert("${variable}");
或
alert("<%=var%>");
或完整示例
<html>
<head>
<script language="javascript">
function access(){
<% String str="Hello World"; %>
var s="<%=str%>";
alert(s);
}
</script>
</head>
<body onload="access()">
</body>
</html>
注意:在渲染之前清理输入,它可能会打开很多XSS的可能性
答案 1 :(得分:22)
据我所知,这是最干净的方式:
我对此SO页面上当前解决方案的看法:在实际的javascript代码中使用java scriplet“直接”读取JSP值可能是您可以做的最恶心的事情。让我想要呕吐。哈哈。说真的,尽量不这样做。
没有JSP的HTML部分:
<body data-customvalueone="1st Interpreted Jsp Value" data-customvaluetwo="another Interpreted Jsp Value">
Here is your regular page main content
</body>
使用JSP时的HTML部分:
<body data-customvalueone="${beanName.attrName}" data-customvaluetwo="${beanName.scndAttrName}">
Here is your regular page main content
</body>
javascript部分(为简单起见使用jQuery):
<script type="text/JavaScript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script>
<script type="text/javascript">
jQuery(function(){
var valuePassedFromJSP = $("body").attr("data-customvalueone");
var anotherValuePassedFromJSP = $("body").attr("data-customvaluetwo");
alert(valuePassedFromJSP + " and " + anotherValuePassedFromJSP + " are the values passed from your JSP page");
});
</script>
这是jsFiddle在行动http://jsfiddle.net/6wEYw/2/
中看到这一点<强>资源:强>
答案 2 :(得分:12)
假设您正在讨论HTML文档中的JavaScript。
你不能直接这样做,因为就JSP而言,它是输出文本,就页面而言,它只是获取一个HTML文档。
你必须生成JavaScript代码来实例化变量,注意在JS中转义任何具有特殊含义的字符。如果您只是转储数据(正如其他一些答案所建议的那样),当数据包含新行,引用字符等时,您会发现它会丢失。
最简单的方法是使用JSON库(http://json.org/底部列出一堆)然后输出JSP:
<script type="text/javascript">
var myObject = <%= the string output by the JSON library %>;
</script>
这将为您提供一个可以访问的对象:
myObject.someProperty
JS中的。
答案 3 :(得分:6)
<% String s="Hi"; %>
var v ="<%=s%>";
答案 4 :(得分:0)
首先,java脚本是客户端脚本语言,而jsp是您无法访问的服务器端语言,在服务器端处理客户端语言的任何变量而不向服务器发送请求 只有在服务器收到请求后,您才能访问客户端语言变量 所以只有办法通过请求
另一件事是&#34;如何将这些变量发送到服务器&#34; 有两种选择...... 要么使用隐藏字段 或者js的用户window.location对象......
`window.location.replace("home.jsp?nm="+v);`
`<%String name=request.getParameter("nm");%>`
window.location.href("home.jsp?nm="+v);
<%String name=request.getParameter("v");%>
然后您就可以在jsp上访问客户端数据
答案 5 :(得分:0)
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js">
<title>JSP Page</title>
<script>
$(document).ready(function(){
<% String name = "phuongmychi.github.io" ;%> // jsp vari
var name = "<%=name %>" // call var to js
$("#id").html(name); //output to html
});
</script>
</head>
<body>
<h1 id='id'>!</h1>
</body>
答案 6 :(得分:0)
我知道这是一篇较旧的帖子,但我有一个更简洁的解决方案,我认为它可以解决 XSS 问题并保持简单:
<script>
let myJSVariable = <%= "`" + myJavaVariable.replace("`", "\\`") + "`" %>;
</script>
这利用了 JS 模板字符串的转义功能,并通过转义 Java 中值中包含的任何反引号来防止字符串被执行。
您可以轻松地将其抽象为一个实用方法以供重用:
public static String escapeStringToJS(String value) {
if (value == null) return "``";
return "`" + value.replace("`", "\\`") + "`";
}
然后在 JSP JS 块中:
<script>
let myJSVariable = <%= Util.escapeStringToJS(myJavaVariable) %>;
</script>
结果:
<script>
let myJSVariable = `~\`!@#$%^&*()-_=+'"|]{[?/>.,<:;`;
</script>
注意:这并没有考虑到关注点的分离,但如果您只是在寻找一个简单快捷的解决方案,这可能会奏效。
另外,如果您认为这种方法有任何风险,请告诉我。