【问题标题】:read static files from servlet directory从 servlet 目录读取静态文件
【发布时间】:2011-12-13 06:41:26
【问题描述】:

我想告诉我的 java servlet 忽略对静态文件的调用,例如,如果文件存在 - 只返回实际文件而不实际加载 servlet。

在我的示例中,我在 netbeans 中有一个 MyServlet,并在“网页”目录下放置了 image.jpg。

接下来,我生成了一个.war文件,放在tomcat/webapps下

当我尝试向 localhost:8080/MyServlet/image.jpg 发出请求时 - 文件未加载,而是执行 servlet。

我想要的是,如果文件存在 - 它将返回它,否则将运行 servlet。

有没有快速实现的方法?

【问题讨论】:

  • 您将 servlet 和 Web 应用程序混为一谈。通常,静态内容由标准(依赖于容器)servlet 提供,并且无需任何修改即可工作。您的 servlet 映射是什么样的(我想它类似于 /*)?

标签: java tomcat servlets netbeans


【解决方案1】:

将您的 servlet 映射到 //* 不是实现 servlet 的标准方式。通常,您将全局(控制器)servlet 映射到类似/myServlet/* 的路径。 Tomcat 的默认 servlet 已经可以为您的静态内容提供服务。它在<tomcat>/conf/web.xml 中配置。内联文档摘录:

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->

如果您遵循上述方法,您的应用程序中的 URL 可能如下所示:

静态资源:http://myserver/myWAR/images/image.gif

您的 servlet 的 URL:http://myserver/myWAR/myServlet/*(* := 通配符)

当然,还可以使用更复杂的选项,例如将静态内容卸载到外部 Web 服务器。您也可以覆盖标准配置,但在大多数情况下,这不是必需的(至少根据我的经验)。

【讨论】:

    【解决方案2】:

    通常,您会通过 servlet 映射或将静态资源远离 servlet 映射来处理此问题。

    否则,如果请求映射到您的 servlet,您需要 (a) 检查 servlet 中的文件,并重定向到真实文件名或自己流回图像,或者 (b) 编写一个过滤器对您的 webapp 的结构有足够的了解,以了解该请求是否应该由您的 servlet 或容器来处理。

    如果您描述了您的用例,那么提供更多帮助会更容易。

    【讨论】:

    • 我的 servlet-mapping 的 url-pattern 设置为 / ,现在看来流文件是解决方案
    【解决方案3】:

    对于静态文件,您很可能只需要使用 http://localhost:8080/image.jpg(即 URL 中没有 MyServlet 部分)

    【讨论】:

    • 你确定把image.jpg放在web.xml表示是web根目录的文件夹里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2010-11-11
    • 2013-03-15
    • 2015-02-05
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多