2

我正在尝试使用 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 /任何内容。

任何人都可以帮助我吗?

4

1 回答 1

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。

如果您的 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 文件/图像文件),您可能会想要考虑添加静态资源过滤器。

于 2011-12-30T00:27:02.167 回答