redis+tomcat共享session问题

520920 发布于 2015/11/27 17:31
阅读 6K+
收藏 2

大家好:

   已经搞了一周了,网上的答案步骤都是千篇一律的,菜鸟我搞的也是一头雾水啊!

需求是:redis实现session共享!

操作步骤:根据网上的文章我去网上下载了三个jar包:commons-pool(1.X 2.X的都试过了,同样的问题)

jedis-2.7.2.jar和 tomcat-redis-session.jar(网上下载的还有自己打包的也都试过了,同样的问题)

然后修改了tomcat下的conf文件夹下的context.xml

<!--add -->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />

<Manager className="com.radiadesign.catalina.session.RedisSessionManager"

         host="127.0.0.1"

         port="6379"

         database="0"

         maxInactiveInterval="1800"  />
<!--end -->不确定两个className是什么意思,是不是固定的?因为报错的好像是说找不见这个!

问题来了:

严重: Begin event threw exception
java.lang.ClassNotFoundException: com.radiadesign.catalina.session.RedisSessionHandlerValve
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:204)
        at org.apache.tomcat.util.digester.Rule.begin(Rule.java:152)
        at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1376)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
        at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)

以下是问题补充:

@520920:将上面的配置文件改成<!--add --> <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" 则报: 严重: Begin event threw error java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2532) at java.lang.Class.getConstructor0(Class.java:2842) at java.lang.Class.newInstance(Class.java:345) at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:205) at org.apache.tomcat.util.digester.Rule.begin(Rule.java:152) at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1376) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648) at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1675) at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:788) at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:726) at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1006) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:276) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) at org.apache.catalina.core.StandardContext.init(StandardContext.java:5703) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4453) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:802) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1080) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1003) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:507) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:325) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1068) at org.apache.catalina.core.StandardHost.start(StandardHost.java:822) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1060) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:759) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 48 more (2015/11/27 17:56)
加载中
0
红薯
红薯
是不是jar包没扔进来啊
520920
520920
我已经将下载的三个包放到tomcat下的lib包下了呢,之前有人说版本不匹配,我好几个版本做了测试的,但都是启动tomcat就报错,光扔jar进去是不报错的,但是改context.xml 文件,添加的是上面的那一段代码,就报错了……
0
jobell
jobell

你看看你jar里面是否有这个类。别总是copy网上的文章,记得这个好像那个包名变了。你看看。


520920
520920
我根据他们说的将官方的文件整进eclipse下,打包了,然后将打包中的类的名称放到tomcat的配置中了,但是tomcat启动不起来了……纠结中……
0
盲人摸象
盲人摸象
  只建议你问题要看仔细,不是拿过来就用,要去分析为什么这么用。你可以创建一个tomcat 环境的web 项目,平时我都是使用jetty测试的,追踪session的时候也看的是jetty的sessionManger。我在做做个集成的时候,1次成功,能够实现session共享,首先是把源码下下来,然后放到eclipse上去,从他的源码分析他是怎样将我们的session存储到redis中的,然后看看它自己实现的sessionManager,这里是关键。然后你就知道他在tomcat配置文件中为什么这么配置了。 你的问题我都没看,因为光从你的异常上也看不出什么个道道来,索性告诉你我是如何成功的一些操作步骤经验。望君成功。
盲人摸象
盲人摸象
回复 @520920 : 那你就好好看看流程,细心点就ok了
520920
520920
我现在还没整集成呢,就配置了一个tomcat都启动不起来了,纠结中……流程是咋样的,别人也都告诉我了,也说配置很简单就一段代码的问题,可是……操作不成功,我也不知道到底是哪里出了问题……纠结中……
0
lee123lee
lee123lee
没找到jar包
520920
520920
是啊,报错就是说没找到class文件,我也不知道咋解决这问题了,看大神们说的都挺简单的样子,咋我操作起来就不是那么回事了呢……纠结中……
0
lee123lee
520920
520920
我按照网上的打包 加进lib文件夹下了,但是,说找不到,我也不知道是什么情况了……纠结中……
0
mycms2013
mycms2013
链接:http://share.weiyun.com/83f80ea485e7f660efec6ea3caf46da8 (密码:AJ3C)
0
zigzagroad
zigzagroad
使用压缩工具打开jar文件,浏览确定相应目录下是否存在相应的.class文件
520920
520920
按你说的方法,我试了,class文件确实是存在的……,但就是不知道,它为什么找不到……纠结中……
0
南湖船老大
南湖船老大
别只会copy网上的文章!!!
520920
520920
不参考网上的,我也不知道从何下手啊……都说的很轻巧,我咋就操作行不通呢……
0
紫轩阡陌
紫轩阡陌

tomcat-redis-session 要下源码根据自己Tomcat环境进行编译的 两个className是tomcat-redis-session Jar中的class名称  

源码可以从这里拿https://git.oschina.net/nature/tomcat-redis-session.git

520920
520920
tomcat-redis-session,我确实是在git中获取的文件啊,而且也是从eclipse中打包的啊……
0
南湖船老大
南湖船老大

为了让楼主看看Java开发是多么的简单和轻松你说你耗时一周都没搞好,简直就是胡说八道!!我从没搞过reids和tomcat整合的(我做的项目一直都是去session用cookie,为了验证你在胡说八道,我还特意把我项目里JSP里的session=false去掉,耗时也不过20分钟!!我今天非要截图给你看看!!最受不了新手只会去copy网上的文章,不去看源码不去看文档。

所用版本tomcat7 最新版,Java 7最新版,redis 2.6,jedis 2.7.0,common-pool 2.0。
tomcat-seesion整合包这个:https://github.com/jcoleman/tomcat-redis-session-manager/releases/tag/1.2-tomcat-7-java-7 ,其实里面就5个文件而已!我自己放eclipse里打包的,分分钟搞定。
1.扔jar包到tomcat目录

2.配置tomcat的context.xml文件


3.配置完了,启动项目,简单的要死!!验证一下



南湖船老大
南湖船老大
回复 @520920 : 我没跳。。启动项目就是启动tomcat啊。。。jar包要放在tomcat下
520920
520920
已经解决了,我将项目中打包用到的jar也放到tomcat下了,现在tomcat可以正常使用了,虽然用的不是你说的,但仍然很感谢
520920
520920
你说的第一步第二步我都整完了,但是你说的启动项目,启动的是什么啊?我咋都没你这些东西……你能不能说详细点啊?都咋操作的啊,能不能详细说一下啊,你别跳着说啊,你跳着说,我看不懂啊……我是整完第一步第二步启动tomcat报错的……你咋启动的项目?
pantrick
pantrick
老大威武,赞一个
返回顶部
顶部