使用 HttpSession 时出现空指针异常

Getting null pointer exception while using HttpSession

我目前正在学习 Servlet。使用下面的代码时,我得到 NullPointerException。每当在 SqServlet 中调用 getAttribute() 函数以获取 k 中的值时,它都会返回空值。谁能告诉我哪里出错了?谢谢

public class AddServelet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            int i = Integer.parseInt(req.getParameter("num1"));
            int j = Integer.parseInt(req.getParameter("num2"));
            int k = i + j;

            PrintWriter out = res.getWriter();
            HttpSession session = req.getSession();

            req.setAttribute("k", k);
            res.sendRedirect("sq");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

public class SqServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            HttpSession session = req.getSession(false);
            int k = (int)session.getAttribute("k");

            k = k * k;
            PrintWriter out = res.getWriter();
            out.println("Square of sum: " + k);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

getSession(false) 上的 HTTPServletRequest 将 return 值。

 HttpSession session = req.getSession(false); //will return null if no session object is found.

AddServelet get 方法创建一个会话对象。这意味着您需要先点击此 Get 方法,然后再点击 SqServlet HTTP URL.

如果没有找到会话,最好修改您的代码以处理空检查和 return 用户。

您正在请求中设置 "k" 然后从会话中获取它

在 AddServelet 中,您应该这样做: session.setAttribute("k", k);

而不是 req.setAttribute("k", k);