- •724 Содержание
- •Глава 6. Интерфейсы и внутренние классы 139
- •У казания и ответы
- •Вопрос 3.2.
- •Вопрос 8.2.
- •Вопрос 8.3.
- •Вопрос 14.2.
- •Вопрос 21.5.
- •Ч асть 1. Основы языка java
- •Глава 1 введение в классы и объекты Основные понятия ооп
- •Язык Java
- •Нововведения версий 5.0 и 6.0
- •Простое приложение
- •Классы и объекты
- •Сравнение объектов
- •Консоль
- •Простой апплет
- •Задания к главе 1 Вариант a
- •Вариант b
- •Тестовые задания к главе 1
- •Вопрос 1.5.
- •Г лава 2 типы данных и операторы
- •Базовые типы данных и литералы
- •Документирование кода
- •Операторы
- •Классы-оболочки
- •Операторы управления
- •Массивы
- •Класс Маth
- •Управление приложением
- •Задания к главе 2 Вариант a
- •Вариант в
- •Тестовые задания к главе 2
- •Переменные класса и константы
- •Ограничение доступа
- •Конструкторы
- •Статические методы и поля
- •Модификатор final
- •Абстрактные методы
- •Модификатор native
- •Модификатор synchronized
- •Логические блоки
- •Перегрузка методов
- •Параметризованные классы
- •Параметризованные методы
- •Методы с переменным числом параметров
- •Перечисления
- •1 : Fpmi : Балаганов
- •Аннотации
- •Задания к главе 3 Вариант a
- •Вариант b
- •Тестовые задания к главе 3
- •Использование final
- •Использование super и this
- •Переопределение методов и полиморфизм
- •Методы подставки
- •Полиморфизм и расширяемость
- •Статические методы и полиморфизм
- •Абстракция и абстрактные классы
- •Класс Object
- •Клонирование объектов
- •“Сборка мусора” и освобождение ресурсов
- •Задания к главе 4 Вариант a
- •Вариант в
- •Тестовые задания к главе 4
- •Вопрос 4.7.
- •Г лава 5 проектирование классов Шаблоны проектирования grasp
- •Шаблон Expert
- •Шаблон Creator
- •Шаблон Low Coupling
- •Шаблон High Cohesion
- •Шаблон Controller
- •Шаблоны проектирования GoF
- •Порождающие шаблоны
- •К порождающим шаблонам относятся:
- •Шаблон Factory
- •Шаблон AbstractFactory
- •Шаблон Builder
- •Шаблон Singleton
- •Структурные шаблоны
- •К структурным шаблонам относятся:
- •Шаблон Bridge
- •Шаблон Decorator
- •Шаблоны поведения
- •К шаблонам поведения относятся:
- •Шаблон Command
- •Шаблон Strategy
- •Шаблон Observer
- •Тестовые задания к главе 5
- •Статический импорт
- •Внутренние классы
- •Внутренние (inner) классы
- •Вложенные (nested) классы
- •Анонимные (anonymous) классы
- •Задания к главе 6 Вариант а
- •Вариант b
- •Вариант c
- •Тестовые задания к главе 6
- •Вопрос 6.5.
- •Класс String
- •Классы StringBuilder и StringBuffer
- •Форматирование строк
- •Лексический анализ текста
- •Регулярные выражения
- •Интернационализация текста
- •Интернационализация чисел
- •Интернационализация дат
- •3 Апрель 2006 г.
- •Задания к главе 7 Вариант a
- •Вариант b
- •Тестовые задания к главе 7
- •Оператор throw
- •Ключевое слово finally
- •Собственные исключения
- •Наследование и исключения
- •Отладочный механизм assertion
- •Задания к главе 8
- •Байтовые и символьные потоки ввода/вывода
- •Предопределенные потоки
- •Сериализация объектов
- •Консоль
- •Класс Scanner
- •Архивация
- •Задания к главе 9 Вариант a
- •Вариант b
- •Вариант с
- •Тестовые задания к главе 9
- •Множества
- •Карты отображений
- •14El - найден по ключу '12'
- •Унаследованные коллекции
- •Класс Collections
- •Класс Arrays
- •Задания к главе 10 Вариант a
- •Вариант b
- •Тестовые задания к главе 10
- •Апплеты
- •Задания к главе 11
- •Тестовые задания к главе 11
- •Классы-адаптеры
- •Задания к главе 12
- •Тестовые задания к главе 12 Вопрос 12.1.
- •Вопрос 12.2.
- •Вопрос 12.3.
- •Вопрос 12.4.
- •Вопрос 12.5.
- •Г лава 13 элементы компоновки и управления
- •Менеджеры размещения
- •Элементы управления
- •Визуальные компоненты JavaBeans
- •Задания к главе 13 Вариант а
- •Вариант b
- •Жизненный цикл потока
- •Управление приоритетами и группы потоков
- •Управление потоками
- •Потоки-демоны
- •Потоки в графических приложениях
- •Методы synchronized
- •Инструкция synchronized
- •Состояния потока
- •Потоки в j2se 5
- •Задания к главе 14 Вариант а
- •Вариант b
- •Тестовые задания к главе 14
- •Вопрос 14.1.
- •Вопрос 14.2.
- •Вопрос 14.3.
- •Вопрос 14.4.
- •Вопрос 14.5.
- •Г лава 15 сетевые программы Поддержка Интернет
- •Сокетные соединения по протоколу tcp/ip
- •Многопоточность
- •Датаграммы и протокол udp
- •Задания к главе 15 Вариант а
- •Вариант b
- •Древовидная модель
- •Элементы таблицы стилей
- •Задания к главе 16 Вариант а
- •Тестовые задания к главе 16
- •Запуск контейнера сервлетов и размещение проекта
- •Первая jsp
- •Взаимодействие сервлета и jsp
- •Задания к главе 17 Вариант а
- •Вариант b
- •Интерфейс ServletContext
- •Интерфейс ServletConfig
- •Интерфейсы ServletRequest и HttpServletRequest
- •Интерфейсы ServletResponse и HttpServletResponse
- •Обработка запроса
- •Многопоточность
- •Электронная почта
- •Задания к главе 18 Вариант а
- •Вариант b
- •Стандартные элементы action
- •Неявные объекты
- •Демонстрация работы тегов c:forEach, c:choose, c:when, c:otherwise
- •Данная страница демонстрирует работу тегов
- •Включение ресурсов
- •Обработка ошибок
- •Технология взаимодействия jsp и сервлета
- •Задания к главе 19
- •Вариант а
- •Вариант b
- •Субд MySql
- •Простое соединение и простой запрос
- •Метаданные
- •Подготовленные запросы и хранимые процедуры
- •Транзакции
- •Id студента: 83, Petrov Внесены данные в students: 83, Petrov Внесены данные в course: 83, xml Данные внесены - транзакция завершена
- •Точки сохранения
- •Пул соединений
- •Задания к главе 20 Вариант а
- •Вариант b
- •Обработка событий
- •Фильтры
- •Задания к главе 21 Вариант а
- •Вариант b
- •Вопрос 21.5.
- •Вопрос 21.6.
- •Г лава22 пользовательские теги
- •Простой тег
- •Тег с атрибутами
- •Тег с телом
- •Элементы action
- •Задания к главе 22 Вариант а
- •Вариант b
- •П риложение 2
- •Включение скриптов на языке JavaScript в html-код
- •Отладка скриптов JavaScript
- •Типы данных
- •Специальные числа
- •Булев тип
- •Переменные типа Undefined и Null
- •Массивы
- •Операторы и выражения
- •Оператор with
- •Оператор switch
- •Метод eval()
- •Функции
- •Передача параметров по значению и по ссылке
- •Глобальные и локальные переменные
- •Пользовательские объекты
- •Прототипы
- •Встроенные объекты Array, Date, Math Объект Array
- •Объект Date
- •Объект Math
- •Объекты window и document
- •Создание новых узлов
- •Добавление новых узлов в документ
- •Удаление и замена узлов в документе
- •Использование каскадных таблиц стилей в dom
- •Свойство элемента innerHtml и outerHtml
- •Динамическое назначение событий
- •Ключевое слово this
- •П риложение3
- •Проектная модель
- •Uml как программный язык
- •Нотации и метамодель
- •Диаграммы, которые ниже будут рассмотрены с разной степенью детализации:
- •Свойства
- •Множественность
- •Операторы
- •П риложение 4 базы данных и язык sql
- •Реляционные субд Модель данных в реляционных субд
- •Нормализация модели данных
- •Язык sql
- •Команды sql
- •Команды определения структуры данных (DataDefinitionLanguage–ddl)
- •Команды манипулирования данными (Data Manipulation Language – dml)
- •Команды управления транзакциями (TransactionControlLanguage–tcl)
- •Команды управления доступом (DataControlLanguage–dcl)
- •Работа с командами sql
- •Ключевое слово distinct
- •Секция from, логическое связывание таблиц
- •Секция where
- •Секция orderby
- •Групповые функции
- •Секция group by
- •Секция having
- •Изменение данных
- •Команда insert
- •Команда delete
- •Команда update
- •Определение структуры данных Команда createtable
- •Команда droptable
- •П риложение5
- •П риложение 6
- •П риложение7 журнал сообщений (logger)
- •П риложение 8
- •Портлеты
Тег с атрибутами
Тег может содержать параметры и передавать их значения для обработки в соответствующий ему класс. Для этого при описании тега в файле *.tld используются атрибуты, которые должны объявляться внутри элемента tag с помощью элемента attribute. Внутри элемента attribute между тегами <attribute> и </attribute> могут находиться следующие элементы:
name – имя атрибута (обязательный элемент);
required – указывает на то, всегда ли должен присутствовать данный атрибут при использовании тега, который принимает значение true или false (обязательный элемент);
rtexprvalue – показывает, может ли значение атрибута быть JSP-выражением вида ${expr} или <%=expr%> (значение true) или оно должно задаваться строкой данных (значение false). По умолчанию устанавливается false, поэтому этот элемент обычно опускается, если не требуется задавать значения атрибутов во время запроса (необязательный элемент).
Соответственно для каждого из атрибутов тега класс, его реализующий, должен содержать метод setИмяАтрибута().
В следующем примере рассматривается простейший тег с атрибутом firstname, который выводит пользователю сообщение:
// пример # 3 : тег с атрибутом : HelloTag.java
package test.mytag;
import javax.servlet.jsp.tagext.TagSupport;
importjava.io.IOException;
public class HelloTag extends TagSupport {
private String firstname;
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public int doStartTag() {
try {
pageContext.getOut().write("Hello, " + firstname);
} catch (IOException e) {
e.printStackTrace();
}
returnSKIP_BODY;
}
}
В файл mytaglib.tld должна быть помещена следующая информация о теге:
<tag>
<name>hello</name>
<tag-class>test.mytag.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>firstname</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
Использовать созданный тег в файле demotag2.jsp можно следующим образом:
пример # 4 : вызов тега с передачей ему значения : demotag2.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<%@ taglib uri="/WEB-INF/mytaglib.tld" prefix="mytag"%>
<%@ page
language="java"
contentType="text/html; charset=CP1251"
pageEncoding="CP1251"
%>
<HTML><HEAD>
<TITLE>demotag2.jsp</TITLE>
</HEAD>
<BODY>
<c:set var="login" value="Bender"/>
<mytag:hello firstname="${login}" />
</BODY>
</HTML>
При обращении по адресу:
http://localhost:8080/FirstProject/demotag2.jsp
в браузер будет выведено:
Hello, Бендер
Тег с телом
Как и в обычных тегах, между открывающим и закрывающим пользовательскими тегами может находиться тело тега, или body. Пользовательские теги могут использовать содержимое элемента body-content. На данный момент поддерживаются следующие значения для body-content:
empty – пустое тело;
jsp – тело состоит из всего того, что может находиться в JSP-файле. Используется для расширения функциональности JSP-страницы;
tagdependent – тело интерпретируется классом, реализующим данный тег. Используется в очень частных случаях.
Когда разрабатывается пользовательский тег с телом, то лучше наследовать класс тега от класса BodyTagSupport, реализующего в свою очередь интерфейс BodyTag. Кроме методов класса TagSupport (суперкласс для BodyTagSupport), он имеет методы, среди которых следует выделить:
void doInitBody() – вызывается один раз перед первой обработкой тела, после вызова метода doStartTag() и перед вызовом doAfterBody();
int doAfterBody() – вызывается после каждой обработки тела. Если вернуть в нем константу EVAL_BODY_AGAIN, то doAfterBody() будет вызван еще раз. Если SKIP_BODY, то обработка тела будет завершена;
int doEndTag() – вызывается один раз, когда отработаны все остальные методы.
Для того чтобы тело было обработано, метод doStartTag() должен вернуть EVAL_BODY_INCLUDE или EVAL_BODY_BUFFERED; если будет возвращено SKIP_BODY, то метод doInitBody() не вызывается.
В следующем примере рассматривается класс обработки тега, который получает значения атрибута num (в данном случае методом установки значения для атрибута num будет метод setNum(String num)) и формирует таблицу с указанным количеством строк, куда заносятся значения из тела тега:
// пример # 5 : тег с телом : AttrTag.java
package test.mytag;
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class AttrTag extends BodyTagSupport {
private int num;
public void setNum(String num) {
this.num = new Integer(num);
}
public int doStartTag() throws JspTagException {
try {
pageContext.getOut().write(
"<TABLE BORDER=\"3\" WIDTH=\"100%\">");
pageContext.getOut().write("<TR><TD>");
} catch (IOException e) {
throw
new JspTagException(e.getMessage());
}
return EVAL_BODY_INCLUDE;
}
public int doAfterBody()
throws JspTagException {
if (num-- > 1) {
try {
pageContext.getOut().write("</TD></TR><TR><TD>");
} catch (IOException e) {
throw
new JspTagException(e.getMessage());
}
return EVAL_BODY_AGAIN;
} else {
return SKIP_BODY;
}
}
public int doEndTag() throws JspTagException {
try {
pageContext.getOut().write("</TD></TR>");
pageContext.getOut().write("</TABLE>");
} catch (IOException e) {
throw
new JspTagException(e.getMessage());
}
return SKIP_BODY;
}
}
В файл.tld следует вставить информацию о теге в виде:
<tag>
<name>bodyattr</name>
<tag-class>test.mytag.AttrTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>num</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
При использовании в файле JSP тег bodyattr может вызываться с параметрами и без них:
пример # 6 : тег с телом : demotag3.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-5" pageEncoding="ISO-8859-5"%>
<%@ taglib uri="/WEB-INF/mytaglib.tld" prefix="mytag" %>
<HTML><HEAD>
<TITLE>Example</TITLE>
</HEAD><BODY>
<jsp:useBean id="rw" scope="request" class=
"test.my.MySet"/>
<mytag:bodyattr num="${rw.size}">
${rw.element}
</mytag:bodyattr>
<mytag:bodyattr> Просто текст </mytag:bodyattr>
</BODY></HTML>
В результате запуска этой JSP клиенту будет возвращено:
Рис. 22.1. Выполнение тега с телом
В примерах данной главы были использованы методы класса Rows, который приведен ниже:
/* пример # 7 : примитивный класс бизнес-логики : MySet.java */
package test.my;
public class MySet extends java.util.HashSet {
private java.util.Iterator it;
public MySet() {
//переписать этот класс на чтение информации из БД
this.add("Sun");
this.add("Microsoft");
this.add("IBM");
}
public String getSize() {
it = this.iterator();
return Integer.toString(this.size());
}
public String getElement() {
return it.next().toString();
}
}