简体   繁体   English

org.springframework.web.SpringServletContainerInitializer无法转换为javax.servlet.ServletContainerInitializer — Eclipse Spring项目

[英]org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer — Eclipse Spring Project

please let me begin by telling you what I intend to do. 请让我先告诉您我打算做什么。 I intend to follow through the tutorial on 'Building a RESTful Web Service' exactly as is mentioned in the Springframework's website http://spring.io/guides/gs/rest-service/ 我打算完全按照Springframework网站http://spring.io/guides/gs/rest-service/中的介绍来学习有关“构建RESTful Web服务”的教程。

My problem is setting up the environment so I can launch a first prototype. 我的问题是设置环境,以便我可以启动第一个原型。 I am reliant on the Eclipse IDE on a Windows 7 64-bit machine. 我依赖于Windows 7 64位计算机上的Eclipse IDE。 The project is based on a 'gradle' build file. 该项目基于“ gradle”构建文件。 I get the error when I try to run the project using the build.gradle. 当我尝试使用build.gradle运行项目时出现错误。 Here is how I am trying to run the project. 这是我尝试运行项目的方式。

At the project explorer window, right-click on the project>Run As>Gradle build>tomcatrun 在项目资源管理器窗口中,右键单击项目>运行方式> Gradle build> tomcatrun

The build.gradle file is as follows: build.gradle文件如下:

apply plugin: 'war'
apply plugin: 'tomcat'
apply plugin: 'java'
apply plugin: 'propdeps'
apply plugin: 'propdeps-maven'
apply plugin: 'propdeps-idea'
apply plugin: 'propdeps-eclipse'
apply plugin: 'eclipse'
apply plugin: 'idea'

buildscript {
  repositories {
    mavenCentral()
    maven {
      url "http://download.java.net/maven/2"
    }
    maven { url 'http://repo.spring.io/plugins-release' }
  }

  dependencies {
    classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:0.9.8'
    classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.1'
  }
}


repositories {
    mavenCentral()
}

dependencies {
    def tomcatVersion = '7.0.12'
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
            "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
    tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
      exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
    }

    compile 'org.springframework:spring-core:3.2.3.RELEASE'
    compile 'org.springframework:spring-webmvc:3.2.3.RELEASE'
    compile 'com.jayway.jsonpath:json-path:0.8.1'

    compile 'org.slf4j:slf4j-api:1.7.5'
    runtime 'org.slf4j:slf4j-jdk14:1.7.5'
    runtime 'com.fasterxml.jackson.core:jackson-core:2.2.2'
    runtime 'com.fasterxml.jackson.core:jackson-databind:2.2.2'
    runtime 'javax.xml.bind:jaxb-api:2.2.9'

    provided 'javax.servlet:javax.servlet-api:3.0.1' 

    testCompile 'com.jayway.jsonpath:json-path-assert:0.8.1'
    testCompile 'org.springframework:spring-test:3.2.3.RELEASE'
    testCompile 'junit:junit:4.+'
    testCompile "org.mockito:mockito-all:1.9.5"

}

task wrapper(type: Wrapper) {
    gradleVersion = '1.6'
}

tomcatRunWar.contextPath = ''

I think the problem is in correctly defining dependency with the package. 我认为问题出在正确定义与包的依赖关系。 'javax.servlet:javax.servlet-api:3.0.1' 'javax.servlet:javax.servlet-api:3.0.1'

Some other references on the web mention supplying the 'provided' attribute in the build file. 网络上的其他一些参考文献提到在构建文件中提供了“已提供”属性。 That keyword is indeed present in the file. 该关键字确实存在于文件中。 I tried looking up how to do the same on some gradle documentation (in case something was missing) but I can't locate the problem. 我尝试在某些gradle文档中查找如何做同样的事情(以防万一某些东西丢失了),但是我找不到问题所在。 The tutorial assumes that you're running the build in a linux shell. 本教程假定您正在linux shell中运行构建。 I think there's some thing about using the eclipse IDE that triggers the error. 我认为使用eclipse IDE会触发错误。 Any help will be appreciated. 任何帮助将不胜感激。 Here is the WebApplicationInitializer file: 这是WebApplicationInitializer文件:

// {!begin top}
package com.yummynoodlebar.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;
import java.util.Set;

public class WebAppInitializer implements WebApplicationInitializer {

  private static Logger LOG = LoggerFactory.getLogger(WebAppInitializer.class);
// {!end top}

  // {!begin onStartup}
  @Override
  public void onStartup(ServletContext servletContext) {
    WebApplicationContext rootContext = createRootContext(servletContext);

    configureSpringMvc(servletContext, rootContext);
  }
  // {!end onStartup}

  // {!begin createRootContext}
  private WebApplicationContext createRootContext(ServletContext servletContext) {
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    rootContext.register(CoreConfig.class);
    rootContext.refresh();

    servletContext.addListener(new ContextLoaderListener(rootContext));
    servletContext.setInitParameter("defaultHtmlEscape", "true");

    return rootContext;
  }
  // {!end createRootContext}

  // {!begin configureTop}
  private void configureSpringMvc(ServletContext servletContext, WebApplicationContext rootContext) {
    AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
    mvcContext.register(MVCConfig.class);

    mvcContext.setParent(rootContext);

    // {!end configureTop}
    // {!begin configureBottom}
    ServletRegistration.Dynamic appServlet = servletContext.addServlet(
        "webservice", new DispatcherServlet(mvcContext));
    appServlet.setLoadOnStartup(1);
    Set<String> mappingConflicts = appServlet.addMapping("/");

    if (!mappingConflicts.isEmpty()) {
      for (String s : mappingConflicts) {
        LOG.error("Mapping conflict: " + s);
      }
      throw new IllegalStateException(
          "'webservice' cannot be mapped to '/'");
    }
    // {!end configureBottom}
  }
}

Thanks a lot! 非常感谢!

I got this error, while configuring my Spring Based Web Application in Tomcat 7(using Maven).In my pom.xml the following dependency was there: 在Tomcat 7中使用Maven配置基于Spring的Web应用程序时遇到此错误。在我的pom.xml中存在以下依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

Due to which the javax.servlet jar is getting included in the deployment artifact. 由于这个原因,javax.servlet jar被包含在部署工件中。 Upon providing the scope "provided" to the above mentioned dependency I was able to fix the issue. 通过提供上述依赖项“提供”的范围,我可以解决此问题。 Hope this helps.... 希望这可以帮助....

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.ClassNotFoundException:javax.servlet.ServletContainerInitializer - java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer Tomcat - 不会加载我的META-INF \ services \ javax.servlet.ServletContainerInitializer文件? - Tomcat - won't load my META-INF\services\javax.servlet.ServletContainerInitializer file? java.lang.ClassCastException:class org.springframework.web.servlet.DispatcherServlet 无法转换为 class jakarta.servlet.Servlet - java.lang.ClassCastException: class org.springframework.web.servlet.DispatcherServlet cannot be cast to class jakarta.servlet.Servlet 无法从eclipse运行spring项目,ClassNotFoundException:org.springframework.web.context.ContextLoaderListener - Can't run spring project from eclipse, ClassNotFoundException: org.springframework.web.context.ContextLoaderListener eclipse中的org.springframework.web.servlet.PageNotFound noHandlerFound - org.springframework.web.servlet.PageNotFound noHandlerFound in eclipse 导入 org.springframework.web 无法解析。 蚀 - The import org.springframework.web cannot be resolved. Eclipse 导入javax.servlet和org.hibernate无法解析-Ubuntu 12.04上的Eclipse Kepler - The import javax.servlet and org.hibernate cannot be resolved - Eclipse Kepler on Ubuntu 12.04 Maven,Eclipse,Spring,Tomcat和ClassNotFoundException SpringServletContainerInitializer - Maven, Eclipse, Spring, Tomcat and ClassNotFoundException SpringServletContainerInitializer Eclipse无法解析org.springframework.extensions。* - Eclipse cannot resolve org.springframework.extensions.* 查找javax.servlet-api的实现(ServletContainerInitializer和ServletContext) - Find Implementation of javax.servlet-api (ServletContainerInitializer and ServletContext)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM