使用 Javascript 可以从 HTML 页面中的 servlet 设置的会话属性中获取值吗

Posted

技术标签:

【中文标题】使用 Javascript 可以从 HTML 页面中的 servlet 设置的会话属性中获取值吗【英文标题】:Using Javascript can you get the value from a session attribute set by servlet in the HTML page 【发布时间】:2011-10-18 14:23:29 【问题描述】:

我有一个使用重定向转发到 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 【参考方案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>

【讨论】:

以上是关于使用 Javascript 可以从 HTML 页面中的 servlet 设置的会话属性中获取值吗的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 将值从一个 HTML 页面传递到另一个页面?

JavaScript 插入 HTML 页面

如何使用 JavaScript 将 JSON 文件从 HTML 页面发送到 ESP

使用 Localstorage 将 javascript 变量从一个 html 页面存储和检索到另一个 (DOM)

从 PHP 查询中获取 JSON 数组后,使用 javascript 将 JSON 数组写入 html 页面

Javascript 可以访问 Ajax 文本/html 响应的 DOM 吗?