Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测html文件时,HttpServletResponse内容类型为null_Java_Jsf_Content Type_Servlet Filters - Fatal编程技术网

Java 检测html文件时,HttpServletResponse内容类型为null

Java 检测html文件时,HttpServletResponse内容类型为null,java,jsf,content-type,servlet-filters,Java,Jsf,Content Type,Servlet Filters,我试图实现JavaServlet过滤器,它修改html响应 doFilter我的filter类的方法如下所示: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (filterConfig == null) { return; } HttpSe

我试图实现JavaServlet过滤器,它修改html响应

doFilter
我的filter类的方法如下所示:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (filterConfig == null) {
        return;
    }

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    String contentType = res.getContentType();

    if (contentType != null && contentType.contains("text/html")) {
        chain.doFilter(req, res);
        // do some modification
    } 
}
对于每一个响应,我都试图弄清楚它是否是HTML。如果是这种情况,我会做一些修改,但我有以下问题:当请求jsf文件时,
res.getContentType()
返回
null
res.getHeader(“Content Type”)
也返回
null
)。在我的浏览器的开发工具中,我可以看到“内容类型”标题的值为“text/html”;charset=UTF-8',但在这种情况下为什么
res.getContentType()
返回
null

有没有其他方法可以检测过滤器中的HTML响应

编辑我在if子句中添加了
chain.doFilter(req,res)
调用


由于JSF使用的是一个servlet,因此您只能检查它在链之后生成的内容(您似乎希望它在过滤器之前执行,但事实并非如此)。这是因为完整的过滤器链总是在servlet之前执行,请参见

这意味着在
doFilter(…)
中,只有在
chain.doFilter(…)
之后才能访问响应,如第一个链接所示

因此,除非过滤器创建内容(它不应该iirc,至少不是真实内容),否则在调用
chain.doFilter()
之前,响应上的内容类型始终为空(除非过滤器例如创建了身份验证/授权失败响应)

实际上,您的代码正在执行

String a=null;
if (a != null || or a.equals("b") {
   doThing();
}

因此,你似乎有一个新的想法,所以你必须重新考虑你的设计。(您试图实现什么)

@BalusC
chain.doFilter(req,res)
被调用(请参阅编辑的代码),但我认为应该在if子句之前调用它,对吗@ℛ当然要注意为什么。。。我正在尝试获取响应内容并对其进行修改,我需要请求内容做什么?感谢您的解释。我将
chain.doFilter(…)
移动到
res.getContentType()
之前,它就工作了。