从servlet目录读取静态文件。

4
我希望告诉我的Java Servlet忽略对静态文件的调用,例如,如果文件存在-只需返回实际文件而不实际加载Servlet。
在我的例子中,我有一个NetBeans中的MyServlet,在“web pages”目录下放置了image.jpg。
接下来,我生成了一个.war文件并将其放置在tomcat/webapps下。
当我尝试请求localhost:8080/MyServlet/image.jpg时,文件未加载,而是执行了servlet。
我想要的是,如果文件存在,则返回它,否则运行servlet。
是否有一种快速实现的方法?

你混淆了servlet和web应用程序。通常,静态内容由标准(容器相关)servlet提供,并且不需要任何修改即可正常工作。你的servlet映射是什么样子的(我猜它类似于“/*”)? - home
3个回答

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

如果您遵循上述方法,应用程序中的URL可能会像这样:

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

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

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


1
通常情况下,您可以通过servlet映射或将静态资源放在servlet映射之外来处理此问题。
否则,如果请求映射到您的servlet,则需要(a)在servlet中检查文件,并重定向到实际文件名或自己返回图像流,或者(b)编写一个过滤器,了解足够有关您的Web应用程序结构的信息,以查看请求是否应由您的servlet或容器处理。
如果您描述了您的用例,那么我们可以更轻松地提供帮助。

我的servlet-mapping的url-pattern设置为/,现在似乎流式传输文件是解决方案。 - galchen

0

你确定你把image.jpg放在web.xml指定的网站根目录下了吗? - Thorbjørn Ravn Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接