我在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
...
答案 0 :(得分:3)
在appengine中,有两种环境类型(截至目前):
您无法同时使用appengine-web.xml
和app.yaml
:
app.yaml
配置appengine需要知道的所有内容appengine-web.xml
和logging.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中。