WebServlet注释正在使用中,但GAE正在尝试查找web.xml

时间:2018-03-28 18:32:30

标签: java google-app-engine servlets google-cloud-platform build.gradle

AFAIK如果我使用WebServlet注释我不应该需要web.xml。 我正在使用gradle尝试使用Google App Engine Standard本地服务器,但尝试查找web.xml失败。

  

C:\ Projects \ x \ x \ Research \ testeng> gradle appengineRun
2018年3月28日   1:17:18 PM java.util.prefs.WindowsPreferences
警告:   无法在root上打开/创建prefs根节点Software \ JavaSoft \ Prefs   0x80000002。 Windows RegCreateKeyEx(...)返回错误代码5   28,20188 1:17:18 PM   com.google.apphosting.utils.config.AbstractConfigXmlReader   readConfigXml
SEVERE:收到异常处理   C:\项目\ X \ X \研究\ testeng \建立\爆炸,testeng \ WEB-INF \ web.xml中
  com.google.apphosting.utils.config.AppEngineConfigException:无法   定位   C:\项目\ X \ X \研究\ testeng \构建\分解-testeng \ WEB-INF \ web.xml中

我做错了什么......?

我得到了一个servlet的存根

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}

我的build.gradle非常接近Using Gradle and the App Engine Plugin中使用的内容:

buildscript {    // Configuration for building
  repositories {
    jcenter()    // Bintray's repository - a fast Maven Central mirror & more
    mavenCentral()
  }
  dependencies {
    classpath 'com.google.cloud.tools:appengine-gradle-plugin:+'    // latest App Engine Gradle tasks
  }
}

repositories {   // repositories for Jar's you access in your code
  maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed)
  }
  mavenCentral()
  jcenter()
}

apply plugin: 'java'                              // standard Java tasks
apply plugin: 'war'                               // standard Web Archive plugin
apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks

sourceSets {
   // main.kotlin.srcDirs += "src/main/kotlin"
    main.java.srcDirs += "src/main/java"
}

dependencies {
  compile 'com.google.appengine:appengine-api-1.0-sdk:+'  // Latest App Engine Api's
  providedCompile 'javax.servlet:javax.servlet-api:3.1.0'

  compile 'jstl:jstl:1.2'

// Add your dependencies here.
//  compile 'com.google.cloud:google-cloud:+'   // Latest Cloud API's http://googlecloudplatform.github.io/google-cloud-java

  testCompile 'junit:junit:4.12'
  testCompile 'com.google.truth:truth:0.33'
  testCompile 'org.mockito:mockito-all:1.10.19'

  testCompile 'com.google.appengine:appengine-testing:+'
  testCompile 'com.google.appengine:appengine-api-stubs:+'
  testCompile 'com.google.appengine:appengine-tools-sdk:+'
}

// Always run unit tests
appengineDeploy.dependsOn test
appengineStage.dependsOn test

appengine {  // App Engine tasks configuration
  deploy {   // deploy configuration

  }
}

test {
  useJUnit()
  testLogging.showStandardStreams = true
  beforeTest { descriptor ->
     logger.lifecycle("test: " + descriptor + "  Running")
  }

  onOutput { descriptor, event ->
     logger.lifecycle("test: " + descriptor + ": " + event.message )
  }
  afterTest { descriptor, result ->
    logger.lifecycle("test: " + descriptor + ": " + result )
  }
}

group   = "com.testeng"        // Generated output GroupId
version = "1.0-SNAPSHOT"       // Version in generated output

sourceCompatibility = 1.8     // App Engine Flexible uses Java 8
targetCompatibility = 1.8     // App Engine Flexible uses Java 8

3 个答案:

答案 0 :(得分:1)

如果您使用带有Java的GAE标准,则需要thisweb.xml,因为它们用于描述您的应用的配置方式。

您可以查看文档,了解应用程序所需的配置设置。

答案 1 :(得分:0)

解决了它。

我使用的appengine-web.xml与appengine-web.xml Reference中的示例相同。 添加了运行时元素并删除了未使用过这就是它现在的样子:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <runtime>java8</runtime>
  <threadsafe>true</threadsafe>
</appengine-web-app>

答案 2 :(得分:0)

这不是答案,而是在其他人遇到类似情况时节省时间的提示。

我同时拥有一些servlet的web.xml条目和一些带WebServlet注释的servlet。在这种情况下,带注释的servlet不会在GAE Java Standard环境中注册为处理程序。在本地没有问题。