问题是这样的,最近部署一个项目,发现每次访问首页的时候老是报如下的错误:
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1284) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:965) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.pcitc.sso.server.uic.utils.DemoFilter.doFilter(DemoFilter.java:62) com.pcitc.sso.client.SSOFilter.doFilter(SSOFilter.java:138) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) root cause java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:101) org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:135) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:183) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.pcitc.sso.server.uic.utils.DemoFilter.doFilter(DemoFilter.java:62) com.pcitc.sso.client.SSOFilter.doFilter(SSOFilter.java:138) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) root cause java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1493) org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:101) org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:135) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:183) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.pcitc.sso.server.uic.utils.DemoFilter.doFilter(DemoFilter.java:62) com.pcitc.sso.client.SSOFilter.doFilter(SSOFilter.java:138) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
按照报错信息,问题应该是出在jstl上面,要么是没有导入jstl的jar包,要么是没有引入jstl标签,我检查了项目发现这些都没有问题,按照网上的很多做法,依然没有解决我的问题,这个问题大概折腾了我大概一周左右,依然没法解决,最后非常沮丧,可是沮丧归沮丧,问题总归是要处理的,而我又坚信没有解决不了的问题。于是我想到了我之前部署的该项目有个版本是没有问题,现在也已经在线上运行良好,所以我就想到了对比两个项目的jar包,我以为是这个版本新加的某些jar包有问题,所以一个一个的对jar包,把出问题的这个版本多余的jar包全部删除了,保持和之前没有问题的那个版本的jar包一模一样,可是问题还没有解决,最后我把之前没有问题的版本的jar全部拷贝过来全部替换掉现在的jar包,问题于是很奇怪的解决了,我很纳闷,于是一个个的找问题,最后发现问题出现的jstl上面,都是jstl1.2版本的,居然一个有问题,最后我把本地maven仓库的jstl删除了,重新下载这个版本的jstl,也没有问题了。最后我觉得问题可能是,我刚好下载到了有问题的jstl,估计jstl的开发人员当时刚好提交了有问题的jstl,可刚好被我下载到了,虽然最后又进行了修复,可是我的仓库里面已经是有问题的jstl了。
解压有问题的jstl的jar包,报如下错误:
问题终于解决了,非常开心。下面附上两个同样版本的jstl,一个有问题,一个没有问题,有兴趣的可以自己试试。点击下载两个jstl