我认为,我遇到的是一个极其简单的问题,但我尝试解决它的所有尝试都失败了。
简而言之: 我有一个带有调用 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 安全字符串的标签。可能作为
关于javascript - 无法检索在 servlet 中设置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962448/