在春天解析java.lang.ClassNotFoundException:org.springframework.context.ApplicationListener异常

时间:2015-07-11 13:24:04

标签: spring spring-mvc

我是Spring的新手。我使用springMVC创建了一个简单的应用程序,在第一次点击应用程序时,基于欢迎文件列表,用户被定向到login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>


<div id="wrapper">
    <div id="container">
        <div id="header">
           <img alt="header image" src="header.jpg" style="width:1350px;height:150px"/>
        </div>
        <div id="content" style="height:300px">
                <div id="login_box" style="background-color: rgb(206, 236, 245); height: 200px; width: 400px; margin-left: 360px; margin-top: 57px;">

                    <div style="padding-left: 45%; border-top-width: 0px; padding-top: 10px; padding-bottom: 15px;">Login</div>
                    <div>
                      <form action="/hbfcbank/home.htm">
                            <table style="padding-left: 70px;">
                                <tbody>
                                    <tr>
                                        <td>Login Id : </td>
                                        <td><input type="text" name="logiId"></td>
                                    </tr>
                                    <tr>
                                        <td>Password : </td>
                                        <td><input type="password" name="password"></td>
                                    </tr>
                                </tbody>

                            </table>
                            <div style="padding-left: 150px; padding-top: 25px;">
                            <input type="submit" name="submit"  value="submit"/>
                            </div>

                      </form>
                    </div>
                </div>      
        </div>
        <div id="footer">
            <img alt="footer image" src="footer.jpg" style="width:1350px;height:50px">
        </div>
    </div>
</div>
</body>
</html>

单击login.jsp上的提交按钮时,它应该重定向到主页home.jsp,我在web.xml中添加了springmvc配置,如下所示

<?xml version="1.0" encoding="ISO-8859-1" ?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <display-name>HBFC bank</display-name>
    <description>
        This is a simple web application with a source code organization
        based on the recommendations of the Application Developer's Guide.
    </description>


    <servlet>
        <servlet-name>springapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
        <servlet-name>springapp</servlet-name>
        <url-pattern>*.htm</url-pattern>
  </servlet-mapping>


    <welcome-file-list>
        <welcome-file>/jsp/login.jsp</welcome-file>

    </welcome-file-list>

</web-app> 

以下是springapp-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <!-- the application context definition for the springapp DispatcherServlet -->

  <bean name="/home.htm" class="com.hbfcbank.controller.LoginController"/>

</beans>

并且LoginController位于

之下
package com.hdfcbank.controller;

import java.util.logging.Logger;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class LoginController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("in LoginController");
        return new ModelAndView("/jsp/home.jsp");
    }

}

仍然在点击login.jsp上的提交按钮后,我收到以下错误。

java.lang.NoClassDefFoundError: org/springframework/context/ApplicationListener
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClassCond(Unknown Source)
    java.lang.ClassLoader.defineClass(Unknown Source)
    java.security.SecureClassLoader.defineClass(Unknown Source)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClassCond(Unknown Source)
    java.lang.ClassLoader.defineClass(Unknown Source)
    java.security.SecureClassLoader.defineClass(Unknown Source)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:461)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

请提供相同的错误原因和解决方案。 感谢

3 个答案:

答案 0 :(得分:0)

java.lang.NoClassDefFoundError: org/springframework/context/ApplicationListener

表示您在CLASSPATH中没有该类。它位于spring-context罐子里。

因此,只需要将它放在CLASSPATH中,例如WEB-INF/lib或更好的地方spring-webmvc。因为最后一个需要ApplicationListener的类。

从另一方面使用一些依赖管理工具,如Maven或Gradle,您不会遇到类似的问题,因为spring-context是来自spring-webmvc或其父级的传递依赖 - spring-web

答案 1 :(得分:0)

您应该检查重复的导入jar。检查是否存在两个包ApplicationListener类,删除一个,再试一次。

答案 2 :(得分:0)

是的我同意Artem Bilan。如果您使用的是Maven,请确保您已在依赖性装配设置中添加了Maven依赖。