Заставить страницу JSP не устанавливать тип содержимого ответа - PullRequest
1 голос
/ 26 апреля 2010

Можно ли заставить страницы JSP не устанавливать какой-либо тип содержимого в ответе? В моей настройке JSP напрямую не генерирует ответ, а представляет собой промежуточное представление, которое затем обрабатывается дополнительным Java-кодом, который создает HTML или JSON на основе этого. Итак, могу ли я как-то заставить JSP не установить тип содержимого в ответе и оставить его для промежуточного кода? Если я просто удаляю contentType="..." в JSP, он по умолчанию будет text/html.

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

Вы можете игнорировать тип контента, который устанавливает страница 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 (), чтобы он мог использовать правильную кодировку символов. Не знаю, повлияет ли это на вас или нет.

0 голосов
/ 26 апреля 2010

Нет.

Почему бы вам не сохранить предпочтительный тип контента в классе, который вы создаете, и сгенерировать методы доступа для него, и JSP не получит его оттуда?

...