410013796724260
• Webmoney
R335386147728
Z369087728698
JSP в вопросах и ответахНа странице рассмотрены следующие вопросы JSP :
Технология JSPJava Server Pages (JSP) - это одна из серверных технологий J2EE, которая представляет собой расширение технологии сервлетов для упрощения работы с Web-содержимым. JSP расширяет технологию сервлетов и позволяет разделить Web-страницу на статическую и динамическую части. Спецификация JSP наследует и расширяет спецификацию сервлетов. Компоненты JSP относятся к компонентам Web и располагаются в Web-контейнере. Страницы JSP не зависят от конкретной реализации Web-контейнера. На странице JSP можно использовать компоненты JavaBeans, подключать собственные библиотеки нестандартных тегов, которые инкапсулируют сложные динамические функциональные средства. Технология JSP использует следующие компоненты :
Фазы жизненного цикла JSPИсходный код JSP страницы ближе к HTML, чем к java-классу (сервлету). Конвертацию JSP страницы в java-код осуществляет сервер приложений типа Tomcat, который при первом обращении к JSP странице создает исходный код сервлета (java-класса). Сервлет размещается в директории /webapp/org/apache/jsp. Полный путь директории TOMCAT/work/Catalina/localhost/WEBAPP/org/apache/jsp. В исходном коде сервлета определен путь (пакет) package org.apache.jsp. Таким образом, жизненный цикл JSP страницы практически совпадает с жизненным циклом сервлета :
Методы жизненного цикла JSPСервер приложений (например, Tomcat, GlassFish) создает из JSP-страницы класс сервлета, наследующего свойства org.apache.jasper.runtime.HttpJspBase и включающего следующие методы :
Комментарий на странице JSPТекст на JSP странице можно закомментировать либо с использованием тегов HTML, либо JSP тегов. Комментарии JSP не отображаются на странице, их можно использовать в качестве отладочных комментариев. <!—- HTML комментарий; отображается на странице JSP —-> <%—- JSP комментарий; не отображается на странице JSP —-%> Объявление declarationsJSP declarations предназначены для объявления методов и переменных. Синтаксис declarations определяется тегом <%! declaration %>, например : <%! public static int count=0; %> <%! String s = "Hello, World!"; %> // Объявление метода в одну строку <%! public int adding (int a, int b){return a + b}; %> // Объявление метода в нескольких строках <%! public static int fact (int n) { if (n <= 1) return 1; else return n * fact (n - 1); } %> Скриптлет scriptlet на странице JSPScriptlet представляет собой скриптовый элемент внутри JSP страницы, который должен быть выполнен. Синтаксис скриптлета задается тегом <% scriplet %>. Код внутри этих тегов передается в метод _jspService() для исполнения. Скриптлеты имеют доступ к неявным объектам (implicit objects) также, как и выражения. Поэтому, например, если есть необходимость вывести какую-либо информацию на страницу, необходимо воспользоваться переменной out. <% Date d = new Date(); out.println("Current Date="+d); %> <% String queryData = request.getQueryString (); out.println ("Дополнительные данные запроса: " + queryData); %> Выражения expression на странице JSPЧасто возникает необходимость отобразить динамическую информацию с использованием метода out.print(). Для этого можно использовать язык выражений expression, который записывается как <%= expression %>. Выражение <% out.print(«Я люблю отдыхать на природе»); %> может быть переписано с помощью JSP выражения <%= «Я люблю отдыхать на природе» %>. Весь текст внутри тегов <%= .. %> будет передан в out.print() метод. Следует обратить внимание, что выражения не должны заканчиваться точкой с запятой. Текущее время: <%= new java.util.Date() %> В выражениях expression можно использовать несколько заранее определенных неявных объектов. Наиболее часто используемые :
Неявные (implicit) объекты на JSP страницеНеявные объекты (implicit objects) создаются контейнером при конвертации JSP страницы в код сервлета. Эти объекты можно использовать в скриптлетах для передачи информации в сервис методы. Но неявные объекты нельзя использовать в JSP declarations. Можно использовать 9 неявных объектов прямо на JSP странице. Пример JSP страницы с использованием неявных объектв implicit objects<%@ page language="java" contentType="text/html; charset=US-ASCII" pageEncoding="US-ASCII"%> <%@ page import="java.util.Date" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Пример JSP страницы</title> </head> <body> <h1>Добро пожаловать</h1> <%-- Запросы объектов (request object) --%> <b>Текущая дата</b>: <% out.print(new Date()); %><br><br> <b>Заголовок User-Agent</b>: <%= request.getHeader("User-Agent") %><br><br> <%-- Добавить cookie --%> <%response.addCookie(new Cookie("Test","Value")); %> <%-- Параметры конфигурации --%> <b>Значение параметра Timeout </b> : <%= config.getInitParameter("Timeout") %><br><br> <%-- Объект application --%> <b>Значение параметра Login</b> : <%= application.getInitParameter("User") %><br><br> <%-- Объект session --%> <b>Идентификатор сессии SessionID</b> : <%= session.getId() %><br><br> <%-- Объект pageContext --%> <p>Установлен атрибут pageContext : ключ "Account", значение "Serg".</p> <% pageContext.setAttribute("Account", "Serg"); %> <b>Атрибут PageContext</b> : { Key = "Account", Value="<%= pageContext.getAttribute("Account")%>"}<br><br> <%-- Объект page --%> <b>Имя сгенерированного класса сервлета</b> : <%= page.getClass().getName() %> </body> </html> Библиотека JSTLJSTL (JavaServer Pages Standard Tag Library) - это стандартная библиотека тегов JSP, расширяющая ее функциональные возможности и позволяющая проводить такие операции/действия, как разбор XML данных, условные переходы, создание циклов и поддержку интернационализации. JSTL является альтернативой встроенной в JSP логики типа скриптлетов, то есть прямые вставки Java кода. Для использования JSTL тегов необходимо подключить библиотеку (taglib) и указать пространство имен (prefix). <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> Категории библиотеки тегов JSTLСтандартную библиотеку тегов JSTL делят на пять категорий согласно их функциональности :
Использование PageContextНеявный implicit объект PageContext можно использовать для установки атрибутов с различной областью видимости и для передачи запросов другому ресурсу. <p>Определение атрибута pageContext : ключ "Account", значение "Serg".</p> <% pageContext.setAttribute("Account", "Serg"); %> <%-- Чтение атрибута pageContext --%> <p>Атрибут PageContext : {Key="Account", Value="<%= pageContext.getAttribute("Account")%>"}</p> Блокирование выполнение выражений EL на JSP страницеДля игнорирования выполнения выражений на JSP странице существует два способа:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> Можно блокировать выполнение выражения JSTL также размещением обратного слэша '\' перед EL. Обработка ошибок с помощью JSTL тега <c:catch>Для перехвата исключения с помощью JSTL Core Tags необходимо использовать тег <c:catch>. Тег c:catch записывает в переменную exception описание ошибки, которую можно обработать в теге c:if. <c:catch var ="exception"> <% int x = 5/0;%> </c:catch> <c:if test = "${exception ne null}"> <p>Exception : ${exception} <br /> Exception message : ${exception.message}</p> </c:if> Пример перехвата исключительной ситуации с использованием тега <c:catch> библиотеки JSTL приведен на странице примера JSP. Обработка ошибки на JSP страницеДля обработки исключений на JSP странице необходимо определить страницу ошибки. Для создания такой страницы необходимо установить значение аттрибута isErrorPage директивы page в значение true. В этом случае будет открыт доступ к неявным объектам исключений в JSP. Например на JSP странице errorPageAttribute.jsp определяем страницу представления ошибки errorPage.jsp <%@ page errorPage="errorPage.jsp" %> На JSP странице обработки ошибки errorPage.jsp определяем аттрибут isErrorPage <%@ page isErrorPage="true" %> <html> <head> <title>Error Page</title> </head> <body> Your page generated an error : <%= exception.toString() %> </body> </html> Пример обработки исключений на JSP приведен на странице описания примера JSP. |