2010-04-26 9 views
1

Est-il possible de faire en sorte que les pages JSP ne définissent aucun type de contenu en réponse? Dans ma configuration, JSP ne génère pas directement la réponse, mais plutôt une présentation intermédiaire, qui est ensuite traitée par un code Java supplémentaire qui crée du HTML ou du JSON sur cette base. Donc, puis-je en quelque sorte rendre JSP pas définir le type de contenu sur la réponse et le laisser au code intermédiaire? Si je supprime simplement contentType="..." dans une JSP, il reste par défaut à text/html.Création d'une page JSP impossible de définir le type de contenu de réponse

Répondre

1

Vous pouvez faire en sorte qu'il ignore le type de contenu défini par la page JSP. Cela serait-il suffisant?
Comment faites-vous la plomberie?

L'idée de base serait d'implémenter un ServletResponseWrapper, de remplacer l'appel à setContentType, puis d'utiliser un filtre pour transmettre cette réponse à la JSP plutôt qu'à la vraie.

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

Filtre pour l'appliquer:

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 { 

    } 

} 

EDIT: Juste repéré une faille dans ma logique. Le type de contenu doit être défini avant que vous puissiez appeler response.getWriter(), afin qu'il puisse utiliser le bon codage de caractères. Ne sais pas si cela vous affectera ou non.

+0

Merci, c'est probablement ce que je vais faire. Je vais trier des choses mineures comme le type de contenu sur l'objet de réponse faux plus tard. – doublep

0

Non. Pourquoi ne stockez-vous pas le type de contenu préféré dans la classe que vous créez et générez-lui des accesseurs pour que le JSP le reçoive?

+0

"Avez-JSP obtenir à partir de là" - comment? – doublep

Questions connexes