如题,自定义一个filter,在doFilter方法中,chain.doFilter(request,response);之后为什么不能设置response的contentType,不光是这个,我发现在chain.doFilter(request,response);之后,所有尝试response的set方法都不管用。但是这些代码明明是执行了的,因为其他如输出语句都有输出到控制台,求释疑
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain fchain) throws IOException, ServletException {
System.out.println("do filter");
response.setContentType("text/html;charset=UTF-8");
fchain.doFilter(request, response);
System.out.println("after do filter"); response.setContentType("application/json;charset=UTF-8");
System.out.println(response.getContentType());
}
下面是打印结果,其中分割是servlet的doGet中打印的
do filter
text/html;charset=UTF-8
---------------------------
after do filter
text/html;charset=UTF-8
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain fchain) throws IOException, ServletException {
System.out.println("do filter");
response.setContentType("text/html;charset=UTF-8");
fchain.doFilter(request, response);
System.out.println("after do filter"); response.setContentType("application/json;charset=UTF-8");
System.out.println(response.getContentType());
}
下面是打印结果,其中分割是servlet的doGet中打印的
do filter
text/html;charset=UTF-8
---------------------------
after do filter
text/html;charset=UTF-8
ServletResponse
应该要引入httpServletRequest和httpServletResponse
<% response.setContentType("text/html;charset=UTF-8"); %>
HELLO WORLD!
<% response.setContentType("text/plain;charset=UTF-8"); %>
<% for (int i = 0; i < 1000; i++) {%>
HELLO WORLD!
<% } %><% response.setContentType("application/json;charset=UTF-8"); %>
<% for (int i = 0; i < 1000; i++) {%>
HELLO WORLD!
<% } %>tomcat6下面运行,最终获得的结果是text/plain;charset=UTF-8,
修改buffer为100kb,获得的content-type=application/json;charset=UTF-8当然,这个只是纯实验,依据每个服务器实现可能略有不同。因为Servlet/JSP标准,貌似对此没有做明确界定(这部分我还要找找资料)。因此,大家最好避免这种情况。换言之,尽量一开始就算好Header,而不要在已经开始往response.getWriter或者getOutputStream开始写东西之后在setHeader