使用 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 正在输出<script>
块,您可能想尝试 var purchaseOrderNo = <%= session.getAttribrute("pONumb"); %>
什么是(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 将 JSON 文件从 HTML 页面发送到 ESP
使用 Localstorage 将 javascript 变量从一个 html 页面存储和检索到另一个 (DOM)