memcache session存储的错误,请指教

kennyr 发布于 2011/05/25 11:39
阅读 1K+
收藏 1

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

我用如下方案实现memcache session存储

http://www.iteye.com/topic/82565

session存储数据都没有问题,点击网站上连接也没问题,但是点击弹出页面就会出错,看错误信息跟容器有关,是否有相关经验?下面是错误信息,请指教

11:37:11,851 INFO  [STDOUT] session=====lastaccessdate|value==2011-03-06 11:50:30.0
11:37:11,851 INFO  [STDOUT] session=====onlineuser|value==com.user.util.OnLineUser@1b43dd2
11:37:11,851 INFO  [STDOUT] session=====access|value==com.tools.access.model.Access@46c5a4
11:37:11,851 INFO  [STDOUT]
11:37:11,851 INFO  [STDOUT] session=====lms_user_organ|value==com.organ.model.OrganModel@59942d[orgid=6820]
11:37:11,851 INFO  [STDOUT] session=====lms_user_asp|value==1
11:37:11,851 INFO  [STDOUT] session=====lms_user_org|value==6820
11:37:11,851 INFO  [STDOUT] session=====nowStudyCourseContent|value==[com.course.model.LeiHomeCourseUser@10f3863, com.course.model.LeiHomeCourseUser@3eef33, com.course.model.LeiHomeCourseUser@1ca3af1]
11:37:11,851 INFO  [STDOUT] session=====lms_sessionloginame|value==huangkr
11:37:11,851 INFO  [STDOUT] session=====org.apache.struts.action.LOCALE|value==en_US
11:37:11,851 INFO  [STDOUT] session=====lms_sessionticket|value==com.core.security.form.STicket@1e3db80
11:37:11,851 INFO  [STDOUT] session=====elms_login_name|value==huangkr
11:37:11,851 INFO  [STDOUT] session=====lms_sessionloginame_name|value==huangkr
11:37:11,851 INFO  [STDOUT] session=====elms_login_passwd|value==huangkr
11:37:11,851 INFO  [STDOUT] session=====lms_sessionuserid|value==276170
11:37:11,851 ERROR [scorm2004] StudyAction  startstudy = 926EE73E24C98D64580AE85E7A570B50.node1 userID = 276170
11:37:12,086 FATAL [JspFactoryImpl] Exception initializing page context
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
 at com.session.SessionService.getSession(SessionService.java:61)
 at com.session.HttpSessionSidWrapper.<init>(HttpSessionSidWrapper.java:17)
 at com.session.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:21)
 at org.apache.jasper.runtime.PageContextImpl._initialize(PageContextImpl.java:144)
 at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:122)
 at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:106)
 at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:62)
 at org.apache.jsp.user.launchLearningActivityTest_jsp._jspService(launchLearningActivityTest_jsp.java:71)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
 at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
 at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
 at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
 at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
 at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:506)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.session.MemcachedSessionFilter.doFilter(MemcachedSessionFilter.java:65)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.util.HibernateFilter.doFilter(HibernateFilter.java:40)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.util.i18n.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.util.i18n.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
 at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
 at java.lang.Thread.run(Thread.java:662)

另外:请教你的网站是如何存储session ,供分布在其它地区的应用访问?

我们应用的情况是:

三台jboss服务器,用apache loadbance 做集群,考虑到影响性能,但是jboss 之间没有集群,没有实现其session复制.

现在想用memcache来集中存储session.

 

是否方便留下qq  ,我的qq:913774667

 

加载中
0
红薯
红薯

oschina 没用 session

你的错误:

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map

很明显肯定是代码写错了

0
kennyr
kennyr

但是定位不到哪儿错误? 所有的session都打印出来了,我对session也输出,但是不知道哪儿的错误?

oschina 是用cookie来实现的?

0
笨蛋EGG
笨蛋EGG

引用来自#3楼“kennyr”的帖子

但是定位不到哪儿错误? 所有的session都打印出来了,我对session也输出,但是不知道哪儿的错误?

oschina 是用cookie来实现的?

我也想知道,我现在项目在服务器上缓存了用户的信息,但是我目前用访问者的IP地址作为关键字查询用户信息,这样如果同一个IP多个用户登录就有问题了,一般大家都用session处理么?

0
kennyr
kennyr

Memcached Session Manager

 这个是tomcat 下的实现,jboss下不能用

0
小编辑
小编辑

引用来自#3楼“kennyr”的帖子

但是定位不到哪儿错误? 所有的session都打印出来了,我对session也输出,但是不知道哪儿的错误?

oschina 是用cookie来实现的?

是的,用cookie实现的,连我都知道,红薯说了N次了

0
kennyr
kennyr

找到问题了,我将sessionId 重新命名了,改为"MYJSESSIONID",原来定义的是JSESSIONID,难道我实现的filter不能用这个名字了?困惑

public class MemcachedSessionFilter extends HttpServlet implements Filter {

 /**
  *
  */
 private static final long serialVersionUID = -365105405910803550L;

 // private FilterConfig filterConfig;

 private String sessionId = "MYJSESSIONID";

 private String cookieDomain = "";

 private String cookiePath = "/";

 public void doFilter(ServletRequest servletRequest,
   ServletResponse servletResponse, FilterChain filterChain)
   throws IOException, ServletException {
  HttpServletRequest request = (HttpServletRequest) servletRequest;
  HttpServletResponse response = (HttpServletResponse) servletResponse;

  Cookie cookies[] = request.getCookies();
  Cookie sCookie = null;

  String sid = "";
  if (cookies != null && cookies.length > 0) {
   for (int i = 0; i < cookies.length; i++) {
    sCookie = cookies[i];
    System.out.println("sCookie.getName()=="+sCookie.getName());
    if (sCookie.getName().equals(sessionId)) {
     sid = sCookie.getValue();
    }
   }
  }
  System.out.println("sid=="+sid);
  if (sid == null || sid.length() == 0) {
   sid = java.util.UUID.randomUUID().toString();
   Cookie mycookies = new Cookie(sessionId, sid);
   mycookies.setMaxAge(-1);
   if (this.cookieDomain != null && this.cookieDomain.length() > 0) {
    mycookies.setDomain(this.cookieDomain);
   }
   mycookies.setPath(this.cookiePath);
   response.addCookie(mycookies);
  }
  System.out.println("sessionId=="+sessionId);
  System.out.println("cookieDomain=="+cookieDomain);
  System.out.println("cookiePath=="+cookiePath);

  filterChain.doFilter(new HttpServletRequestWrapper(sid, request),
    servletResponse);
 }

 public void init(FilterConfig filterConfig) throws ServletException {
  // this.filterConfig = filterConfig;
  System.out.println("Filter start");
  this.sessionId = filterConfig.getInitParameter("sessionId");
  this.cookieDomain = filterConfig.getInitParameter("cookieDomain");
  if (this.cookieDomain == null) {
   this.cookieDomain = "";
  }

  this.cookiePath = filterConfig.getInitParameter("cookiePath");
  if (this.cookiePath == null || this.cookiePath.length() == 0) {
   this.cookiePath = "/";
  }
 }

}

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部