Вопросы и ответы на собеседование по теме Java Server Pages (JSP)

Вопросы и ответы на собеседование по теме Java Server Pages (JSP).

к списку вопросов раздела JEE

Вопросы

1. Что такое jsp и зачем он нужен?
2. Расскажите об этапах (фазах) жизненного цикла jsp.
3. Расскажите о методах жизненного цикла jsp.
4. Какие методы жизненного цикла JSP могут быть переопределены?
5. Как можно предотвратить прямой доступ к JSP странице из браузера?
6. Как закомментировать код в jsp?
7. Объясните Scriptlet, Expression и Declaration в JSP.
8. Какие неявные, внутренние объекты и методы есть на jsp странице?
9. Почему неявные объекты не доступны в обычной JSP странице?
10. Что вы знаете о PageContext и какие преимущества его использования?
11. Как сконфигурировать init параметры для JSP?
12. Почему не рекомендуется использовать скриптовые элементы в jsp?
13. Можем ли мы определить класс внутри JSP страницы?
14. Какие есть способы вставки java кода в jsp страницу?
15. Как можно запретить использование скриптов и java кода на jsp странице?
16. Что вы знаете о jsp тегах? Объясните как вы понимаете Action tag и JSP Action Elements.
17. Какая разница между директивой include и jsp:include action?
18. Что вы знаете о языке выражений jsp (JSP Expression Language – EL)?
19. Назовите неявные, внутренние объекты JSP EL и их отличия от объектов jsp.
20. Как узнать имя http метода используя JSP EL?
21. Что такое JSTL (Jsp Standard tag library)?
22. На какие категории можно разделить JSTL теги, приведите примеры.
23. Что вы знаете о написании пользовательских jsp тегов?
24. Приведите пример использования собственных тегов.
25. Почему не нужно конфигурировать стандартные JSP теги в web.xml?
26. Как можно обработать ошибки jsp страниц?
27. Как происходит обработка ошибок с помощью jstl?
28. Как сделать «новую линию в HTML» в JSP?
29. Приведите пример конфигурации JSP в дескрипторе развертывания.
30. Как деактивировать использование EL на JSP?
31. Когда контейнер проинициализирует множество JSP/Servlet объектов?
32. Можно ли использовать javascript на jsp странице?
33. Всегда ли создается объект сессии на jsp странице, можно ли отключить его создание?
34. Какая разница между JspWriter и Servlet PrintWriter?
35. Как можно расширить функциональность jsp?
36. Best Practices в JSP.

Ответы

1. Что такое jsp и зачем он нужен?

JSP — это JavaServer Pages. JSP является серверной технологией для создания динамических веб-страниц. JSP расширяет технологию сервлетов, чтобы помочь разработчикам создавать динамические страницы с HTML подобным синтаксисом.

Создание представлений поддерживается и в сервлетах, но в таком случае код выглядит ужасным и подвержен ошибкам. Так же было замечено, что большинство элементов веб страницы является статическими и поэтому JSP страница больше подходит к веб-страницам. По возможности необходимо избегать бизнес логики на странице JSP и использовать страницу только в качестве представления. Поэтому рекомендуется использовать JSP actions элементы или JSTL теги вместо написания JSP скриптов.

Еще одним преимуществом в JSP является горячее развертывание. Мы можем заменить старую страницу на другую в контейнере и пользователям будет отображаться новая JSP страница. Таким образом нет необходимости компилировать весь проект или перезапускать сервер для обновления части страниц.

2. Расскажите об этапах (фазах) жизненного цикла jsp.

Если посмотреть код внутри созданной JSP страницы, то он будет выглядеть как HTML и не будет похож на java класс. Конвертацией JSP страниц в HTML код занимается контейнер, который так же создает сервлет для использования в веб приложении. Жизненный цикл JSP состоит из нескольких фаз:

  1. Translation – JSP контейнер проверяет код JSP страницы, парсит ее для создания кода сервлета. К примеру, в Tomcat вы можете найти классы сервлетов в директории TOMCAT/work/Catalina/localhost/WEBAPP/org/apache/jsp. Если страница JSP называется home.jsp, то созданный сервлет обычно будет иметь имя home_jsp и имя файла — home_jsp.java.
  2. Compilation – JSP контейнер компилирует исходный код jsp класса и создает класс на этой фазе.
  3. Class Loading – контейнер загружает классы в память на этой фазе.
  4. Instantiation – внедрение конструкторов без параметров созданных классов для инициализации в памяти классов.
  5. Initialization – в контейнере вызывается init метод объекта JSP класса и инициализируется конфигурация сервлета с init параметрами, которые указаны в дескрипторе развертывания (web.xml). После этой фазы JSP способен обрабатывать запросы клиентов.Обычно эти фазы происходят после первого запроса клиента (т.е. ленивая загрузка), но можно настроить загрузку и инициализацию JSP на старте приложения по аналогии с сервлетами.
  6. Request Processing – длительный жизненный цикл  обработки запросов клиента JSP страницей. Обработка является многопоточной и аналогична сервлетам — для каждого запроса создается новая нить, создаются объекты ServletRequest и ServletResponse и происходит внедрение сервис методов JSP.
  7. Destroy – последняя фаза жизненного цикла JSP на которой JSP класс удаляется из памяти. Обычно это происходит при выключении сервера или андеплое приложения.

3. Расскажите о методах жизненного цикла jsp.

Жизненные циклы методов JSP:

  • jspInit() — метод объявлен в JSP странице  и реализуется с помощью реализаций контейнера. Этот метод вызывается один раз в жизненном цикле JSP для того, чтобы инициализировать конфигурационные параметры, указанные в дескрипторе развертывания. Этот метод можно переопределить с помощью определения элемента JSP scripting и указания необходимых параметров для инициализации.
  • _jspService() — этот JSP метод внедряется JSP контейнером для каждого запроса клиента с помощью передачи объекта запроса и ответа. Отметьте, что имя метода начинается с нижнего подчеркивания и отличается от других методов жизненного цикла тем, что его невозможно переопределить. Весь JSP код проходит через этот метод и он переопределен по умолчанию. Этот метод определен в HttpJspPage интерфейсе.
  • jspDestroy() — метод вызывается контейнером JSP для удаления объекта из памяти (на последней фазе жизненного цикла JSP — Destroy). Метод вызывается только один раз и мы можем его переопределить для очищения любых ресурсов, которые были созданы в JSP init методе.

4. Какие методы жизненного цикла JSP могут быть переопределены?

Мы можем переопределить jspInit() и jspDestroy() методы с помощью использования скриптов JSP. Метод jspInit() переопределяется для создания общих ресурсов, которые мы хотели бы использовать в методе обслуживания JSP, а jspDestroy() метод переопределяется, чтобы освободить общие ресурсы на фазе уничтожения.

5. Как можно предотвратить прямой доступ к JSP странице из браузера?

Директория WEB-INF не имеет прямого доступа из веб приложения. Поэтому мы можем положить JSP страницы внутри этой папки и тем самым запретить доступ к странице из браузера. Однако в этом случае необходимо настраивать дескриптор развертывания наподобие сервлетов. Простая конфигурация дескриптора web.xml показана ниже.

6. Как закомментировать код в jsp?

JSP предоставляет две возможности закомментировать код:

  • HTML комментарии — <— HTML Comment —> . Такие комментарии будут видны клиенту при просмотре кода страницы.
  • JSP комментарии — <%— JSP Comment %—>. Такие комментарии создаются в созданном сервлете и не посылаются клиенту. Для любых комментариев по коду или отладочной информации необходимо использовать этот тип комментариев.

7. Объясните Scriptlet, Expression и Declaration в JSP.

Scriptlet, Expression и Declaration — скриптовые элементы внутри JSP страницы, которые могут выполнять Java код. Скриптлеты задаются тегом <% .. %>. Любой код внутри этих тегов будет передан _jspService() методу.

Достаточно часто требуется показать динамическую информацию с использованием метода out.print(). Для этого существует язык выражений (expression), который записывается как <%= .. %>. Например, выражение <% out.print(«I love javastudy.ru»); %> может быть переписано с помощью JSP выражения <%= «I love javastudy.ru» %>. Отметьте, что всё, что находится внутри тегов <%= .. %> будет передано в out.print() метод. Так же обратите внимание, что скриптлеты могут содержать несколько java выражений, разделенных точкой с запятой, в то время как выражения не должны заканчиваться на точку с запятой.

JSP Declaration используется для объявления методов и переменных класса сервлета. Declaration записываются с помощью тега <%! .. %>, например — <%! public static int count=0; %>.

8. Какие неявные, внутренние объекты и методы есть на jsp странице?

JSP implicit objects (неявные объекты) создаются контейнером при конвертации JSP страницы в код сервлета для помощи разработчикам. Эти объекты можно использовать напрямую в скриптлетах для передачи информации в сервис методы, однако мы не можем использовать неявные объекты в JSP Declaration, т.к. такой код пойдет на уровень класса.
Существует 9 видов неявных объектов, которые можно использовать прямо на JSP странице. Семь из них объявлены как локальные переменные в начале _jspService() метода, а два оставшихся могут быть использованы как аргументы метода _jspService().

  1. out Object
  2. request Object
  3. response Object
  4. config Object
  5. application Object
  6. session Object
  7. pageContext Object
  8. page Object
  9. exception Object

9. Почему неявные объекты не доступны в обычной JSP странице?

Неявный объект исключений JSP недоступен в обычных JSP страницах и используется на страницах ошибок JSP только для того, чтобы перехватить исключение, брошенное JSP страницей и далее предоставить какую-либо полезную информацию клиенту.

10. Что вы знаете о PageContext и какие преимущества его использования?

Неявный объект JSP pageContext является экземпляром реализации абстрактного класса javax.servlet.jsp.PageContext. Мы можем использовать объект pageContext для получения и установки атрибутов с различной областью видимости и для проброса запросов к другому ресурсу. Этот объект так же обладает ссылкой на другой неявный объект. Это единственный объект, который представлен в JSP implicit objects и JSP EL implicit objects.

11. Как сконфигурировать init параметры для JSP?

Мы можем задать параметры инициализации для JSP аналогично сервлетам в web.xml файле. Мы должны сконфигурировать init параметры JSP с элементами servlet и servlet-mapping. Единственным отличием будет указание местонахождения JSP страницы.

12. Почему не рекомендуется использовать скриптовые элементы в jsp?

JSP страницы в основном используются для целей отображения представления, а вся бизнес логика и модели должны быть реализованы в сервлетах или классах моделях. Мы должны передавать параметры к JSP странице через атрибуты и затем использовать их для создания HTML ответа на JSP странице. Большая часть JSP содержит HTML код и для того, чтобы помочь дизайнерам понять код JSP страницы и разрабатывать их, предоставляют элементы action, JSP EL, JSP Standart Tag Library. Именно эти элементы необходимо использовать вместо скриптлетов для создания моста между JSP HTML и JSP java частями.

13. Можем ли мы определить класс внутри JSP страницы?

Определить класс внутри JSP страницы можно, но это считается плохой практикой. Это можно сделать так

или так:

14. Какие есть способы вставки java кода в jsp страницу?

Выражение, скриптлет, объявление:

Выражение JSP <%= выражение %> <%= выражение %> Эквивалент на XML:
<jsp:expression>expression</jsp:expression>.
Заранее определенные переменные: request, response, out, session, application, config и pageContext (также доступны в скриптлетах).
Скриптлет JSP <% код %> Код добавляется в метод service. Эквивалент на XML:
<jsp:scriptlet>код</jsp:scriptlet>.
Объявление JSP <%! код %> Код добавляется в тело класса сервлета вне метода service Эквивалент на XML:
<jsp:declaration>код</jsp:declaration>.

Директива:

<%@ page att= «значение» %> Директивы для движка сервлета с информацией об основных настройках. Эквивалент на XML:
<jsp:directive.page att = «val»\>. Допустимые атрибуты (жирным выделены значения, принимаемые по умолчанию):
import= «пакет.class»
contentType= «MIME-Type»
isThreadSafe= «true|false
» session= «true|false»
buffer= «размерkb|none»
autoflush= «true|false»
extends= «пакет.class»
info= «сообщение»
errorPage= «url»
isErrorPage= «true|false»
language= «java»
<%@ include file= «url» %> Файл в локальной системе, подключаемый
при трансляции JSP в сервлет.
Эквивалент на XML:
<jsp:directive.include file= «url»\>.
URL должен быть относительным . Для подключения файла в процессе запроса а не в ходе трансляции используйте действие jsp:include.

Комментарий:

<%— комментарий —%> Комментарий; игнорируется при трансляции JSP страницы в сервлет. Если вы хотите чтобы комментарий сохранился в конечном HTML, используйте обычный синтаксис HTML для описания комментариев: <— комментарий —>.

Действия:

<jsp:include page= «относительный URL» flush= «true» /> Подключает файл при запросе страницы. Если вы хотите чтобы файл подключался в процессе трансляции страницы, используйте директиву page совместно с атрибутом include. Внимание: некоторые сервера требуют чтобы подключаемые файлы были в формате HTML или JSP, в зависимости от настроек сервера (обычно данное ограничение базируется на указании расширений файлов).
<jsp:useBean att=значение*/> or
<jsp:useBean att=значение*>

</jsp:useBean>
Найти или создать Java Bean. Возможные атрибуты:
id= «имя»
scope=«page|request|session|application»
class= «пакет.class»
type= «пакет.class»
beanName= «пакет.class»
<jsp:setProperty att=значение*/> Устанавливает свойства bean, или явно, или указанием на соответствующее значение параметра, передаваемое при запросе. Допустимые атрибуты:
name= «имяBean»
property= «имяСвойства|*»
param= «имяПараметра»
value= «значение»
<jsp:getProperty name= «ИмяСвойства» value= «значение» /> Получение и вывод свойств bean.
<jsp:forward page= «отн. URL»/> Передает запрос другой странице.
<jsp:plugin attribute=  «значение»*>.. Генерирует теги OBJECT или EMBED,в зависимости от типа браузера, в котором будет выполняться апплет, использующий Java Plugin.

15. Как можно запретить использование скриптов и java кода на jsp странице?

Запретить использование скриптов можно внутри дескриптора развертывания. Например с помощью паттерна из примера ниже можно запретить выполнения скриптов для всех JSP страниц. Соответственно для отключения скриптов конкретной страницы необходимо указать ее имя.

16. Что вы знаете о jsp тегах? Объясните как вы понимаете Action tag и JSP Action Elements.

JSP элементы или теги action предоставляют полезную функциональность для работы с Java Bean, вложения ресурсов, проброса запроса и создания динамических XML элементов. Элементы jsp action всегда начинаются с записи jsp: и мы можем использовать их прямо внутри страницы JSP без необходимости подключения библиотек или других настроек.

Наиболее часто используемыми элементами action являются: jsp:useBean, jsp:getProperty, jsp:setProperty, jsp:include, jsp:forward.

17. Какая разница между директивой include и jsp:include action?

Разница между директивой JSP include и jsp:include action заключается в том, что для директивы include, контент для другого ресурса будет добавлен в созданный сервлет на этапе трансляции JSP (фаза Translation), в то время как jsp:include action работает в рантайме.
Другое отличие JSP include action в том, что мы можем передать параметры для вложения с помощью команды jsp:params, в то время как директива jsp include не имеет возможности передавать параметры.
Использовать директиву JSP include необходимо для статических ресурсов вроде header, footer, image file для повышения производительности. Если же нам необходима динамика, передача параметров для обработки, то необходимо использовать тег jsp:include action.

18. Что вы знаете о языке выражений jsp (JSP Expression Language – EL)?

В большинстве случаев мы используем JSP для целей просмотра, а вся бизнес-логика присутствует в сервлете или классах модели. После получения запроса клиента он обрабатывается в сервлете, а затем добавляем атрибуты в request/session/context scope, которые должны быть извлечены в JSP коде. Для создания ответа представлений так же используются request, headers, cookies и init параметры.
Мы можем использовать скриптлеты в JSP выражениях для получения атрибутов и параметров в JSP с Java кодом и использовать его для представлений. Проблема заключается в том, что веб дизайнеры обычно не знают java код, и именно поэтому в JSP 2.0 введен язык выражений (EL), через который мы можем получить атрибуты и параметры с помощью тегов HTML.
Синтаксис expression language выглядит как $ {имя}, и мы можем использовать EL неявные объекты и операторы языка выражений для извлечения атрибутов из разных scopes и использовать их в JSP странице.

19. Назовите неявные, внутренние объекты JSP EL и их отличия от объектов jsp.

Язык выражений JSP предоставляет множество неявных объектов, которые можно использовать для получения атрибутов в различных областях видимости (scopes) и для значений параметров. Важно отметить, что они отличаются от неявных объектов JSP и содержат атрибуты в заданной области видимости. Наиболее часто использующийся implicit object в JSP EL и JSP page — это объект pageContext. Ниже представлена таблица неявных объектов JSP EL.

JSP EL Implicit Objects Type Description
pageScope Map Карта атрибутов для page scope.
requestScope Map Используется для получения атрибутов в request scope.
sessionScope Map Используется для получения атрибутов из session scope.
applicationScope Map Используется для получения атрибутов из application scope.
param Map Используется для получения значения параметра request, возвращает одно значение.
paramValues Map Используется для получения значений параметров запроса в массиве. Удобно для параметров запроса, который содержит множество значений.
header Map Используется для получения  информации о request header.
headerValues Map Используется для получения значений header values в массиве.
cookie Map Используется для получения значения cookie в JSP
initParam Map Используется для получения параметров context init. Мы не можем использовать их для параметров инициализации сервлета (servlet init params).
pageContext pageContext Такой же как и объект JSP implicit pageContext. Используется для получения request, session references и т.д. К примеру, получение имени request HTTP Method.

20. Как узнать имя http метода используя JSP EL?

Вот так: ${pageContext.request.method}.

21. Что такое JSTL (Jsp Standard tag library)?

Стандартная библиотека тегов JSP (англ. JavaServer Pages Standard Tag Library, JSTL) — расширение спецификации JSP, добавляющее библиотеку JSP тегов для общих нужд, таких как разбор XML данных, условная обработка, создание циклов и поддержка интернационализации. JSTL — конечный результат JSR 52, разработанного в рамках процесса сообщества Java.

JSTL является альтернативой такому виду встроенной в JSP логики, как скриптлеты, то есть прямые вставки Java кода. Использование стандартизованного множества тегов предпочтительнее, поскольку получаемый код легче поддерживать и проще отделять бизнес-логику от логики отображения. Для использования JSTL тегов необходимо подключить библиотеку и указать на страницах пространство имен.

Для подключения пространства имен основных тегов JSTL необходимо указать на JSP странице код:

22. На какие категории можно разделить JSTL теги, приведите примеры.

JSTL теги разделяются на пять категорий согласно их функциональности:

  1. Core Tags – Core tags предоставляют возможности итерации, обработки исключений, url, forward и redirect response и т.д.
  2. Formatting и Localization Tags – предоставляют возможности по форматированию Numbers, Dates и поддержки i18n локализации и resource bundles.
  3. SQL Tags – JSTL SQL Tags поддержка работы с базами данных вроде MySQL, Oracle и т.д.
  4. XML Tags – используются для работы с XML документами. Например для парсинга XML, преобразования данных XML и выполнения выражений XPath.
  5. JSTL Functions Tags – предоставляет набор функций, которые позволяют выполнять различные операции со строками и т.п.. Например по конкатенации или разбиению строк.

23. Что вы знаете о написании пользовательских jsp тегов?

JSP позволяет создавать свои собственные теги с необходимой функциональностью. Мы можем добавить библиотеку тегов на страницу JSP используя указание пространства имен. Для создания своего тега мы можем использовать следующие компоненты:

  • JSP Custom Tag Handler
  • Создание файла Tag Library Descriptor (TLD)
  • Deployment Descriptor конфигурацию для TLD

24. Приведите пример использования собственных тегов.

Например нам необходимо отформатировать в каком-либо стиле очень длинное число. Для этого можно использовать собственный тег вроде:

Используя входные параметры, число должно быть преобразовано на JSP странице в таком виде 123,456.79 согласно шаблону. Т.к. JSTL не предоставляет такой функциональности, то нам придется создать собственный тег для получения необходимого результата.

25. Почему не нужно конфигурировать стандартные JSP теги в web.xml?

Нам не нужно настраивать стандартные теги JSP в web.xml, потому что TLD файлы уже находятся внутри каталога META-INF в JSTL jar файлах. Когда контейнер загружает веб-приложение и находит TLD файлы в директории META-INF в JAR файле, то он автоматически настраивает их для непосредственного использования на JSP страницах. Остается только задать пространство имен на jsp странице.

26. Как можно обработать ошибки jsp страниц?

Для обработки исключений выброшенных на jsp странице необходимо всего лишь задать страницу ошибки. Для создания страницы ошибки JSP мы должны установить значение page directive attribute isErrorPage в значение true. Тогда мы получим доступ к неявным объектам исключений в JSP и сможем передавать собственные сообщение об ошибках клиенту (обычно более информативных).

Настройка дескриптора развертывания выглядит так.

27. Как происходит обработка ошибок с помощью jstl?

Перехватывать исключения и обрабатывать их в служебных методах класса можно с помощью JSTL Core Tags c:catch и c:if. Тег c:catch перехватывает исключение и обертывает его в переменную exception, которую мы можем обработать в теге c:if.

Обратите внимание что используется язык выражений JSP EL в теге c:if.

28. Как сделать «новую линию в HTML» в JSP?

Для переноса строки можно использовать тег c:out и атрибут escapeXml для отключения обработки HTML элементов и браузер получит следующий код как строку (и обработает элемент <br> как требуется).

29. Приведите пример конфигурации JSP в дескрипторе развертывания.

Элемент jsp-config используется для настройки различных параметров jsp страниц.

  • управление элементами скриптлетов на странице,
  • управления выполнением в языке выражений,
  • определение шаблона URL для encoding,
  • определение размера буфера, который используется для объектов на странице
  • обозначение групп ресурсов, соответствующих шаблону URL, которые должны быть обработаны как XML документ.

30. Как деактивировать использование EL на JSP?

Для игнорирования выполнения языка выражений на странице существует два способа:

  • использовать директиву <%@ page isELIgnored = «true» %>,
  • настроить web.xml (лучше подходит для отключения EL на многих страницах)

31. Когда контейнер проинициализирует множество JSP/Servlet объектов?

Если имеется несколько сервлетов и элементов servlet-mapping в дескрипторе развертывания для одного сервлета или JSP страницы, тогда контейнер инициализирует объект для каждого элемента и каждый из этих объектов имеет свой собственный объект ServletConfig и параметры инициализации.

Например, если мы будем использовать одну страницу JSP в web.xml как показано ниже.

То при доступе к одной JSP страницы с двумя шаблонами URI будет существовать два набора параметров инициализации.

32. Можно ли использовать javascript на jsp странице?

Да, это возможно. Несмотря на то, что JSP серверная технология, она всё равно создает HTML страницу, на которую можно так же добавлять javascript код и css стили.

33. Всегда ли создается объект сессии на jsp странице, можно ли отключить его создание?

По умолчанию jsp страница создает сессию, но иногда это не нужно. Мы можем использовать директиву page с атрибутом session для указания не создавать новую сессию по умолчанию. Для отключения создания сессии используется код, показанный ниже.

34. Какая разница между JspWriter и Servlet PrintWriter?

PrintWriter является объектом ответа для записи контента в ответе. JspWriter использует объект PrintWriter незаметно для пользователя и обеспечивают поддержку буферизации. Когда буфер заполнен или очищен, JspWriter использует объект PrintWriter для записи содержания (контента) в ответ.

35. Как можно расширить функциональность jsp?

Мы можем расширить технологию JSP с помощью создания собственных тегов во избежание использования скриптлетов и java кода на JSP страницах.

36. Best Practices в JSP.

Хорошей практикой работы с технологией JSP являются следующие советы:

  • Избегайте использования элементов скриптлетов на странице. Если элементы action, JSTL, JSP EL не удовлетворяют потребностям, то напишите собственный тег.
  • Используйте разные виды комментариев как предполагается. JSP комментарии необходимы для уровня кода и отладки, т.к. они не будут показаны клиенту.
  • Избегайте написания бизнес логики внутри JSP страницы. Страницы должны использоваться только для создания ответов клиенту.
  • Отключайте создание сессии на странице, когда это не требуется. Это повысит производительность.
  • Используйте директивы taglib, page в начале JSP страницы для повышения читабельности кода.
  • Используйте должным образом директиву include и jsp:include action. Первая используется для статических ресурсов, а элемент jsp:include action для динамических рантайм ресурсов.
  • Обрабатывайте исключения с помощью использования страниц ошибки. Это поможет избежать обработки на стороне служебных методов исключения и может повысить производительность.
  • При использовании CSS и JavaScript разделяйте их по разным файлам и включайте в начале страницы.
  • В большинстве случаев JSTL должно хватать для всех нужд. Если это не так, то вначале посмотрите на логику своего приложения, а так же попробуйте перенести выполнения кода в сервлет, а далее с помощью установки атрибутов использовать результат на JSP странице.
к списку вопросов раздела JEE
Share Button
38
29665 Total Views 2 Views Today

Добавить комментарий