Google App Engine上的Servlet URL模式

时间:2011-12-29 23:51:10

标签: java google-app-engine servlets url-pattern

我正在尝试使用url-pattern进行一些简单的工作,该工作在localhost上运行良好,但在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>

这适用于GAE localhost服务器,但是当应用程序部署在真正的GAE服务器上时,它不会。问题是,当我访问myapp.appspot.com/anything时GAE响应:

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

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您错过了Servlet元素。 Servlet-mapping元素本身是不够的。建立你的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>

当然,将package.path.to.my.servlet替换为MyServlet类的实际包。完成此操作后,您可以放入多个servlet映射元素,将不同的URL映射到同一个servlet。

如果您的appspot网址发生了这种情况,您可以尝试确保将所有静态文件部署到您的appspot ...

    <static-files>
      <include path="/**.css" />
      <include path="/**.xml" />
    </static-files>

请注意,这意味着您要在war文件中部署所有xmls / css文件。如果您不想这样做,请相应地调整包含路径属性。

此外,要将所有请求转到一个servlet,只需使用以下url模式...

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

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