无法使用Java设置cookie

无法使用Java设置cookie,java,servlets,cookies,Java,Servlets,Cookies,我正在尝试使用从Identity server获取的用户属性值设置cookie。我正在获取用户属性,但无法设置cookie。你能告诉我我犯了什么错误吗 以下是我的Java代码: public class CircleArea extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, Http

我正在尝试使用从Identity server获取的用户属性值设置cookie。我正在获取用户属性,但无法设置cookie。你能告诉我我犯了什么错误吗

以下是我的Java代码:

 public class CircleArea extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("Server name is: " + request.getServerName());
        System.out.println("Requesting cookies...");
        Cookie[] cookies = request.getCookies();
        String targetResourceURL = request.getRequestURL().toString();
        if (cookies == null) {
            System.out.println("Cookies are not present");
            System.out.println("Requesting reference value...");
            String refValue = request.getParameter("REF");
            if (refValue == null) {
                System.out.println("Reference value is null...");
                System.out.println("Redirecting to URL: " + Configurations.PF_BASE_URL + ":"
                        + Configurations.PF_PRIMARY_SSL_PORT + Configurations.PF_START_SSO_ENDPOINT + "?"
                        + "PartnerIdpId=" + Configurations.PARTNER_ENTITY_ID + "&TargetResource=" + targetResourceURL);
                response.sendRedirect(Configurations.PF_BASE_URL + ":" + Configurations.PF_PRIMARY_SSL_PORT
                        + Configurations.PF_START_SSO_ENDPOINT + "?" + "PartnerIdpId="
                        + Configurations.PARTNER_ENTITY_ID + "&TargetResource=" + targetResourceURL);
            } else {
                try {
                    System.out.println("Reference Value is: " + refValue);
                    System.out.println("Getting user attributes...");
                    Map<String, String> userAttrs = UserAttributes.pickUpAttributesFromReferenceIdAdapter(refValue);
                    for(Map.Entry<String, String> userAttr : userAttrs.entrySet()){
                        System.out.println("Key: " + userAttr.getKey() + " Value: " + userAttr.getValue());
                    }
                    System.out.println("Creating cookie with user attribute displayname Value...");
                    System.out.println("Cookie name is : " + targetResourceURL.substring(38));
                    Cookie cookie = new Cookie(targetResourceURL.substring(38), userAttrs.get("displayName"));
                    System.out.println("Setting cookie path to :" + targetResourceURL);
                    cookie.setPath(targetResourceURL);
                    System.out.println("Setting cookie age...");
                    System.out.println("Cookie will be deleted atonce when the browser is closed");
                    cookie.setMaxAge(-1);
                    response.addCookie(cookie);
                    RequestDispatcher dispatch = request.getRequestDispatcher("/area.jsp");
                    dispatch.forward(request, response);
                } catch (Throwable any) {
                    any.printStackTrace();
                }
            }
        }
    }

    public double calculateArea() {
        Random rnd = new Random();
        int radius = rnd.nextInt(15);
        double area = Math.pow((double) radius, (double) 2) * Math.PI;
        return area;
    }
}

我想我知道根本原因。通过response.addCookie在Servlet中创建的Cookie在请求分派时还不可用

您可以改用response.sendRedirect

删除以下行:

RequestDispatcher dispatch = request.getRequestDispatcher("/area.jsp");
dispatch.forward(request, response);
并替换为:

response.sendRedirect("area.jsp");

异常在
area_jsp.java
文件的第76行提到。当我单击您所指的行时,请显示我在org.apache.jsp.area_jsp中找不到的文件源的内容。我正在使用Eclipse mars。看起来我没有处理HTTP请求。请尝试找出错误实际发生的位置。逐行调试将帮助您解决问题。最可能的原因是,您得到的NullPointerException是request.getCookies();在JSP中,返回null。在访问cookie数组之前,应该进行空检查。您是否在浏览器中检查了cookie是否正在创建?我还看到您在sysout中打印了调试语句。你能看到显示servlet正在创建cookie的调试行吗?谢谢,但是我在这里发帖之前试过了。这也不管用。
RequestDispatcher dispatch = request.getRequestDispatcher("/area.jsp");
dispatch.forward(request, response);
response.sendRedirect("area.jsp");