在Google AppEngine中使用app.yaml

时间:2010-11-19 14:40:16

标签: 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: myprojectname.CronUpdater

其中myprojectname是项目的名称。

但是当我访问localhost:8888 / oblivion或localhost:8888 / oblivion /我得到了

HTTP错误404

访问/遗忘的问题。原因是:

NOT_FOUND

可能是什么原因?

这是目录的结构(截断)

pratik@pratik-desktop:~/workspace/myprojectname/war$ ls -LR
index.html  index.jsp  WEB-INF

./WEB-INF:
appengine-generated  app.yaml  cron.yaml  logging.properties
appengine-web.xml    classes   lib        web.xml

...

2 个答案:

答案 0 :(得分:3)

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

  • 灵活的环境
  • 标准环境

您无法同时使用appengine-web.xmlapp.yaml

  • 灵活的环境使用app.yaml配置appengine需要知道的所有内容
  • 标准环境使用appengine-web.xmllogging.properties

在这里,我假设你想在' 灵活环境'中使用appengine。模式。通常,app.yaml位于appengine文件夹中,位于main文件夹内。

Google Cloud Platform doc开始,您应该:

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>

希望这有帮助!

答案 1 :(得分:2)

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

com.mycompany.servlets

你需要把

servlet: com.mycompany.servlets.CronUpdater

在你的app.yaml中。