JavaServlet创建cookie然后从JSP读取为空
我有一个servlet: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
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");