Почему я не могу обернуть ServletRequest при попытке получить выходные данные JSP - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь отправить обработчик запросов сервлета на процессор JSP и захватить его содержимое.

Я предоставляю экземпляры-оболочки для ServletRequest и ServletResponse, они реализуют соответствующие интерфейсы HTTPServletRequest / -Responseпоэтому они должны быть заменой.В настоящее время все методы передаются исходному объекту запроса сервлета (я планирую вскоре изменить некоторые из них).Дополнительно я ввел несколько новых методов.(Если вы хотите увидеть код: http://code.google.com/p/gloudy/source/browse/trunk/gloudyPortal/src/java/org/gloudy/gloudlet/impl/RenderResponseImpl.java)

HttpServletResponse использует свои собственные выходные потоки для захвата вывода.

Когда я пытаюсь вызвать

request.getRequestDispatcher("/WEB-INF/views/test.jsp").include(request, response);    

С моими обертками запросов и ответов метод возвращается, и контент не был захвачен. Когда я пытался передать исходный объект запроса, он работал! Но это не то, что мне нужно в долгосрочной перспективе ...

request.getRequestDispatcher("/WEB-INF/views/test.jsp").include(request.getServletRequest(), response);

Это работает. GetservletRequest () возвращает исходный запрос, заданный контейнером сервлета.

Кто-нибудь знает, почему это не работает с моими обертками?

Обновление: я пытаюсь это сделать в Googleсреда разработки приложений, использующая реализацию geronimo для контейнера сервлета IIRC

1 Ответ

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

ОК, обнаружена проблема ...

Я заменил функции, связанные с атрибутами, своей собственной реализацией. По этой причине процессор jsp возвращал пустые результаты (без сообщения об ошибке ...)

Так что делать это в оболочках ServletRequest плохо, если вы хотите использовать диспетчер запросов:

 private Map<String, Object> attributes = new HashMap<String, Object>();
 ...

 public Object getAttribute(String string) {
    return attributes.get(this);
  }

  public Enumeration<String> getAttributeNames() {
    return (Enumeration<String>) attributes.keySet();
  }

  public void setAttribute(String string, Object o) {
    attributes.put(string, o);
  }

  public void removeAttribute(String string) {
    attributes.remove(string);
  }

Работает без этих строк. Может быть, это помогает тому, кто пробует похожие вещи ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...