Конфигурация Eclipse / Jetty для решения проблемы: код метода превышает ограничение 65535 байт - PullRequest
0 голосов
/ 25 апреля 2020

Я занимаюсь разработкой сайта Java в Eclipse. Сайт зависит от JSP файлов и сервлетов, и я использую плагин (Eclipse Jetty 5.0.0) для запуска сайта в Eclipse во время разработки. Я получил это исключение при загрузке страницы в браузере:

XXXXX_jsp.java]<|The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

Я в конечном итоге запусту этот сайт на Tomcat и смогу решить эту проблему в Tomcat, добавив следующее в JspServlet в tomcat_install / conf /web.xml:

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

Однако я довольно долго искал и не смог найти аналогичное конфигурационное решение, чтобы оно работало в Eclipse / Jetty. Я мог бы разбить метод на несколько более мелких, но я хочу избежать этого. Надеемся использовать конфигурацию (не изменение кода) для решения этой проблемы.

1 Ответ

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

JettyJspServlet поддерживает те же init-параметры, что и у Tomcat JspServlet.

. Здесь есть mappedfile init-param (просто установите его на что-то недопустимое, например, "foo", и просмотрите сообщение об ошибке. pop out " Внимание! Недопустимое значение для initParam mappedFile. Будет использоваться значение по умолчанию" false "")

. Вам нужно будет сослаться на существующий сервлет JSP и добавить их. init-параметры для вашего WEB-INF/web.xml.

<servlet id="jsp">
  <servlet-name>jsp</servlet-name>
  <init-param>
    <param-name>mappedfile</param-name>
    <param-value>false</param-value>
  </init-param>
</servlet>

Или создайте новый webdefault.xml с этим параметром, и ваше веб-приложение будет использовать его с XML развертываемыми в ${jetty.base}/webapps/${webappid}.xml

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
   <Set name="contextPath">/foo</Set>
   <Set name="war"><Property name="jetty.webapps"/>/foobar.war</Set>
   <Set name="defaultsDescriptor"><Property name="jetty.base"/>/etc/mywebdefault.xml</Set>
</Configure>

init-параметр "mappedfile":

Похоже, он переключается с генерации обычных операторов печати в промежуточном файле *. java на 1 операторы печати лайнера.
Это означает, что вы находитесь на грани поддержки JavaC в вашем файле JSP. Существует множество жестких ограничений на размер файла *. java в javac, и теперь ваш файл JSP преодолевает эти ограничения.

Некоторые (но не все) javac ограничения:

  • Stati c Размер инициализатора: не более 65535 байт.
  • Длина метода или конструктора : 65535 байт макс. (тот, в который включается ваш JSP файл)
  • Длина параметра метода или конструктора: максимум 255 параметров
  • Размер локальных переменных: макс. 65535 байт
  • Syntheti c Параметры Длина: максимум 255 параметров
  • Размеры массива: максимум 255

Если этот init-параметр работает для вас, используйте его.
Но если вам нужно чтобы сохранить / отредактировать этот JSP файл, знайте, что вы почти наверняка не можете добавить к нему (только удалить).
Скорее всего, вам придется реорганизовать его в более мелкие части с импортом в будущем.

...