从JavaScript读取JSP变量

时间:2011-01-26 11:14:15

标签: java javascript jsp

如何从JavaScript读取/访问JSP变量?

7 个答案:

答案 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)

据我所知,这是最干净的方式:

  1. 将您的JSP变量添加到HTML元素的data- * attribute
  2. 然后在需要时通过Javascript读取此值
  3. 我对此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>

注意:这并没有考虑到关注点的分离,但如果您只是在寻找一个简单快捷的解决方案,这可能会奏效。

另外,如果您认为这种方法有任何风险,请告诉我。