java - 过滤 servlet 导致图像不显示在客户端上

标签 java servlets

我有一个 Filter Servlet,用于过滤来自 Servlet 的请求。我不想对图像请求执行某些操作,因此我有以下代码:

if (baseURL.endsWith("png")) 
{
 chain.doFilter(servletrequest, servletresponse);
}

在过滤器的doFilter方法上,我不做任何事情,只是调用chain.doFilter,我期望响应图像能够正确发送然而在客户端中,返回的 Content-Type"application/octet-stream" 而不是 "image/png"

知道为什么会发生这种情况吗?

最佳答案

I have a Filter Servlet that filters request from a Servlet. I do not want to do something on a request for a Image

如果 URL 模式也与请求 URL 匹配,FilterChain#doFilter() 不会阻止请求最终出现在您的 servlet 中。您似乎认为情况就是如此。因此这是不正确的。

如果您不希望图像请求最终出现在您的 servlet 中,那么您必须将 servlet 映射到更具体的 URL 模式。例如,/app/* 而不是 /*。然后您可以按如下方式过滤请求:

if (httpServletRequest.getRequestURI().endsWith(".png")) {
    chain.doFilter(request, response);
}
else {
    request.getRequestDispatcher("/app" + httpServletRequest.getRequestURI()).forward(request, response);
}

/* 的 URL 模式不应在 servlet 上使用,而只能在过滤器上使用。

此外,默认情况下已根据文件扩展名自动确定内容类型。我假设您确实拥有 some.png 资源,而不是 somepng 资源,因为您的初始 endsWith() 参数值也会匹配。

另请参阅:

关于java - 过滤 servlet 导致图像不显示在客户端上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924842/

相关文章:

java - 谷歌应用引擎

java - Grails:使用数据源插件,无法跨不同数据源连接域类

tomcat - web.xml里面可以引用context-param吗?

Java Jersey 和 servlet 过滤器

简历上的 Java android Listview 显示所选项目

java - 如何在经典(非引导)Spring 应用程序中注册 MessageDispatcherServlet

java - 如何使用 HQL INNERJOIN 从多个表中检索记录

java - 如何从 Spring MVC 中的请求参数中删除空格

java - 如何在 GWT 服务器端代码中访问 servlet 属性?

javamelody 1.58 安全性在 tomcat8 中不起作用