HTTP Status 500 - Unable to compile class for JSP解决方案

 

产生问题分析:web

使用maven对jar包进行管理,所以当使用SpringMVC框架的时候确定会手动的配置 servlet-api.jar 、jsp-api.jar等jar包到项目中,不然一些jsp确定会无情的报错(找不到对应jar包的),可是当配置了servlet-api.jar以后,就可能会与tomcat容器中的jar包冲突,致使出现以上问题,没法找到jsp,该问题在tomcat8即以上才会出现,在tomcat7即如下是没有问题的api

那么若是使用tomcat8及更高版本的童鞋们就可能会用到如下解决方案了tomcat

解决方案:app

  • 方案一:发布项目后,到webapps目录下把项目中引用的servlet-api-xxx.jar移除掉,从新启动tomcat,记得是从新启动tomcat,而不是从新发布项目
  • 方案二:直接在项目中添加 Server Library 

        在项目上右键-->build Path -->Add Library -->Server Library --> Apache Tomcat v8.0(前提是,已经将tomcat8及更高版本集成到Eclipse、或MyEclipse或使用的其余IDE中)框架

以上两种解决方案,对于使用maven项目总有点治标不治本,使用maven目的就是对jar包依赖彻底控制,若是到时候,还须要手动添加jar或者删除jar,那在团队协做的时候,无疑是很麻烦的,因此在这再提供一种解决方案webapp

 

  • 方案三:添加scope限制为provided

加provided限制:jsp

容器或JDK已提供范围,表示该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译的classpath中加载和使用,打包的时候不会包含在目标包中。最多见的是j2ee规范相关的servlet-api和jsp-api等jar包,通常由servlet容器提供,无需在打包到war包中,若是不配置为provided,把这些包打包到工程war包中,在tomcat6以上版本会出现冲突没法正常运行程序(版本不符的状况)maven

<dependency>  
    <groupId>tomcat</groupId>  
    <artifactId>servlet-api</artifactId>  
    <version>5.5.23</version>  
    <scope>provided</scope>  
</dependency>