Ответы на вопросы на собеседование JSP, Servlets, JSTL (часть 4).

  • Какие скоупы переменных существуют в JSP?

Exression Language - это переменные определенного скоупа, которые доступны через выражение ${…}, среди скоупов есть и скоуп page, но даже в этом скоупе переменная не является локальной для класса страницы. Поэтому мы просто так не можем в скриптлете обратиться к переменной из этих скоупов, в том числе и скоупа страницы. Скоупы бывают: page, request, session, application, response, out, config.

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

JSP implicit objects (неявные объекты) создаются контейнером при конвертации JSP страницы в код сервлета для помощи разработчикам. Эти объекты можно использовать напрямую в скриптлетах для передачи информации в сервис методы, однако мы не можем использовать неявные объекты в JSP Declaration, т.к. такой код пойдет на уровень класса.
Существует 9 видов неявных объектов, которые можно использовать прямо на JSP странице. Семь из них объявлены как локальные переменные вначале _jspService() метода, а два оставшихся могут быть использованы как аргументы метода _jspService().
  • out Object
  • request Object
  • response Object
  • config Object
  • application Object
  • session Object
  • pageContext Object
  • page Object
  • exception Object

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

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

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

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

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

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

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

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

  • Чем отличается <c:import> от <jsp:include> и директиви <%@include %>? 

Тег <c:import> получает доступ к источнику, чтение информации из которого происходит непосредственно без буферизации. Контент включается построчно в исходную JSP. По сравнению с action-тегом <jsp:include> и директивой <%@include %> тег <c:import> обеспечивает более совершенное включение динамических ресурсов.

  • Что вы знаете о 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.

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

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

  • Из каких групп тегов состоит библиотека JSTL?

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

  • Какая разница между тегом <c:set> и <jsp:useBean>?

Существует аналогия между тегом <c:set> и тегом <jsp:useBean>. Оба создают и помещают экземпляры в заданную область видимости. Но <jsp:useBean> только непосредственно создает экземпляр конкретного типа, а <c:set>, создав ссылку, позволяет извлекать значение, например, из параметров запроса, сессии и т. д.

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

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

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

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

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

JSP позволяет создавать свои собственные теги с необходимой функциональностью. Мы можем добавить библиотеку тегов на страницу JSP используя указание пространства имен. Для создания своего тега мы можем использовать следующие компоненты:
  • JSP Custom Tag Handler
  • Создание файла Tag Library Descriptor (TLD)
  • Deployment Descriptor конфигурацию для TLD

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рассказать друзьям:

0 коментарі :

Отправить комментарий