_jspService превышает предел 65535 байт

Итак, я имею дело с устаревшим кодом сервлета, который работает на Websphere 7 (JDK 6). Настройка среды разработки использует Tomcat 6 (JDK 6).

  • Почему это работает на Websphere 7 и не в Tomcat 6?
  • Связано ли это с сервер приложений?

Если ваш ответ "да" для "нет". 2, есть ли у вас обходной путь для этого на Tomcat 6 (JDK 6), кроме того, что он разбивает код или использует динамический интерфейс?

Расписание не согласуется с тем, что изменение static включает в динамику, в первую очередь потому, что большинство страниц связаны с кодом бизнес-модели, включая основной шаблон приложения.

Ответы

Ответ 1

Похоже, вы нажимаете ограничение на 64k метода, вероятно, из-за того, как Tomcat создает класс из вашего JSP. Эта страница предполагает, что изменение статики включает в себя следующее:

<%@ include file="test.jsp" %>

Для динамического включения такого типа, чтобы избежать проблемы:

<jsp:include page="test.jsp" /> 

Ответ 2

У меня закончились статические блоки html/jss/css, которые я мог бы экрнализировать в jsp:include (в основном нестатический html остался)...

Вы можете поместить в свой файл web.xml, mappedfile значение false так, чтобы избавиться от многих статических строк, которые не обязательно являются хорошими блоками для включения в include, но они складываются для экономии места:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    ...
    <init-param>
        <param-name>mappedfile</param-name>
        <param-value>false</param-value>
    </init-param>
    ...
</servlet>

Решение Peter Hart <c:catch> также похоже на хороший вариант.

Ответ 3

Иногда взломать JSP на включение не имеет смысла или не работает. Другой способ заставить JSP быть разбитым на отдельные методы при компиляции - отделить ваш JSP от сегментов с помощью <c:catch>.

Ответ 4

Лучше указать, куда его менять, как указано в следующей ссылке: https://www.assetbank.co.uk/support/documentation/knowledge-base/byte-limit-exceeded-error/

Найдите файл [Tomcat_Home]/conf/web.xml и выполните поиск файла для "JspServlet". Это должно возвращать xml node из <servlet>, содержащий некоторые значения <init-param>. Вам нужно добавить дополнительный <init-param> тот же, что и ниже.

<init-param>
    <param-name>mappedfile</param-name>
    <param-value>false</param-value>
</init-param> 

Это более понятно и прямо для пользователя tomcat

Другие справочные решения, которые, конечно, в основном сказаны в предыдущем комментарии, но все в одном месте для чтения, здесь: http://answered.site/development-environment-setup-uses-tomcat-6-jdk-6-why-does-it-work/603017/

Проблема также найдена в tomcat-8 с JDK1.8 (Java8)

Ответ 5

Почему он работает на Websphere 7, а не в Tomcat 6

Потому что у них есть разные компиляторы JSP, которые переводят JSP на другой Java-код. Компилятор Tomcat JSP (Jasper), по-видимому, не способен обрабатывать большие JSP.

Возможно, следующий вопрос: возможно ли изменить ограничение размера метода для JVM?

Нет. Эти ограничения жестко привязаны к формату/структуре файлов классов.

Подробности находятся в спецификации JVM... но это довольно сложно, и из вашего вопроса не совсем ясно, что ограничивает вас ударил. (Но это несущественно... они не могут быть изменены.)

Ответ 6

Для JBoss eap 6 в standalone.xml добавьте ниже код под веб-подтипом.

<configuration>
    <jsp-configuration development="true" mapped-file="false"/>
</configuration>

Он разрешил мою проблему.

Ответ 7

Я наткнулся на эту проблему сегодня
Моя проблема была решена, поскольку я взял Tomcat 8.0.30 вместо Tomcat 8.0.39

Ответ 8

Установив для меня параметр инициализации "mappedFile" на "false".

Но с помощью плагина eclipse некоторое время он удаляется и ему нужно снова установить его в дом tomcat.

Ответ 9

Для сервера wildfly, в standalone.xml → подсистему поднебесной: замените jsp-config на

<jsp-config development="true" mapped-file="false"/>

Ответ 10

Eidt: данное решение не было решением, но missinterpreation (проблема не может быть воспроизведена во всех версиях tomcat) извините.