我想告诉我的java servlet忽略对静态文件的调用,例如,如果文件存在 - 只返回实际文件而不实际加载servlet。
在我的例子中,我在netbeans中有一个MyServlet,在“web pages”目录下我放置了image.jpg。
接下来,我生成了一个.war文件并将其放在tomcat / webapps
下当我尝试向localhost发出请求时:8080 / MyServlet / image.jpg - 未加载文件,而是执行servlet。
我想要的是,如果文件存在 - 它将返回它,否则将运行servlet。
有一种快速实现方法吗?
答案 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部分)