【问题标题】:Tomcat Axis2 - Not seeing spring jarsTomcat Axis2 - 没有看到弹簧罐
【发布时间】:2023-03-04 07:44:08
【问题描述】:

我已经在网上阅读了几个小时的相关信息,但我很茫然。

我已经成功地让 Tomcat 7 在 servlet 中与 Axis2 一起运行。我可以很好地查看基于非弹簧的 jsps。在我尝试整合 spring 的那一刻,整个事情都崩溃了。我的服务器日志给了我以下错误。

   SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1591)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4638)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5204)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5199)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 25 more

我有 Spring 3.1.0.M1,jar 位于 Axis2 (%AXIS2CLASSPATH%) 和 Tomcat 的类路径中,通过服务的工具栏界面进行配置。这一切都在 Windows 7 x64 上完成。

我正在尝试让 Axis2 附带的 pojoguidespring 示例正常工作。

这是一个全新的安装,因此如果需要,我可以将其拆除。有人可以给我一些详细的指示吗?我要疯了。

提前致谢。


编辑:

虽然javax/servlet/ServletContextListener 不是 Spring 类,但只有当我在 web.xml 中包含 Springs 上下文配置信息时才会调用它,就像这样

<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

servlet-api.jar 位于 Axis2 和 Tomcat 的类路径(lib 目录)中。检查 jar 表明javax/servlet/ServletContextListener 绝对可用。我能再给点建议吗?

【问题讨论】:

  • 当我将以下行添加到 web.xml 时出现问题。据我了解,这些行应该让 Axis2 为 spring 设置联系信息。 &lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; &lt;/listener&gt;

标签: spring tomcat configuration axis2


【解决方案1】:

javax/servlet/ServletContextListener 不是 Spring 类;它是 Tomcat 附带的 servlet.jar 的一部分。

%AXIS2CLASSPATH% 向我建议您依赖于 CLASSPATH 的环境变量。这是一个坏主意。如果您将所需的 JAR 放在适当的位置,Tomcat 应该能够很好地管理所有内容。无需环境变量或更改任何启动脚本。

您的 CLASSPATH 已损坏;我会解决的。

【讨论】:

  • 我认为这是基于弹簧的问题的原因是,当我尝试包含基于弹簧的示例时,此错误仅显示在日志中。没有弹簧应用程序,我得到了一个干净的开始。就修复类路径而言:文档都指向该环境变量。 build.xml 文件似乎包含 lib 目录中的任何文件。我在 lib 目录中有 spring.jars。我应该去其他一些位置来修复类路径吗?
  • Axis2 CLASSPATH :所以,我了解到,虽然我使用的所有其他基于 java 的应用程序都需要某种类路径环境变量,但默认情况下,Axis2 配置为使用任何 jar在它的 lib 目录中。这里的诀窍是,如果您将其用作 servlet,则在添加新依赖项时需要重新构建 WAR。然而,这并没有解决 spring 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2011-09-19
  • 1970-01-01
  • 2020-03-13
  • 2011-05-03
  • 1970-01-01
  • 2011-08-27
相关资源
最近更新 更多