Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext

 

场景描述

项目中用到spring boot进行带页面的开发,从github上的simples中下载了对应的spring-boot-sample-web-jsp项目,经简单修改之后死活启动不起来,各种异常。spring-boot以简单容易上手为核心宗旨,可为什么在引入jar时就会出现这么多问题呢?

异常信息

异常一:

2016-06-17 11:04:14.216 ERROR 4684 --- [           main] o.s.boot.SpringApplication               : Application startup failed

java.lang.NoClassDefFoundError: javax/servlet/ServletContext
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
    at java.lang.Class.getDeclaredMethods(Class.java:1855)

很显然,这是没有找到ServletContext类导致的,于是乎,异想天开的添加了servlet-api的jar包。 
添加之后,出现异常二:

2016-06-17 11:06:13.860 ERROR 224 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

在网上搜索了各种此异常的解决方案都没有解决成功。

解决方案

在经过多次尝试,几乎要放弃的时候,突然想到一个问题,会不会是因为Intellij集成maven引入jar包时scope设置的问题。

仔细检查pom文件,发现问题可能出现在一下两个地方:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>1.2.3.RELEASE</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <version>7.0.68</version>
      <scope>provided</scope>
    </dependency>

注释掉两个配置中的

<scope>provided</scope>

问题就这么解决了。

总结

这可能是Intellij的一个bug,在使用spring-boot的时候,如果把某个引入的依赖设置为provided,那么在Intellij启动时就会找不到相应的类。因此,此时需要把此项配置给注释掉,但是打包上线的时候并不需要这些依赖,那么在打包的时候就把注释打开,即可。

http://blog.csdn.net/wo541075754/article/details/51698552

 

时间: 2024-09-02 09:10:39

Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext的相关文章

java.lang.NoClassDefFoundError: javax/servlet/ServletContext

  方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即可 因为继承org.springframework.boot.context.web.SpringBootServletInitializer,并重写里面的configure方法,即可将这个项目打成war,并部署到tomcat或其它jee容器中. protected SpringApplicat

java.lang.ClassNotFoundException: javax.servlet.Filter

java.lang.ClassNotFoundException: javax.servlet.Filter:有两个原因:(1)在maven中的作用域,不能是provided,需要是compile就是默认的scope(2)spring-boot-starter-tomcat的版本bug,换个新的或旧的版本试试   I Started a new project with Spring Boot 1.2.3. I'm getting error java.lang.NoClassDefFoundE

jsp-java.lang.NoClassDefFoundError: javax/servlet/Servlet

问题描述 java.lang.NoClassDefFoundError: javax/servlet/Servlet tomcat6.0和MyEclipse发布网站服务端,总是报这个错误,百度了很多方法都没有解决掉问题,求帮助 type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. ex

tomcat6 启动报错 java.lang.NoClassDefFoundError: javax/ejb/CreateException

问题描述 win7系统+jdk1.6+myeclipse8.5启动报错代码严重:Contextinitializationfailedorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'g3ShopBoss'definedinclasspathresource[spring/spring_g3shop.xml]:Instantiationofbeanfailed;nestedexcep

【Java-Webservice】java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException错误

在开发webservice服务的时候客户端老师提示java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException这个错误,搞了好久,原来主要把axis包里面的jaxrpc.jar,拷贝到过程lib下就OK了

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z 的解决

jetty 9 嵌入式开发时,启动正常,但是页面一浏览就报错如下: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z 原因:jetty 9 依赖的servlet-api是3.X版本,如果项目中还有其它第3方开源库隐式依赖了2.x版本的servlet-api,就会报这个错.解决办法:gradle项目中,gradle dependencies 分析所有的依赖项,找出依赖低版本ser

Tomcat5发布项目问题(1):jstl java.lang.NoClassDefFoundError javaxelValueExpression

项目部署到服务器,容器为Tomcat5.5,启动时控制台提示错误: 找不到javax.el.*相关的类,如java.lang.NoClassDefFoundError: javax/el/ExpressionFactory   解决方法:下载javax.el.jar,部署到项目中. 其实使用JSTL(JSP标准标签库)和环境很有关系tomcat6.0和tomcat5.5所需要的包是不同的. 若使用tomcat5.5,建议使用Tomcat5.5 + jstl1.1.2.jar + standard

Exception in thread &amp;amp;quot;main&amp;amp;quot; java.lang.NoClassDefFoundError:

问题描述 <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by

无法装入 servlet:java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException

问题描述 这些是需要导入的包,我全部都导入了,<classpathentrykind="lib"path="/xmlbeans/resolver.jar"/><classpathentrykind="lib"path="/xmlbeans/saxon9.jar"/><classpathentrykind="lib"path="/xmlbeans/saxon9-ant.