410013796724260
• Webmoney
R335386147728
Z369087728698
Вопросы по Java на собеседовании (9)
Вопросы и ответы для собеседование по Java, Содержание. 1. Общее понятие JSPJava Server Pages (JSP) - это одна из технологий J2EE, представляющая расширение технологии сервлетов для упрощения работы с Web-содержимым. Страница JSP позволяет разделить Web-содержимое на статическую и динамическую часть, допускающую многократное использование ранее определенных компонентов. Спецификация Java Server Pages наследует и расширяет спецификацию сервлетов. Как и сервлеты, компоненты JSP относятся к компонентам Web и располагаются в Web-контейнере. Страницы JSP компилируются web-контейнером в сервлеты, которые являются Java-классами, и выполняются на сервере. 2. Порядок обработки сервером JSP страницПри открытии страницы jsp браузер отправляет http запрос на сервер в виде "GET /page_name.jsp". Сервер (WEB-контейнер) согласно запросу компилирует (при первом обращении) JSP страницу и выполняет Java сервлет, который возвращается пользователю в виде соответствующей страницы. Этот порядок включает 6 шагов :
Формирование class файла (преобразование в сервлет) сервер выполняет только один раз при первом обращении к jsp-странице. При последующих обращениях сервер использует скомпилированный сервлет. 3. Жизненный цикл JSPЖизненный цикл jsp-страницы состоит из нескольких фаз :
4. Компоненты JSP страницыТехнология JSP использует следующие компоненты :
5. Методы жизненного цикла JSPСервер приложений (например, Tomcat, GlassFish) создает из JSP-страницы класс сервлета, наследующего свойства класса org.apache.jasper.runtime.HttpJspBase, включающего следующие методы :
Можно методы jspInit() и jspDestroy() с помощью скриптов JSP переопределить. Метод jspInit() переопределяется для создания общих ресурсов, которые можно использовать в методе обслуживания JSP, а метод jspDestroy() переопределяется для освобождения общих ресурсов на фазе уничтожения. 6. Блокирование прямого доступа к JSP страницеИз WEB браузера можно обратиться к любой JSP-странице. Однако, если разместить страницу в директории приложения WEB-INF, которая не имеет прямого доступа из браузера, то открыть страницу напрямую будет нельзя. Поэтому, разместив JSP страницу внутри папки WEB-INF, можно запретить прямой доступ к странице из браузера. В этом случае, необходимо настраивать доступ к JSP странице в дескрипторе развертывания приложения (web.xml) подобно сервлету. Это можно сделать для страницы stub.jsp следующим образом : <servlet> <servlet-name>Stub</servlet-name> <jsp-file>/WEB-INF/stub.jsp</jsp-file> <init-param> <param-name>name</param-name> <param-value>value</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Stub</servlet-name> <url-pattern>Stub.xhtml</url-pattern> </servlet-mapping> 7. Динамическое и статическое содержание JSP страницыДинамическое содержание определяются во время выполнения приложения. Обычно динамическое содержание страницы представлено в виде выражений Expression Language (EL), библиотек тегов и тегов разработчика. Статическое содержание не изменяются в процессе формирования сервером страницы и представляет код HTML, JavaScript, изображения. 8. Синтаксис страницы JSPJSP страница имеют комбинированный синтаксис : объединение стандартного синтаксиса, соответствующего спецификации HTML, и синтаксиса JSP, определенного спецификацией Java Server Pages. Синтаксис JSP определяет правила записи страниц JSP, состоящих из стандартных тегов HTML и тегов JSP. Страницы JSP, кроме HTML-тегов, содержат теги JSP следующих категорий :
9. Комментирование кода JSP страницыJSP позволяет использовать два типа комментариев на странице :
Кроме этого можно использовать комментарии с динамическим содержимым. Для этого внутрь закомментированного блока должен быть встроен тег скриптлета. Примеры комментирования : <!-- Обычный комментарий, выводится в выходной поток --> <%-- JSP комментарий --%> <!-- Динамический комментарий : <%= expression %> --> 10. JSP директивыJSP директивы всегда помещаются в начале JSP-страницы до всех остальных тегов, чтобы анализатор (parser) JSP при разборе текста выделил глобальные инструкции. JSP директивы предоставляют глобальную необходимую на стадии трансляции информации, касающихся конкретных запросов, направляемых на сервер. Таким, образом, JSP Engine (среда исполнения JSP), анализируя код, создает из JSP сервлет. Т.е. директивы представляют собой сообщения для WEB-контейнера JSP. Синтаксис JSP директив имеет следующий вид : <%@ директива имяАтрибута="значение" %> Директива может иметь несколько атрибутов. В этом случае директива может быть повторена для каждого из атрибутов. В то же время пары "имяАтрибута=значение" могут располагаться под одной директивой с пробелом в качестве разделителя. Согласно спецификации JSP существует три типа директив :
11. JSP директива pageJSP директива "page" определяет свойства страницы JSP, которые необходимо использовать транслятору. Порядок следования атрибутов в директиве page не имеет значения. Нарушение синтаксиса или наличие нераспознанных атрибутов приводит к ошибке трансляции. Пример директивы "page" : <%@ page buffer="none" isThreadSafe="yes" errorPage="/error.jsp" %> В примере директива "page" объявляет, что JSP страница не использует буферизацию, но возможно одновременное обращение к данной странице JSP многих пользователей, и что поддерживается страница ошибок с именем error.jsp. JSP директива "page" может содержать информацию о странице : <%@ page info = "JSP Sample 1" %> Список возможных атрибутов директивы "page" можно посмотреть здесь. 12. JSP директива taglibJSP директива "taglib" объявляет, что на данной JSP странице используется библиотека тегов, которая идентифицируется уникальным образом с помощью URI. В директиве определяется префикс тега, с помощью которого возможны обращения к библиотеке. Если контейнер не может найти библиотеку тегов, возникает фатальная ошибка трансляции. Директива "taglib" имеет следующий синтаксис : <%@ taglib uri="http://www.taglib/mytags" prefix="customs" %> . . . <customs:myTag> В примере библиотека тегов располагается по URI-адресу "http://www.taglib/mytags". В качестве префикса определена строка "customs", которая используется в коде странице JSP при обращении к элементам (myTag) библиотеки тегов. 13. JSP директива includeДиректива "include" позволяет вставлять текст или код в процессе трансляции JSP страницы в сервлет. <%@ include file="copyright.html" %> В примере WEB-контейнер включает файл "copyright.html" в страницу JSP. Если содержимое файла изменится, то контейнер может перекомпилировать страницу JSP. Директива "include" рассматривает ресурс, например, страницу JSP, как статический объект. Заданный URI обычно интерпретируется относительно JSP страницы, на которой расположена ссылка. Но, как и при использовании любых других относительных URI, можно задать системе положение интересующего ресурса относительно домашнего каталога WEB-сервера добавлением в начало URI символа "/". Содержимое подключаемого файла обрабатывается как обычный текст JSP и поэтому может включать такие элементы, как статический HTML, элементы скриптов, директивы и действия. 14. JSP директива declarationsJSP директива "declarations" применяется для определения переменных и методов, которые используются на странице JSP. Примеры директивы "declarations" : // Объявление глобальной целочисленной переменной i <%! int i ; %> // Объявление и инициализация глобальной строковой переменной s <%! String s = "Hello, World!"; %> // Объявление метода adding (сложение целочисленных значений) <%! public int adding (int a, int b){return a + b}; %> 15. JSP директива scriptletsСкриптлеты "scriptlets" включают различные фрагменты кода, написанного на языке скрипта, определенного в директиве language, т.е. соответствуют, как правило, синтаксису языка Java. "scriptlets" имеют следующий синтаксис : <% текст скриптлета %> В спецификации JSP приводится простой и понятный пример скриптлета, обеспечивающего динамическое изменение приветствия на странице JSP в течение дня. <% if (Calendar.getInstance().get (Calendar.AM_PM)==Calendar.AM){%> Good Morning <% } else { %> Good Afternoon <% } %> Следует отметить, что код внутри скриптлета вставляется в том виде, как он записан, а весь статический HTML-текст (текст шаблона) до или после скриптлета конвертируется при помощи оператора print. Это означает что скриптлеты не обязательно должны содержать завершенные фрагменты на Java, и что оставленные открытыми блоки могут оказать влияние на статический HTML-текст вне скриптлета. 16. Выражения expressionsВыражения "expressions" в странице JSP обозначает исполняемое выражение. Результат выражения JSP, имеющий обязательный тип String, направляется в стандартный поток вывода out с помощью текущего объекта JspWriter. Если результат выражения не может быть приведен к типу String, возникает либо ошибка трансляции, если проблема была выявлена на этапе трансляции, либо возбуждается исключение ClassCastException, если несоответствие было выявлено в процессе выполнения запроса. Пример выражения : Текущее время: <%= new java.util.Date () %> В выражениях можно использовать несколько определенных переменных. Наиболее часто используемые переменные :
17. Библиотека тегов JSTLСтандартная библиотека тегов JSP (JavaServer Pages Standard Tag Library, JSTL) используется для условной обработки, создания циклов, интернационализации страницы, разбора XML данных. JSTL является альтернативой скриплетам, встроенным в JSP, то есть прямым вставкам Java кода, и представляет собой набор тегов в стиле HTML, позволяющих обращаться к объектам Java и выполнять многие из конструкций языка Java. Для подключения библиотеки тегов JSTL используются следующие выражения : // Основные теги создания циклов, определения условий и т.д. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> // Теги для работы с XML-документами <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> // Теги для работы с базами данных <%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/sql" %> // Теги для форматирования и интернационализации информации <%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %> 18. Тег вывода значения <c:out>Тэг <c:out> используется для вывода данных на страницу. Примеры использования тега : // 1. отображение текста 16+64*2 <c:out value="16+64*2" /> // 2. отображение значения 144 <c:out value="144" /> // 3. вывод значения user или guest, если user=null <c:out value="" default="guest" /> Первый пример вернет текст "16+64*2", а вот второй — 144, поскольку используется выражение EL (Expression Language). Если выражение value вернет значение null, то тег <c:out> выведет на экран пустое место. Но если определить значение атрибута по-умолчанию (3-ий пример), то на странице отобразится это значение. 19. Тег определения значения <c:set>Тег <c:set> используется для определения переменной. Пример использования : <c:set var="user" scope="session" value="Sergey" /> <c:out value="" /> В примере создается переменная user, имеющая значение "Sergey". Обратиться к переменной можно с использованием EL выражения . Вторая строка примера выводит содержимое переменной на страницу. Атрибут "scope" определяет область видимости и не является обязательным; по-умолчанию имеет значение "page", т.е. доступен на странице. Возможные варианты атрибута scope [ session, page, request, application]. С помощью тэга <c:set> можно устанавливать свойства компонентов JavaBean, добавлять значения к спискам и массивам. Для этого используется параметр target. Например : <c:set target="" property="fio" value="Остап Бендер" /> <c:out value="" /> 20. Тег проверки условия <c:if>Тег <c:if> позволяет проверить некоторое условие, но не может быть использован для формирования ветки else или elseif. Пример : <c:if test="false"> Возраст более 24 лет </c:if> <c:if test="false"> Возраст не менее 24 лет </c:if> 21. Тег проверки нескольких условий <c:choose>Тег <c:choose> является аналогом оператора switch в Java. Он позволяет организовать выбор из нескольких условий. Синтаксис <c:choose> включает вложенный тег <c:when>, отвечающий за определенное действие. Пример : <c:set var="alter" scope="session" value=""/> <c:choose> <c:when test="false"> Переменная alter <= 0 </c:when> <c:when test="false"> Переменная alter > 28 </c:when> <c:otherwise> Условие не определено </c:otherwise> </c:choose> 22. Тег формирования цикла <c:forEach>Тег <c:forEach> позволяет сформировать цикл. Пример использования forEach : <table> <c:forEach var="clip" items="" varStatus="сounter" > <tr><td>></td> <td></td></tr> </c:forEach> </table> Переменной атрибута var в цикле присваивается значение из списка items, которое отображается в ячейке таблицы. Значение можно вывести в ячейку таблицы с использованием выражения EL без тега <c:out>, т.е. . Тэг <c:forEach> может включать опциональный параметр varStatus, позволяющий, реализовать счетчик типа переменной 'i' в цикле. 23. Тег вложения <c:import>Тег <c:import> позволяет выполнять вложения одной страницы в другую. Пример : <c:import url="footer.jsp" > <c:param name="company" value="Рога и копыта" /> </c:import> Страница footer.jsp загружается динамически на этапе выполнения запроса. В качестве url может использоваться страница за пределами сервера приложений. Если необходимо передать какой-либо параметр удаленной странице, то можно использовать тэг <c:param>. Таким образом тег <c:import> позволяет разбить страницу на части. Дополнительную информацию об использовании библиотеки тегов JSTL можно увидеть здесь. 24. Тег перехвата исключений <c:catch>Для перехвата и обработки возможных исключений в теле JSP следует использовать тэг <c:catch>. Пример : <c:catch var ="exception"> <% int x = 5/0;%> </c:catch> <c:if test = "false"> <p>Возникло исключение : <br /> Сообщение : </p> </c:if> В примере при перехвате исключения была определена переменная "exception", значение которой выводится на страницу.
Вопросы и ответы для собеседование по Java, Содержание. |