2011-10-22 58 views
3

读取静态文件,我想告诉我的Java Servlet忽略对静态文件调用,例如,如果该文件存在 - 刚刚返回实际的文件,而无需实际加载的servlet。从servlet目录的

在我的例子,我有在NetBeans一个MyServlet,而“网页”目录下我放在image.jpg文件。

接下来,我生成.war文件并把它放在下的Tomcat/web应用

当我试图使为localhost的请求:8080/MyServlet/image.jpg的 - 未加载的文件中,servlet是改为执行。

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

有没有一个快速的方法来实现它?

+0

混淆了servlet和Web应用程序。通常,静态内容由标准(依赖于容器的)servlet提供,并且不进行任何修改。你的servlet映射是怎样的(我想这就像'/ *')? – home

+0

/ galchen

回答

0

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

+0

文件找不到错误 – galchen

+0

你确定你已经把那image.jpg的web.xml中表示是Web根文件夹中? –

1

通常你会通过你的servlet映射或把你静态资源远离你的servlet映射处理这。否则,如果请求映射到您的servlet,您需要(a)检查servlet中的文件,并重定向到实际的文件名或自己将图像流回流,或者(b)编写一个过滤器对于您的web应用程序的结构足够了解,以查看请求是否应该由您的servlet或容器来处理。

如果您的描述用例它会更容易更有帮助。

+0

我的servlet-mapping将url-pattern设置为/,现在好像流式传输文件就是解决方案 – galchen

2

映射你的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的网址:http://myserver/myWAR/myServlet/*(*:=通配符)

当然,像卸载静态内容到外部Web服务器更复杂的选项。您也可以重写标准配置,但在大多数情况下,这不是必需的(至少在我的经验中)。