java.lang.ClassNotFoundException web项目加载时找不到类
来源:互联网 发布:listview数据更新 编辑:程序博客网 时间:2024/05/29 23:24
1.概述
作为一个屌丝程序猿,怎么能不会配置log4j呢,这样在控制台或者日志文件中很容易找到程序出BUG的地方。尤其是在控制台输出日志的时候,那叫一个爽啊!
=-= 但是出现了问题,我擦,启动web的时候spring创建上下文的时候居然会找不到类,我去,检查了一下jar包,spring.jar spring-web.jar 都有啊,怎么会找不到呢,我的jar包是放在web-inf/lib 下的,要是这样都找不到的话,你要闹哪样!
于是急忙网上搜罗了一下,大多人犯得错误就是,直接通过build path去添加的jar包,这样会导致web启动的时候java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
为什么会同时出现这两种错误呢?是应为加载初始化log4j的时候需要使用spring的上下文,由于找不到ContextLoaderListener,所以没办法去初始化加载log4j。于是想到是不是因为没有这个ContextLoaderListener类的jar包啊。感觉看到了光明似的,但是一查看发现,我去,有啊,有这个包啊!这我就顿时无语了。
换了个思路,实在不行,俺就新建个项目,然后把所有的东西都搬迁到新项目中,clean了一下项目,clean一下tomcat,最后发布了一下!T(太)M(萌)D(了)!居然好使了,你们说我能说啥呢?
虽然我的这种解决之道,很无奈,别说科学,甚至连神学都解释不了。没有办法,Java这东西,大家都懂得,头天晚上有问题,回家睡一觉,第二天上班居然好了。这尼玛社么逻辑!没有办法,借此在这里吐槽一下。
对于这类问题的规避,还是建议,大家操作的时候要谨慎,不要什么东西都往项目里面添加,一定要了解你添加的jar包,你需要什么jar包,就添加什么jar包。有时间后添加多了未必有好处。对,你猜对了,jar包冲突也是屌丝程序猿的必修课。
2.解决办法
我就简单的总结一下,这种问题的解决方法:
2.1 缺少jar包
2.2 jar包的位置导入有问题
2.3 jar包冲突
2.4 其他的情况
3 Java加载顺序
系统默认提供了3个ClassLoader
Root ClassLoader,ClassPath Loader,Ext ClassLoader
我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。
能不能加载Jar,加载哪里的Jar,是由ClassLoader决定的。
问题可能是 导入的仅仅是jar包的引用,例如在eclipse中通过build path加进user lib……(类似快捷方式)
这种在Java Application中没问题,但在web Application中可能会出现找不到类的异常。
在WEB Application中jar包最好放在webroot或webcontent下的lib文件夹内,特别是xml中用到的jar包。
4 log4j的配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <display-name>springMVC</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring/applicationContext.xml</param-value> </context-param> <!-- log4j配置 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:config/properties/log4j.properties</param-value> </context-param> <!-- log4j监听器 --><listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> <span style="font-family: Arial, Helvetica, sans-serif;"></web-app></span>
对了从上面可以看出我的路径实在src下的config/properties/log4j.properties中
### set log levels ###log4j.rootLogger = debug , stdout , D , E### 输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n### 输出到日志文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 保存异常信息到单独文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/error.log ## 异常日志文件名log4j.appender.D.Append = truelog4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n如果想看详细的配置讲解请访问:http://blog.csdn.net/azheng270/article/details/2173430/ 这里我就不做赘述了。这篇博客有个错误的地方就是
<span style="font-size:18px;">log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n 1的左右是没有空格的,否则会报错</span>
- java.lang.ClassNotFoundException web项目加载时找不到类
- java.lang.ClassNotFoundException web项目加载时找不到类
- java.lang.ClassNotFoundException web项目加载时找不到类
- web 项目 java.lang.ClassNotFoundException
- 项目启动时,一直报java.lang.ClassNotFoundException(类找不到异常)
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- 类找不到总结java.lang.ClassNotFoundException
- web项目启动报java.lang.ClassNotFoundException
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener为什么找不到?
- Android手机同时使用Wi-Fi和数据流量
- ABC类网络个数的算法
- EditText+Button组合自定义视图
- 如果
- python生成器Generator
- java.lang.ClassNotFoundException web项目加载时找不到类
- 数据有效性跨表引用的解决
- eclipse maven plugin link 插件 安装 和 配置
- 下载地址 集合
- 关于字符编码 g_convert(), g_locale_to_utf8()
- 用MFC实现打开word文件
- Ubuntu12.04下安装Scala
- 扯谈web安全之JSON
- XML DOM学习