Lecture14 (Лекции по Технологии программирования. Компонентный подход), страница 6
Описание файла
Файл "Lecture14" внутри архива находится в папке "Лекции по Технологии программирования. Компонентный подход". PDF-файл из архива "Лекции по Технологии программирования. Компонентный подход", который расположен в категории "". Всё это находится в предмете "основы программной инженерии" из 6 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 6 страницы из PDF
В этом случаеони выглядят следующим образом.<tagprefix:tag attribute1="value1" … attributeN="valueN">… (вложенные теги)</tagprefix:tag>Стандартные теги имеют префикс jsp, а префикс пользовательских тегов определяется вдирективе taglib, подключающей содержащую их библиотеку.Имеется довольно много стандартных тегов. Основные из них следующие.•jsp:includeОпределяет динамическое включение некоторой страницы или файла в данную страницупри обработке запроса. С помощью вложенных тегов jsp:param может указывать один илинесколько пар параметр-значение в качестве параметров включаемой страницы.Имеет атрибуты page, определяющий URL включаемой страницы, и flush, имеющийзначения true или false в зависимости от того, нужно ли сразу после включения сброситьбуфер выходного потока в генерируемом ответе или нет.•jsp:useBeanОпределяет используемый объект или компонент.
Фактически такой тег эквивалентендекларации переменной определенного типа, инициализируемой определенным объектом идоступной в рамках некоторого контекста.Имеет следующие атрибуты.o id = "имя объекта"Задает имя объекта, которое будет использоваться в коде JSP. Должно быть уникально впределах страницы.o class = "класс объекта"Задает класс этого объекта.o scope = "page|request|session|application"Задает область видимости декларируемого объекта.o type = "тип используемой ссылки на объект"Указанный тип должен быть предком класса объекта.
Это тип декларируемойпеременной, а класс объекта определяет истинный тип объекта, хранящегося в ней.••jsp:setProperty, jsp:getPropertyУстанавливает или получает значение свойства объекта.Атрибут name определяет имя объекта, чье свойство используется, а атрибут property —имя свойства.Тег jsp:getProperty записывает полученное значение свойства в результирующийдокумент в виде строки (результата вызова toString() для этого значения).Тег jsp:setProperty имеет также дополнительный атрибут — либо value, значениекоторого присваивается свойству, либо param, который указывает имя параметра запроса,значение которого записывается в свойство.
Если в теге jsp:setProperty вместо именисвойства в атрибуте property указан символ *, то всем свойствам указанного объекта сименами, совпадающими с именами параметров запроса, будут присвоены значениясоответствующих параметров.jsp:forwardЭтот тег употребляется для перенаправления запроса на обработку другой странице. URLэтой страницы указывается в качестве значения атрибута page.
В качестве этого URLможет использоваться JSP-выражение (см. далее), вычисляемое на основе параметровзапроса.С помощью вложенных тегов jsp:param можно передать одно или несколько значенийпараметров странице, на которую переключается управление.•jsp:pluginЭтот тег вставляет аплет или компонент JavaBean на страницу. Параметры инициализациикомпонента могут быть заданы при помощи вложенного тега jsp:params. Кроме того,jsp:plugin имеет следующие атрибуты.o type = "bean|applet"Задает вид вставляемого компонента.o code = "имя файла класса компонента (включая расширение .class)"o codebase = "имя директории, в которой находится файл класса компонента"Если этот атрибут отсутствует, используется директория, содержащая данную JSPстраницу.o name = "имя используемого экземпляра компонента"o archive = "список разделенных запятыми путей архивных файлов, которые будутзагружены перед загрузкой компонента"Эти архивы содержат дополнительные классы и библиотеки, необходимые для работыкомпонента.o align = "bottom|top|middle|left|right"Задает положение экземпляра компонента относительно базовой строки текстасодержащего его HTML-документа.o height = "высота изображения объекта в точках"o width = "ширина изображения объекта в точках"o hspace = "ширина пустой рамки вокруг объекта в точках"o vspace = "высота пустой рамки вокруг объекта в точках"o jreversion = "версия JRE, необходимая для работы компонента"По умолчанию используется версия 1.1.Пользовательские теги могут быть определены для выполнения самых разнообразныхдействий.
Одна из наиболее широко используемых библиотек тегов core (подключаемая спомощью директивы <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix = "c"%>), содержит теги, представляющие все конструкции языка Java.Например, с помощью тега <c:set var="variable" value="value" /> можно присвоитьзначение value в переменную variable, с помощью тега <c:if test="expression">…</c:if>можно выполнить код JSP, расположенный внутри этого тега только при том условии, еслиexpression имеет значение true, с помощью тега <c:forEach var="variable"items="collection">…</c:forEach> можно выполнить содержащийся в нем код для всехэлементов коллекции collection, используя для обращения к текущему элементу переменнуюvariable.Таким образом, весь код, который может быть записан в виде скриптовых элементов (см.далее), можно записать и в виде тегов.
Применение тегов при этом вносит некоторые неудобствадля Java-программиста. Но оно же делает код JSP-страниц более однородным и позволяетобрабатывать его с помощью инструментов для разработки Web-сайтов, гораздо лучшеприспособленных к работе с размеченным с помощью тегов текстом.Скриптовые элементы могут иметь один из следующих трех видов.• JSP-объявления, служащие для определения вспомогательных переменных и методов. Этипеременные становятся впоследствии полями сгенерированного по JSP сервлета, а методы— его методами.
Синтаксис JSP-объявления следующий.<%! код на Java %>• Скриплеты, которые служат для вставки произвольного кода, обрабатывающего данныезапроса или генерирующего элементы ответа, в произвольное место. Они имеютследующий синтаксис.<% код на Java %>• JSP-выражения, используемые для вставки в какое-то место в результирующем документевычисляемых значений (они также могут использоваться в качестве значений атрибутовтегов). Их синтаксис может иметь три вида.<% = выражение на Java %>${выражение на Java}#{выражение на Java}Различий между первым и вторым способом представления выражений практически нет.Выражение третьего типа вычисляется отложено — вычисление его значения происходит толькотогда, когда это значение действительно понадобится.Комментарии в коде JSP оформляются в виде содержимого тега <%-- … --%>.
Встречающийсяв них код не обрабатывается во время трансляции и не участвует в работе полученного сервлета.Элементы кода внутри HTML-комментариев <!-- … --> обрабатываются так же, как и в другихместах — они генерируют содержимое комментариев в результирующем HTML-документе.Помимо объявленных в объявлениях и тегах jsp:useBean переменных в скриптовых элементахмогут использоваться неявно доступные объекты, связанные с результирующим сервлетом,обрабатываемым им запросом и генерируемым ответом, например, следующие.•request — запрос клиента (тип ServletRequest).•param — параметры запроса (тип Map).•response — ответ сервера (тип ServletResponse).•out — выходной поток сервлета (тип PrintWriter).•session — сеанс (тип HttpSession).•application —приложение (ServletContext).•config — конфигурация сервлета (ServletConfig).•pageContext — контекст страницы (javax.servlet.jsp.PageContext).• exception — произошедшее исключение.Ниже приведен пример JSP страницы, генерирующей таблицу балансов клиентов некоторойорганизации в долларовом и рублевом выражениях.<%@ page import="java.util.Date, java.util.Iterator,com.company.Client" %><jsp:useBean id="clients" class="com.company.ClientList"scope="page" /><jsp:useBean id="convertor" class="com.company.ExchangeRate"scope="page" /><html><head><title>Table of clients</title></head><body><h3 align="center">Table of clients</h3>Created on <%= new Date() %> <br><br><table width="98%" border="1" cellspacing="1" cellpadding="1"><tr><%!private double dollarsToRubles(double m){return m*convertor.getDollarToRubleRate(new Date());}%><th width="50%" scope="col">Client</th><th width="25%" scope="col">Balance, dollars</th><th width="25%" scope="col">Balance, rubles</th></tr><%Iterator it = clients.getNumberOfClients().iterator();while(it.hasNext()){Client сlient = (Client)it.next();%><tr><td> ${client.getFullName()} </td><td> ${client.getBalance()} </td><td> ${dollarsToRubles(client.getBalance())} </td></tr><%}%></table> <br><br><jsp: include page="footer.txt" flush= "true" /></body></html>Уровень пользовательского интерфейса в .NETРазработка компонентов пользовательского интерфейса Web-приложений в рамках .NETвыделена в виде отдельной технологии ASP.NET [9,10] и в целом очень похожа на разработку техже компонентов в J2EE.
В .NET имеются те же виды компонентов: элементы управления,представленные серверными элементами управления HTML (HTML server controls) и простосерверными элементами управления (Web Server Controls), обработчики HTTP запросов (аналогсервлетов в Java), представленные интерфейсами IHttpHandler и IHttpAsyncHandler, и такназываемые Web-формы (Web forms), аналог серверных страниц Java.Элементы управления WebUI в .NET могут быть размещены на HTML-страницах, новыполняются на сервере.
Библиотеки таких компонентов находятся в сборке System.Web и впространстве имен System.Web.UI, вместе с его подпространствами. Их употребление в рамкахHTML-документа оформляется в виде специальных тегов с атрибутом runat, имеющим значениеserver. Ниже приведен пример использования компонента System.Web.UI.WebControls.Button вкоде Web-формы.<%@ Page Language="C#" AutoEventWireup="True" %><html><head><script language="C#" runat=server>void OnButtonClick(object sender, EventArgs e){Message.Text="Hello World!!";}</script></head><body><form runat="server"><h3>Button Example</h3>Click on the submit button.<br><br><asp:Button id="MyButton"Text="Submit"OnClick="OnButtonClick"runat="server"/><p><asp:label id="Message" runat="server"/></form></body></html>Аналогом сервлетов в .NET являются объекты, реализующие интерфейсыSystem.Web.IHttpHandler и System.Web.IHttpAsyncHandler.