Jasper в jetty выдает исключение IllegalStateException в getOutputStream, но не в Tomcat
Вопрос
У меня есть веб-приложение, которое в данный момент работает под управлением Tomcat 5.5.25.Я пытаюсь перенести его на Jetty 6, чтобы воспользоваться преимуществами быстрого обновления, особенно для изменений jsp и пользовательского интерфейса.
Поскольку мои файлы JSP совместимы с JSP 2.0, я запускаю jetty под maven, используя конфигурацию, предложенную на веб-сайте плагина maven jetty.Эта конфигурация загружает JSP-компилятор apache jasper версии 5.5.15.(Также доступен в репозитории maven 5.5.23, но он имеет тот же результат.)
В jetty моя домашняя страница, которая настроена с использованием плиток, запускается с помощью исключения IllegalStateException в ServletResponseWrapperInclude.getOutputStream().Очевидно, что в Tomcat он этого не делает.
Я изо всех сил пытаюсь понять, что такого есть в наших плитках и комплектующих, что могло бы заставить джаспера жаловаться в jetty, а не в Tomcat.
Решение
Возможно, это не очень хороший ответ, но мы обнаружили, что эта ошибка возникает, когда Tiles содержит пустую плитку.
Просматривая наши JSP для основных плиток и удаляя ссылки на пустые плитки, мы устраняем эту проблему.
Другие советы
Ничего себе - отличная находка!Другое решение, на которое я только что наткнулся, - определить tile include как пустую строку, а не как пустое / нулевое определение.
Другими словами, если я определил плитку следующим образом, я попал в описанное вами исключение IllegalStateException:
<definition name="login" extends="main.layout">
<put name="title" value="Login" type="definition" />
<put name="headinclude" value="" type="definition" />
<put name="body" value="/WEB-INF/tiles/login.jsp" type="page" />
</definition>
Если я, с другой стороны, определю плитку следующим образом, исключение исчезнет:
<definition name="login" extends="main.layout">
<put name="title" value="Login" type="definition" />
<put name="headinclude" value="" type="string" />
<put name="body" value="/WEB-INF/tiles/login.jsp" type="page" />
</definition>
Странная ошибка, странное решение, но у меня оно работает!