从servlet目录中读取静态文件

时间:2011-10-22 18:08:49

标签: java tomcat servlets netbeans

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

在我的例子中,我在netbeans中有一个MyServlet,在“web pages”目录下我放置了image.jpg。

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

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

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

有一种快速实现方法吗?

3 个答案:

答案 0 :(得分:3)

将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   -->

如果您按照上述方法操作,您的应用中的网址可能如下所示:

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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