javascript - 无法检索在 servlet 中设置的值

标签 javascript jsp session servlets attributes

我认为,我遇到的是一个极其简单的问题,但我尝试解决它的所有尝试都失败了。

简而言之: 我有一个带有调用 Java Servlet 的表单的 JSP 文件。 servlet 处理输入并返回一个变量(属性)并重定向回相同 jsp。 我希望 jsp 使用 JavaScript 而不是 scriptlet 来处理返回的属性。

JSP代码(test.jsp):

<html>
  ...
  <%@page language="java"
    import="java.sql.*" 
    import="java.util.*"
  %>
  ...
  <body>
    <script type='text/javascript'>
      var name = session.getAttribute("test");
      alert(name);
    </script>
    ...
  </body>
</html>

Servlet 代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
  request.getSession().setAttribute("test", "value");
  String redirectedPage = "/test.jsp";
  RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher(redirectedPage);
  reqDispatcher.forward(request,response);
}

我认为问题源于我对 session 变量的声明:

var name = session.getAttribute("test");

我也试过:

var name = (String) session.getAttribute("bob");

和:

String name = (String) session.getAttribute("bob");

我可以使用 scriptlet (<% %>) 从我的表单中访问此属性,但这不允许我修改/处理返回的属性,而我需要这样做。

非常感谢任何帮助。如果您觉得这个问题已经被问到/解决了(我已经搜索过了),请礼貌地告诉我。

最佳答案

您不能从 javascript 访问 session ,但您当然可以在服务器端创建您的 javascript。

<script type='text/javascript'>
  var name = '<%= session.getAttribute("test") %>';
  alert(name);
</script>

如果您不能 100% 控制实际值(甚至可能如此),最好对字符串进行转义。否则,有人可能会注入(inject)破坏您页面的值(最好的情况)或启用某些 XSS 窃取用户数据或劫持用户 session 。

使用 Apache commons StringEscapeUtils ( JavaDoc ) 它看起来像这样

<script type='text/javascript'>
  var name = '<%= StringEscapeUtils.EscapeJavaScript((String)session.getAttribute("test")) %>';
  alert(name);
</script>

如果您要经常使用它(或者可能只使用一次),我建议您创建一个采用属性名称并输出 javascript 安全字符串的标签。可能作为 来避免脚本让您的 JSP 出现,如果您想要在访问属性时强加新功能,它也会让事情变得更容易。

关于javascript - 无法检索在 servlet 中设置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962448/

相关文章:

桌面和移动网站应用程序之间的 session 共享?

javascript - 通过 Razor (MVC4) 将 C# 字典对象传递给 JavaScript

javascript - 如何让浏览器请求新的js和css文件

jsp - 在 JSP/JSPX : no solution for problem that should not even exist? 中转义 HTML 实体

java - JDeveloper 错误 - Ear 文件构建

java - 使用jSTL和arraylist在jsp中动态创建select标签

java - 在 Spring 中维护 Hessian Web 服务调用之间的 HTTP session

javascript - 如何使用 JavaScript 在 SVG 中创建属性?

javascript - 暂时阻塞 UI,并运行回调

node.js - Express.js/Passport 应用程序为每个请求创建新 session ,尽管请求 header 中有 session ID