当前位置: 首页 > 知识库问答 >
问题:

带有Spring Boot的Spring MVC不适用于Eclipse的Tomcat服务器

司马念
2023-03-14

我尝试按照Spring入门指南“使用Spring MVC提供Web内容”,该指南除了使用Maven之外还使用了Spring Boot和Gradle。我为Eclipse安装了Gradle插件。

我希望使用Eclipse中的Tomcat服务器运行应用程序,因为我还遵循了“将Spring Boot JAR应用程序转换为WAR”指南,并更改了指南中提到的“build.gradle”文件。基本上,我添加了行“apply plugin:'eclipse-wtp'”、“apply plugin:'war'”、配置{providedRuntime}和providedRuntime(“org.springframework.boot:spring-boot-starter-tomcat”);并将jar设置更改为war设置。下面是build.gradle文件:

buildscript {
repositories {
    maven { url "http://repo.spring.io/libs-milestone" }
    mavenLocal()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.0.2.RELEASE")
}
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'

eclipse.project {
  natures 'org.springsource.ide.eclipse.gradle.core.nature'
}

war {
    baseName = 'gs-serving-web-content'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-milestone" }
}

configurations {
    providedRuntime
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    testCompile("junit:junit")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}
package hello;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class HelloWebXml extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

除此之外,我还需要稍微修改一下pom.xml,因为它抱怨Java SE7的特性。将下面的行添加到pom.xml中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
            <showWarnings>true</showWarnings>
            <compilerVersion>1.7</compilerVersion>
            <fork>true</fork>
        </configuration>
</plugin>

其余部分与入门指南相同。

为了建筑,我跑

gradlew eclipseWtp
gradlew clean build

提前谢了。

共有1个答案

韶弘壮
2023-03-14

我想您会遇到与servlet-apiJAR的冲突。如果使用嵌入式Tomcat进行开发(创建JAR),则需要在compile范围内的类路径中包含servlet-apiJAR。当部署到现有的Tomcat安装(创建WAR)时,必须在provide作用域中声明servlet-apijar,否则它将最终出现在WEB-INF/lib中,并导致与容器提供的版本冲突。

以下是样例Spring Boot WAR项目中的POM:https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample/POM.xml

请注意spring-boot-starter-tomcat如何使用提供的作用域。

 类似资料:
  • 问题内容: 我正在使用Jersey 2.0(我从http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jaxrs- ri/2.5/jaxrs- ri-2.5.zip 下载)开发了一项休息服务。正在使用Tomcat 7.0.47。我从Eclipse运行Tomcat,而我的机器是Mac。 我正在使用Eclipse工具生成WAR并部署服务。

  • 我开始在eclipse中使用servlet开发java web应用程序,并在本地主机上用tomcat服务器测试它。我已经在tomcat中部署了应用程序,但是当我尝试在浏览器中加载目标url时,我得到了以下堆栈跟踪: ImageServlet类非常清楚地位于我的eclipse工作区的myproject/src/test文件夹中,其中myproject是eclipse项目的名称,test是包。 web

  • 我正试图用glassFish 4.1.1和非常简单的HelloWorld服务在IntelliJ上开发一个RESTful服务,但我不明白为什么它不起作用。根据他们的教程,我根据需要配置了IntelliJ IDEA- https://www.jetbrains.com/help/idea/creating-and-running-your-first-restful-web-service.html#

  • 问题内容: 嗨,我正在用React钩子编程一个页面,并且试图将从服务器获取的数据设置为状态。怎么它不起作用。我从服务器获取数据,但无法将其映射到状态。任何想法可能是什么问题? 来自服务器的数据 问题答案: 是async方法,因此您将无法在其下获取更新的数据。 否则您的代码是好的,如果您循环并显示它,它将反映在DOM中 运行下面的代码片段,并检查HTML和console两者,这将清除流程。

  • 我在Eclipse Mars版本中测试了tomcat v8。我创建了一个动态Web项目,并创建了一个servlet。然而,当我访问HelloWorld servlet时,该网页显示错误404。请问怎么修 HelloWorld Servlet

  • 我试图在tomcat 8上设置jsf 2.3,每当我使用“注入”时,我总是有一个错误,我已经在谷歌上搜索了stackoverflow.com但我找不到解决方案。我已经在上面安装了CDI(焊接),下面是@BalusC示例。如何在Tomcat上安装和使用CDI?然而,我一直有不满意的依赖:没有bean匹配注入点。我想不出来我是不是错过了什么? 配置bean。JAVA 豆。xml faces-confi