session属性被设置为Java中的对象,但在JSP中为null。为什么JSP使用新会话?

时间:2016-07-05 15:06:11

标签: java jsp session servlets

我在调试器中运行了代码并确认该对象是在Java代码中创建的,并且在JSP中为null。为什么JSP使用新会话?

在调试器中,它进入Java代码并在具有id的会话中设置验证码。当我运行JSP时,它会获得具有不同id的会话,失败,然后进入doGet()并使用新的captcha对象设置当前的id会话。在会话中存储验证码,但JSP运行时不会使用该会话。

以下是一些代码段

爪哇:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  ColoredEdgesWordRenderer wordRenderer = new ColoredEdgesWordRenderer(COLORS, FONTS);
  Captcha captcha = new Captcha.Builder(_width, _height).
  addText().addNoise().
  addBackground(new BrightGradiatedBackgroundProducer()).
  build();

  CaptchaServletUtil.writeImage(resp, captcha.getImage());
  req.getSession().setAttribute("simpleCaptcha", captcha); // object is getting set

}

JSP:

session=request.getSession(false);
if (session==null)
    session=request.getSession(true);

boolean isCaptchaTrue = false;
String strCaptcha = request.getParameter("captcha");
String captchaType = request.getParameter("captchaType");

if (strCaptcha != null && captchaType != null) {
  if(session.getAttribute("simpleCaptcha") instanceof Captcha){
    Captcha captcha = (Captcha) session.getAttribute("simpleCaptcha");
    isCaptchaTrue = captcha.isCorrect(strCaptcha);

  }else if(session.getAttribute("simpleCaptcha") instanceof AudioCaptcha){
    AudioCaptcha captcha = (AudioCaptcha) session.getAttribute("simpleCaptcha");
    isCaptchaTrue = captcha.isCorrect(strCaptcha);
  }
} 

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。在JSP的顶部,会话被无效。我删除了session.invalidate(),现在可以正常工作了。