0

我尝试使用注释将 servlet 映射到 url,而不是 web.xml 中的 servlet 映射,如下所示:

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "GuestbookServlet", urlPatterns = "/guestbook")
public class GuestbookServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");
    }
}

我还在 web.xml 中声明了 servlet 的 3.0 规范:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0"
    metadata-complete="false">

</web-app>

但是,当我在本地环境中运行它时,返回的响应是 404。

但是,如果我只是在 web.xml 中映射 servlet,它就可以工作。我究竟做错了什么?GAE 仍然不支持 3.0 规范吗?

4

3 回答 3

5

GAE/J 不支持 Servlet 3.0 规范

它仍在路线图上:https ://developers.google.com/appengine/docs/features#roadmap_features

您可以在此问题上加注星标以帮助表明您对此功能的支持:https ://code.google.com/p/googleappengine/issues/detail?id=3091

不过这张票已经开了很长时间了。

于 2013-06-22T06:20:40.993 回答
0

当我运行以下 JSP 代码时,

Server info == <%=application.getServerInfo()%><br/>
Major==<%=application.getMajorVersion()%><br/>
Minor==<%=application.getMinorVersion()%><br/>
JSP version is <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()%><br/>

我懂了

服务器信息 == Google App Engine/Google App Engine/1.8.1 Major==2 Minor==5 JSP 版本是 2.1

你可以自己运行它。

于 2013-06-22T03:42:10.267 回答
0

AppEngine 现在支持 Servlet 3.1。

...除了支持更新的 JDK 和 Jetty 9 与 Servlet 3.1 规范...

公告: https ://cloudplatform.googleblog.com/2017/06/Google-App-Engine-standard-now-supports-Java-8.html

这是一个代码示例

于 2017-11-04T22:24:29.477 回答