【问题标题】:Using Javascript can you get the value from a session attribute set by servlet in the HTML page使用 Javascript 可以从 HTML 页面中的 servlet 设置的会话属性中获取值吗
【发布时间】:2026-01-24 21:55:01
【问题描述】:

我有一个使用重定向转发到 HTML 页面的 servlet。因为我在html页面上使用ajax和php来做其他功能。可以转成jsp。有没有办法我可以在会话属性中的 servlet 中获取名称 -“poNumber”。我要得到它并展示它的价值。

我是编程新手。

可以在 jsp 中使用。

但是需要让它在 html 页面中工作。我可以用javascript来做吗?

我试过了:

      <script type="text/javascript">
      var purchaseOrderNo = session.getAttribrute("pONumb");
      document.write("pONumb");
      </script> [

这不会在 HTML 页面上输出任何值。

试过了:

       <script type="text/javascript">
       var purchaseOrderNo = (String) session.getAttribrute("pONumb");
           document.write("pONumb");
           </script> 

再次在页面上没有输出。

试过了:

            <script type="text/javascript">
            String purchaseOrderNo = (String) session.getAttribrute("pONumb");
            document.write("pONumb");
            </script> 

再次在页面上没有输出?

想不出还有什么可以尝试的。重定向到该 HTML 页面的 servlet 创建并设置会话属性 pONumb。

【问题讨论】:

  • 您能否将完整的 JSP 添加到问题中?您正在看到的 HTML 输出是什么?如果 JSP 正在输出 &lt;script&gt; 块,您可能想尝试 var purchaseOrderNo = &lt;%= session.getAttribrute("pONumb"); %&gt;
  • 什么是(String) session.getAttribrute("pONumb");?它甚至不是正确的 JavaScript 语法……而且 JAVA 与 JavaScript 不一样。在此处阅读有关 JSP 的更多信息:Wikipedia - JSP

标签: javascript html servlets


【解决方案1】:

不,你不能。 JavaScript 在客户端(浏览器)执行,而会话数据存储在服务器上。

但是,您可以通过多种方式公开 JavaScript 的会话变量:

  • 一个隐藏的输入字段,将变量存储为它的值并通过 DOM API 读取它
  • 可以通过 DOM 读取的 HTML5 数据属性
  • 将其存储为 cookie 并通过 JavaScript 访问它
  • 直接在 JS 代码中注入,如果你有内联的话

在 JSP 中你会有类似的东西:

<input type="hidden" name="pONumb" value="${sessionScope.pONumb} />

或:

<div id="product" data-prodnumber="${sessionScope.pONumb}" />

然后在 JS 中:

// you can find a more efficient way to select the input you want
var inputs = document.getElementsByTagName("input"), len = inputs.length, i, pONumb;
for (i = 0; i < len; i++) {
    if (inputs[i].name == "pONumb") {
        pONumb = inputs[i].value;
        break;
    }
}

或:

var product = document.getElementById("product"), pONumb;
pONumb = product.getAttribute("data-prodnumber");

内联示例是最直接的,但如果您想将 JavaScript 代码存储为外部资源 (the recommended way),则不可行。

<script>
    var pONumb = ${sessionScope.pONumb};
    [...]
</script>

【讨论】:

  • 我知道这是一个旧线程,但我仍然想问如果JS代码在外部文件中,为什么内联示例(最后一个)不起作用。谢谢!
  • 您可以将其保存在外部文件中,但该文件需要进行预处理,您不能再将其作为静态文件提供。这样你会失去很多优势——缓存、CDN 等。
  • 使用meta 标签(相对于隐藏输入)也是一种选择
【解决方案2】:
<%
String session_val = (String)session.getAttribute("sessionval"); 
System.out.println("session_val"+session_val);
%>
<html>
<head>
<script type="text/javascript">
var session_obj= '<%=session_val%>';
alert("session_obj"+session_obj);
</script>
</head>
</html>

【讨论】:

    【解决方案3】:

    以下代码可以帮助您在 java 脚本中实现会话归属:

    var name = '<%= session.getAttribute("username") %>';
    

    【讨论】:

    • 请阅读此how-to-answer 并按照那里的指南提供高质量的答案。
    • 这确实帮助了我——你能告诉我,为什么要在 标签中使用 标签吗?
    【解决方案4】:
    <?php 
        $sessionDetails = $this->Session->read('Auth.User');
    
        if (!empty($sessionDetails)) {
    
    
            $loginFlag = 1;
            # code...
        }else{
            $loginFlag =  0;
        }
    
    
    ?>
    
    <script type="text/javascript">
    
        var sessionValue = '<?php echo $loginFlag; ?>';
        if (sessionValue = 0) {
    
            //model show
        }
    </script>
    

    【讨论】: