【开源中国 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
oschina 没用 session
你的错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
很明显肯定是代码写错了
但是定位不到哪儿错误? 所有的session都打印出来了,我对session也输出,但是不知道哪儿的错误?
oschina 是用cookie来实现的?
引用来自#3楼“kennyr”的帖子
但是定位不到哪儿错误? 所有的session都打印出来了,我对session也输出,但是不知道哪儿的错误?
oschina 是用cookie来实现的?
我也想知道,我现在项目在服务器上缓存了用户的信息,但是我目前用访问者的IP地址作为关键字查询用户信息,这样如果同一个IP多个用户登录就有问题了,一般大家都用session处理么?
Memcached Session Manager
Memcached Session Manager
这个是tomcat 下的实现,jboss下不能用
引用来自#3楼“kennyr”的帖子
但是定位不到哪儿错误? 所有的session都打印出来了,我对session也输出,但是不知道哪儿的错误?
oschina 是用cookie来实现的?
是的,用cookie实现的,连我都知道,红薯说了N次了
找到问题了,我将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 = "/";
}
}
}