【问题标题】:Servlet URL patterns on Google App EngineGoogle App Engine 上的 Servlet URL 模式
【发布时间】:2012-01-30 06:48:27
【问题描述】:

我正在尝试使用 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 /anything。

谁能帮帮我,好吗?

【问题讨论】:

  • 对不起,代码显示不好。首先必须是 servlet 声明为“MyServlet”。

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


【解决方案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-mapping 元素以将不同的 url 映射到同一个 servlet。

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

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

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

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

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

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

【讨论】:

  • 谢谢戴夫。发布代码是一个错误,但我的 web.xml 中已经有 servlet 标记。事实上,它在 localhost 中运行良好...... :(
  • 如果是这种情况,那么您可能应该更新您的答案以包含完整的 web.xml、完整的堆栈跟踪(转到 https://appengine.google.com/dashboard?&amp;app_id=s~YOUR-APPSPOT-SUBDOMAIN,其中 YOUR-APPSPOT-SUBDOMAIN 来自 YOUR-APPSPOT-SUBDOMAIN.appspot.com,它应该位于右下角的Errors 部分)。
  • 另外,您的 web xml 可能没有正确上传。您可以通过调整您的 appengine-web.xml 并添加我所描述的静态文件元素来验证,如果您还没有的话。
  • 谢谢戴夫。我认为存在部署问题,因为我已经重新部署,现在一切正常!
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2015-03-05
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多