繁体   English   中英

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

[英]session attribute is being set to an object in Java, but it is null in the JSP. Why is the JSP using a new session?

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

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

这是一些代码片段

Java:

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);
  }
} 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM