首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话属性在Java中设置为对象,但在JSP中为null。为什么JSP使用新会话?

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

Stack Overflow用户
提问于 2016-07-05 23:06:11
回答 0查看 930关注 0票数 1

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

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

下面是一些代码片段

Java:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
  }
} 
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38206874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档