Java 在Google AppEngine中使用app.yaml

Java 在Google AppEngine中使用app.yaml,java,google-app-engine,yaml,Java,Google App Engine,Yaml,我正在AppEngine上运行Java应用程序,我想使用app.yaml。我已经阅读了文档,并在WEB-INF文件夹中创建了一个app.yaml应用程序,其中包含以下内容 application: myprojectname version: 1 runtime: java api_version: 1 welcome_files: - index.jsp - index.html handlers: - url: /oblivion/* servlet: myprojectna

我正在AppEngine上运行Java应用程序,我想使用app.yaml。我已经阅读了文档,并在WEB-INF文件夹中创建了一个app.yaml应用程序,其中包含以下内容

application: myprojectname
version: 1
runtime: java
api_version: 1

welcome_files:
  - index.jsp
  - index.html

handlers:
- url: /oblivion/*
  servlet: myprojectname.CronUpdater
其中myprojectname是项目的名称

但是,当我访问localhost:8888/oblivion或localhost:8888/oblivion/I时,我会得到一个

HTTP错误404

访问/遗忘问题。原因:

NOT_FOUND
原因可能是什么

这是目录的结构(已截断)


您需要列出servlet的完整包和类,而不是使用myprojectname.CronUpdater。所以如果CronUpdater在包中

com.mycompany.servlets

你需要把

servlet:com.mycompany.servlets.CronUpdater


在你的app.yaml中

在appengine中,有两种环境类型(截至目前):

  • 灵活的环境
  • 标准环境
您不能同时使用
appengine web.xml
app.yaml

  • 灵活的环境使用
    app.yaml
    配置appengine需要了解的所有信息
  • 标准环境使用
    appengine web.xml
    logging.properties
在这里,我假设您希望在“灵活环境”模式下使用appengine。通常,
app.yaml
位于
appengine
文件夹中,就在您的
main
文件夹中

从中,您应该有:

myprojectname/
 [pom.xml]         (optional, only if you use maven)
 [build.gradle]    (optional, only if you use gradle)
 [index.yaml]      (optional, only if you use cloud datastore)
 [cron.yaml]       (optional, only if you use cron job)
 [dispatch.yaml]   (optional, only if you route to services)
 src/main/
   appengine/
     app.yaml
   java/
     com.example.mycode/
       MyCode.java
   webapp/
     [index.html]
     [index.jsp]
     WEB-INF/
       [web.xml]
最后一件事:应该在
web.xml
文件中定义处理程序。在
app.yaml
中,您应该只拥有:

handlers:
  - url: /.*
    script: this field is required, but ignored
在您的
web.xml
中:

<servlet>
    <servlet>
      <servlet-name>CronUpdater</servlet-name>
      <servlet-path>myprojectname.CronUpdater</servlet-path>
    </servlet>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>CronUpdater</servlet-name>
    <url-pattern>/oblivion/*</url-pattern>
</servlet-mapping>

CronUpdater
myprojectname.CronUpdater
1.
CronUpdater
/遗忘/*

希望这有帮助

但是当我运行服务器时。使用Run->Run。。它进行编译,就好像它忽略了.yaml文件。当然,它进行编译,javac对app.yml文件一无所知。您需要输入servlet的完全限定类名,否则容器将找不到您的代码。您也不需要“api_version:1”行文档:建议在标准环境中替换app.yaml的appengine-web.xml。我知道这个答案很旧,但可能需要更新?
<servlet>
    <servlet>
      <servlet-name>CronUpdater</servlet-name>
      <servlet-path>myprojectname.CronUpdater</servlet-path>
    </servlet>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>CronUpdater</servlet-name>
    <url-pattern>/oblivion/*</url-pattern>
</servlet-mapping>