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

使用Tomcat插件的简单Gradle项目不起作用

苏彦君
2023-03-14

我有以下问题--我用com.bmuschko.tomcat插件创建了一个名为“Spring”的简单Gradle项目。但是当我运行Gradle build和TomcatRun任务并输入http://localhost:8080/spring时,我得到404错误。当然,在构建和服务器启动期间,我没有收到任何错误消息。有Build.Gradle:

apply plugin: 'com.bmuschko.tomcat'
apply plugin: 'java'
apply plugin: 'war'

group 'training'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    def tomcatVersion = '9.0.17'
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
            "org.apache.tomcat.embed:tomcat-embed-logging-juli:9.0.0.M6",
            "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"
}

tomcat {
    httpProtocol = 'org.apache.coyote.http11.Http11Nio2Protocol'
    ajpProtocol  = 'org.apache.coyote.ajp.AjpNio2Protocol'
}

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.bmuschko:gradle-tomcat-plugin:2.5'
    }
}

我还有一个名为hello.jsp的jsp文件放在src/main/webapp中:

<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">

<title>Hello Gradle Web App</title>
</head>
<body>

<jsp:useBean id="greeting" class="test.Test"/>

<h3>${greeting.hello}</h3>

</body>
</html>

test.java文件放在src/main/java/test中:

package test;

public class Test {
    public String getHello() {
        return "Hello Spring!";
    }
}

如您所见,服务器似乎正在成功启动:

17:46:12: Executing tasks 'build tomcatRun'...

> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :war UP-TO-DATE
> Task :assemble UP-TO-DATE
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build UP-TO-DATE
> Task :tomcatRun
Started Tomcat Server
The Server is running at http://localhost:8080/spring

共有1个答案

步联
2023-03-14

正如注释中指出的,您的JSP文件是namehello.JSP

Tomcat文档(conf/web.xml)说明如下:

========================默认欢迎文件列表========================================

当请求URI引用目录时,默认servlet在该目录中查找“欢迎文件”,如果存在,则查找相应的资源URI以供显示。如果不存在欢迎文件,则默认servlet要么提供目录列表(有关如何自定义的内容,请参见默认servlet配置),要么返回404状态,这取决于listings设置的值。

默认欢迎文件为:

  • index.html
  • index.htm和
  • index.jsp

那这是什么意思呢?

当您将浏览器指向http://localhost:8080/spring时,请求URL中没有列出特定的页面。Tomcat以及其他web服务器仍然会尝试交付一个页面,以便浏览器能够显示一些东西。默认情况下,如果URL中未指定页面,则传递默认主页。由于您的文件名为hello.jsp,因此它不被认为是一个受欢迎的文件,因此Tomcat会传递404错误。

您可以通过以下方法解决此问题

  • 将浏览器指向http://localhost:8080/spring/hello.jsp
  • hello.jsp重命名为index.jsp
  • web.xml中自定义welcome-file-list以包含hello.jsp

话虽如此,问题并不在于com.bmuschko.tomcat插件,也不在于您的构建文件。

 类似资料:
  • 问题内容: 我正在使用sqlite4java启动一个简单的Java测试项目,并使用Java进行构建。 我可以轻松地下载核心sqlite4java库,但是我不确定哪种最好的方式(任意!)来获取下载本地库并将它们放在正确位置的好处。 这是我的build.gradle文件: 但是,当我运行一个简单的测试时,我得到: (我是从IntelliJ内部构建的,但是我正在使用gradle构建选项-因此,我认为运行

  • 多项目Gradle构建中的子项目如何使用根项目的buildSrc文件夹中定义的Gradle插件? 我基本上有: 设置。格拉德尔 buildSrc/src/main/groovy/com/example/conventions/JavaConventionsPlugin。groovy buildSrc/build。格拉德尔 通用/构建。格拉德尔 我正在尝试在项目中应用插件: 但是上面说 id为“co

  • 我有以下多项目分级建设: 3个子项目分级文件中的每一个目前都非常简单: 以下是我想要达到的目标: 当我从父目录运行时,我希望所有三个子项目都使用0.1.5版本生成;因此,、和。但是,当前我的构建已经执行此操作... 如果客户端和共享JAR成功构建,我还希望将它们发布到我的私有Artifactory repo中。(我不希望发布服务器JAR)。 我的问题是:如何将这个片段添加到我的项目中,这样从父目录

  • 设置.分级 Build.Gradle 编辑:要复制,只需克隆repo https://github.com/kic/stackoverflow/tree/master/gradleproblem并在bar目录中尝试

  • 我有一个多项目的gradle构建,其中一个子项目是应用Artifactory插件(版本4.2.0),并配置contextUrl和resolve repoKey。 它设置一个简单的配置和依赖项,然后有一个复制任务来检索依赖项作为zip文件并将其解压缩到目录中。 然而,当复制任务运行时,我得到下面的错误。我做错了什么?这是Artifactory插件或gradle的问题,还是。。。? 问题似乎与该项目是