【问题标题】:Unable to retrieve value set in servlet无法检索 servlet 中设置的值
【发布时间】:2012-12-07 09:34:53
【问题描述】:

我认为,这是一个非常简单的问题,但我解决它的所有尝试都失败了。

简而言之: 我有一个带有调用 Java Servlet 的表单的 JSP 文件。 servlet 处理输入并返回一个变量(属性)并重定向回 same 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);
}

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

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

我也试过了:

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

和:

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

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

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

【问题讨论】:

  • “session”如何成为 JavaScript 对象?

标签: javascript jsp session servlets attributes


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 当你这样做时,确保你正确地转义你的数据以便插入到 Javascript 字符串中。
  • 啊,非常有道理。在这种情况下,scriptlet 标记是访问在 servlet 中更新的 HttpSession 实例。有兴趣的可以在这里了解更多关于 scriptlet 的信息:tutorialspoint.com/jsp/jsp_syntax.htm。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多