使JSP页面没有设置响应内容类型

时间:2010-04-26 18:08:57

标签: jsp content-type

是否可以在响应时使JSP页面没有设置任何内容类型?在我的设置中,JSP不直接生成响应,而是直接生成中间表示,然后由另外的Java代码处理,该代码基于此创建HTML或JSON。那么,我能以某种方式使JSP 在响应上设置内容类型并将其留给中间代码吗?如果我只删除JSP中的contentType="...",它仍然默认为text/html

2 个答案:

答案 0 :(得分:1)

您可以忽略JSP页面设置的内容类型。那会不够好?
你是怎么做管道的?

基本思想是实现ServletResponseWrapper,覆盖对setContentType的调用,然后使用过滤器将此响应传递给JSP而不是真实的。

ResponseWrapperToIgnoreContentType.java

import javax.servlet.ServletResponse;
import javax.servlet.ServletResponseWrapper;

public class ResponseWrapperToIgnoreContentType extends ServletResponseWrapper{

    public ResponseWrapperToIgnoreContentType(final ServletResponse response) {
        super(response);        
    }

    @Override
    public void setContentType(final String type) {
        System.out.println("Ignoring call to set the content type to : " + type);
    }
}

过滤以应用它:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ResponseContentTypeFilter implements Filter{

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, new ResponseWrapperToIgnoreContentType(response));
    }

    @Override
    public void init(final FilterConfig filterConfig) throws ServletException {

    }

}

编辑:刚刚发现了我的逻辑缺陷。在调用response.getWriter()之前,需要设置内容类型,以便它可以使用正确的字符编码。 Dunno,如果这会影响你或不。

答案 1 :(得分:0)

不。

为什么不将首选内容类型存储在您正在创建的类中并为其生成访问器并让JSP从那里获取?