2010-04-26 5 views
1

응답시 JSP 페이지가 어떤 내용 유형도 설정하지 못하게 할 수 있습니까? 제 설정에서 JSP는 응답을 직접 생성하지 않고 중간 프레젠테이션을 생성 한 다음이를 기반으로 HTML 또는 JSON을 만드는 추가 Java 코드로 처리합니다. 그래서, 어떻게 든 어떻게하면 응답에 content-type으로 설정하지 않고 중간 코드로 남겨 둘 수 있습니까? JSP에서 contentType="..." 만 제거하면 여전히 기본값은 text/html입니다.JSP 페이지가 응답 내용 유형을 설정하지 않음

답변

1

JSP 페이지가 설정하는 내용 유형을 무시하도록 만들 수 있습니다. 그게 충분히 좋을 까?
배관을 어떻게 지내십니까?

기본 개념은 ServletResponseWrapper를 구현하고 setContentType에 대한 호출을 재정의 한 다음 필터를 사용하여이 응답을 실제 응답이 아닌 JSP에 전달하는 것입니다.

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 { 

    } 

} 

편집 :

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); 
    } 
} 

필터에 적용합니다 그냥 내 논리에 결함을 발견했다. 컨텐츠 유형은 response.getWriter()를 호출하기 전에 설정해야하며, 올바른 문자 인코딩을 사용할 수 있습니다. Dunno가 영향을 주는지 여부.

+0

고마워, 아마 그럴거야. 나중에 가짜 응답 객체에 content-type과 같은 사소한 것들을 정리할 것입니다. – doublep

0

아니요.

만들고있는 클래스에 원하는 content-type을 저장하고 거기에 접근자를 생성하고 JSP에서 가져 오도록하지 않는 이유는 무엇입니까?

+0

"JSP에서 가져 와서"- 어떻게? – doublep

관련 문제