Java googleappengine上的Servlet URL模式

Java googleappengine上的Servlet URL模式,java,google-app-engine,servlets,url-pattern,Java,Google App Engine,Servlets,Url Pattern,我尝试使用url模式做一些简单的工作,该模式在本地主机上运行良好,但在GAE服务器上部署应用程序时失败。 我想做的是下一步: 一个servlet为所有请求提供服务 这个servlet将一些请求转发到jsp文件(在大多数情况下) 为此,我配置了web.xml: <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.mycompany.MyServle

我尝试使用url模式做一些简单的工作,该模式在本地主机上运行良好,但在GAE服务器上部署应用程序时失败。 我想做的是下一步:

  • 一个servlet为所有请求提供服务
  • 这个servlet将一些请求转发到jsp文件(在大多数情况下)
为此,我配置了web.xml:

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.mycompany.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>MyServlet</welcome-file>
</welcome-file-list>

MyServlet
com.mycompany.MyServlet
MyServlet
/MyServlet
MyServlet
这在GAE localhost服务器上运行良好,但当应用程序部署在真正的GAE服务器上时,它就不起作用了。问题是,当我访问myapp.appspot.com/anythinggae响应时:

错误:找不到 在此服务器上找不到请求的URL/任何内容


有人能帮我吗,请?

您缺少
Servlet
元素。
Servlet映射
元素本身是不够的。基于web.xml的构建尝试以下方法

    <servlet>
            <servlet-name>MyServlet</servlet-name>
            <servlet-class>package.path.to.my.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
请注意,这意味着您正在war文件中部署所有xmls/css文件。如果不想这样做,请相应地调整“包含路径”属性

另外,要让所有请求都转到一个servlet,只需使用以下url模式

<url-pattern>/*</url-pattern>
/*

使用此模式时请记住,如果您有图像/css文件/jsp文件/etc,此servlet将拦截对它们的请求。因此,您将拥有某种逻辑来转发您不感兴趣的请求。如果你做的是直截了当的事情,这可能就足够了;但是,随着您变得越来越复杂(例如缓存css文件/图像文件),您可能需要考虑添加一个静态资源过滤器。

抱歉,代码显示不好。首先必须是servlet声明为“MyServlet”。谢谢Dave。发布代码是一个错误,但我的web.xml中已经有servlet标记。事实上,它在localhost中运行良好…:(如果是这种情况,那么您可能应该更新您的答案,以包含完整的web.xml、完整堆栈跟踪(转到
https://appengine.google.com/dashboard?&app_id=s~YOUR-APPSPOT-SUBDOMAIN
其中
YOUR-APPSPOT-SUBDOMAIN
来自
YOUR-APPSPOT-SUBDOMAIN.APPSPOT.com
,它应该位于右下角的
错误部分)。此外,可能您的web xml没有正确上载。如果您还没有,您可以通过调整appengine-web.xml并添加静态文件元素(如我所述)进行验证。谢谢dave。我认为存在部署问题,因为我已重新部署,现在一切正常!
<url-pattern>/*</url-pattern>