剛到公司實習,導入項目到eclipse中,部署到tomcat運行后,控制台報錯
java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1023) org.apache.jsp.index_jsp._jspService(index_jsp.java:85) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
在網上搜了下,說是因為項目中lib中的jar包和tomcat下lib的jar沖突了,所以報
java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor錯誤
解決方案為:
修改tomcat目錄下的conf/context.xml如下:
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
<Loader delegate="true" />
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>
加入了上面的粗體配置后,重啟tomcat沒有報錯!
但是,再一次啟動tomcat時,還會報
java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor
非常疑惑,找到之前修改的配置文件context.xml,修改的內容沒有了,配置文件重置了!
最后,網上再次查找,解決方案如下:
1. 在工作空間server 目錄下查找tomcat 下面的context.xml 。我的路徑是D:\Develop\workspace\Servers\Tomcat v7.0 Server at localhost-config 。下面有 context.xml,修改此文件。
2. 刪除Tomcat 目錄下server中catalina的相關項目。我的路徑是D:\apache\apache-tomcat-7.0.56\work\Catalina\localhost\ 。將報錯項目fund刪除即可。
下次重啟Tomcat 時,此項目就使用新的context.xml 文件了。
最后,完美解決問題!
第二次更新,本來以上解決方法可以解決,但是好像重啟tomcat后還是會不行!
最終找到了終極解決方法!適用於eclispe
新建Tomcat后,在Package Expplorer中會出現一個Servers的項目,如下圖

我們打開context.xml配置文件

在這個文件中添加之前說的一句話
最終,再沒有出現過這個問題!
