当前位置: 首页 > 知识库问答 >
问题:

Memcached和Tomcat 8会话管理器问题

笪涛
2023-03-14

我们在使用Tomcat7的web应用程序中使用Memcached进行会话管理,它的工作方式很像Charm。为了使其工作,我在Tomcat的lib文件夹中添加了以下jar

    null
<Context path="customersupport" docBase="customerSupportOrderCentral#v2" sessionCookieName="CUSTOMERSUPPORT-JSESSIONID">
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:oc-cs-elasticcache.w8eptf.cfg.usw1.cache.amazonaws.com:11211"
sticky="false" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" />
</Context>

现在,我们正在将JDK升级到1.8版本,并将Tomcat版本升级到8版本。我一直在网上搜索,结果发现,由于Tomcat8不支持getSessionCookieName,我必须为Tomcat8更新memcache jar文件。因此,我在Tomcat的lib文件夹中添加了一组新的jar文件,如下所示。

  • spymemcached-2.11.1.jar
  • memcached-session-manager-tc8-1.8.1.jar
  • memcached-session-manager-1.8.1.jar
  • Couchbase-Client-1.4.0.jar

并保持server.xml不变,但现在Tomcat在启动时抛出以下错误。

06-Jan-2016 07:03:48.934 SEVERE [main] org.apache.tomcat.util.digester.Digester.startElement Begin event threw error
 java.lang.NoClassDefFoundError: org/apache/catalina/Lifecycle
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1012)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:413)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1178)
    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.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:766)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1344)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
    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:643)
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1451)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:551)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:599)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

共有1个答案

夏高朗
2023-03-14

我也有同样的问题,被困了两天。我的问题是在tomcat/lib和另一个特定于项目的类路径tomcat/{project}/conf中有以下特定于memcache的JAR。当我从Tomcat/{project}/conf中删除这些JAR时,问题得到了解决

spymemcached-2.11.1.jar memcached-session-manager-tc8-1.8.1.jar memcached-session-manager-1.8.1.jar

 类似资料:
  • 成功开发 Web 应用程序的难题之一是在一次用户访问,即会话期间,当用户在一个应用程序的页与页之间跳转的同时,维护用户信息。HTTP 是一种无状态协议,也就是说,Web 服务器将某页的每次访问都当作相互无关的访问来处理;服务器不保留前一次访问的任何信息,即使访问就发生在当前访问的几秒钟之前。正因为这种不记忆以前访问的特性使得编写联机目录之类的应用程序很困难,此类应用程序可能需要跟踪用户在目录的不同

  • 问题内容: 有什么方法可以使用Angularjs管理用户会话吗? 会话超时-系统空闲时。 在会话即将到期时发出警报,并带有恢复会话的选项。 如果会话已过期,则在尝试发出请求时重定向(或其他任何操作)。 拦截器可以解决这个问题吗?你能举个例子吗? 提前致谢。 问题答案: 尝试ng-idle。它是一个简单的组件,您可以在其中设置超时和警告时间,直到达到超时。然后,您可以查询服务器上的用户注销或类似内容

  • 问题内容: 我正在开发一个小型Web应用程序,很有趣,目前仅使用Java Servlet。我有两个页面,test1和test2。目前,我正在test1中创建一个新会话,如下所示: 在test2中,我像这样检索会话: 因此,问题在于,如果我先进入test2,我总是会得到一个有效的会话,因为浏览器会创建一个会话。我想限制从test1到test2的流量,因此我必须先进入test1。我的计划是最终创建一个

  • HTTP 是一种无状态协议,即服务器不保留与客户交易时的任何状态,所以当我们在开发 HTTP Server 应用时,我们通常会通过 Session 来实现多个请求之间用户数据的共享。您可通过 hyperf/session 来实现 Session 的功能。Session 组件当前仅适配了两种储存驱动,分别为 文件 和 Redis,默认为 文件 驱动,在生产环境下,我们强烈建议您使用 Redis 来作

  • 试图用Redisson配置我的JavaEE web项目。 > 在Docker容器中设置Redis,它工作得很好。 通过https://github.com/redisson/redisson/tree/master/redisson-tomcat来配置我的Tomcat。 当我试图运行项目时,它会在错误下面抛出: 我对redisson比较陌生,不知道还需要做些什么才能在我现有的javaEE项目中使用

  • Cookie提供客户端数据存储,仅支持少量数据。 通常,每个域2KB,这取决于浏览器。 Session提供服务器端数据存储,它支持大量数据。 让我们来看看如何在FuelPHP Web应用程序中创建cookie和会话。 Cookies FuelPHP提供了一个Cookie类来创建cookie项目。 Cookie类用于创建,分配和删除cookie。 配置Cookie Cookie类可以通过位于fuel