Java 在Google AppEngine中使用app.yaml
我正在AppEngine上运行Java应用程序,我想使用app.yaml。我已经阅读了文档,并在WEB-INF文件夹中创建了一个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
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
:
- 灵活的环境使用
配置appengine需要了解的所有信息app.yaml
- 标准环境使用
和appengine web.xml
logging.properties
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>