Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaServlet创建cookie然后从JSP读取为空_Java_Jsp_Servlets - Fatal编程技术网

JavaServlet创建cookie然后从JSP读取为空

JavaServlet创建cookie然后从JSP读取为空,java,jsp,servlets,Java,Jsp,Servlets,我有一个servlet: public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getSession().setAttribute("user", "Te

我有一个servlet:

public class TestServlet extends HttpServlet {

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.getSession().setAttribute("user", "Test cookie");
            req.getRequestDispatcher("test.jsp").forward(req, resp);
        }
}
我有一个JSP:

    <% String name = request.getParameter("user"); %>
    <%= name%>

但是如果我运行代码,输出是空的,为什么


你能告诉我为什么吗?获取“用户”cookie的简单方法是什么。

您应该像这样使用
getAttribute(…)
而不是
getParameter(…)

 <% String name = session.getAttribute("user"); %>

不是


  • getParameter()以字符串形式返回请求参数的值,如果参数不存在,则返回null
  • getAttribute()将命名属性的值作为对象返回,如果给定名称的属性不存在,则返回null
  • 属性,在会话的生命周期内可用
  • 参数,仅在请求的生命周期内可用
“但是如果我运行代码,输出是空的,为什么?”

如果您在会话中设置了该属性,则该属性在请求中不存在,因此从

 request.getParameter("user");
您需要从会话中获取它,如下所示:

session.getAttribute("user");

使用隐式会话对象

session.getAttribute(“用户”)


请注意,在编写JSPY时,请尽量避免使用Scriptlet设置会话范围的变量。您可以使用EL在JSP中访问它${user}或者您可以使用JSP表达式。这个问题与Cookie无关。正如其他人所说的,不要混合会话和请求,它们是不同的作用域。但是,您将数据存储在会话中,而不是存储在cookie中。如果你真的想要一个cookie(但可能没有理由),你需要像
response.addCookie(newcookie(“user”,“testcookie”))这样的东西
session.getAttribute("user");