我正在 eclipse 上开发一个 Apache Maven 动态 Web 项目。它使用静态文件(html、css、js)和一个 Java servlet。当我将项目部署到 Google 应用引擎时,Java servlet 不会处理 http 请求。该项目在本地运行正常。servlet 使用 @WebServlet,但向 xml 添加 url-mapping 也不起作用。我使用 mvn appengine:update 进行部署。为了排除故障,我决定从谷歌 GitHub 存储库。我将 java 文件添加到我的 servlet 文件夹,部署后也收到 404 错误。
这是我的 WebServlet 注释:
@WebServlet(name = "requests", description = "Requests: Trivial request",
urlPatterns = "/requests")
这是我的 pom.xml 的主要内容:
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.9.54</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>www</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
</dependencies>
我哪里做错了?
编辑:
<?xml version="1.0" encoding="UTF-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
<warmup-requests-enabled>true</warmup-requests-enabled>
<module>default</module>
<automatic-scaling>
<min-idle-instances>1</min-idle-instances>
<max-idle-instances>automatic</max-idle-instances>
<min-pending-latency>500ms</min-pending-latency>
<max-pending-latency>automatic</max-pending-latency>
<max-concurrent-requests>50</max-concurrent-requests>
</automatic-scaling>
</appengine-web-app>
答案1
我能够重现您的问题。看来您缺少云工具插件。要解决此问题,请在您的 上添加以下内容<plugins>
:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<deploy.promote>true</deploy.promote>
<deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>
</configuration>
</plugin>
如果上述方法不能缓解您的问题,请发布完整的错误日志。谢谢
答案2
在我发布此文章时,Servlet 3.1 注释似乎在本地开发服务器中不起作用。
当我实际部署到 GAE 时,相同的代码能够运行,但是却无法@WebServlet
在本地开发环境中运行。