- •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
- •Портлеты
Портлеты
Порталы – это следующее поколение приложений, предоставляющих доступ к бизнес-приложениям через Web-интерфейс всем видам клиентов. Порталы предоставляют пользователям сайта единую точку доступа к различным приложениям и ресурсам. Независимо от того, где информация находится и какой тип имеет, портал представляет ее в виде, дружественном для конечного пользователя. Полноценное портал-решение должно обеспечивать пользователей удобным доступом ко всему, что необходимо для успешного выполнения их работы. Портал – web-сервер, который объединяет, настраивает и персонализирует содержимое, чтобы дать представление о корпоративной информационной системе.
Возможности порталов
Портал предоставляет всесторонний подход и доступ к инструментам и сервисам, доступным через Web-интерфейс.
Портлеты – основные блоки, из которых строится портал, в то же время это полноценные приложения, соответствующие шаблону проектирования Model-View-Controller. Каждый портлет разрабатывается, развертывается, управляется и отображается независимо от других портлетов.
У портлетов может быть несколько состояний и видов в соответствии с событийными возможностями. Базируясь на модели контейнера, портлеты выполняются внутри контейнера портлетов. Они могут перенаправить запрос или ошибки браузеру.
Портальный сервер
Портальный сервер обрабатывает запросы клиентов. Как сервер Web-приложений имеетWeb-контейнер для управления выполняющимися компонентами, так и портальный сервер имеет контейнер для управления выполнением портлетов.Portlet API – это расширение над спецификацией для сервлетов, т.е. контейнер портлетов по определению является и Web-контейнером.
Портлет
Портлет – это подключаемый Web-компонент (вполне самостоятельное приложение, средой выполнения которого служит портальный сервер), обеспечивающий динамическое содержимое как часть визуального пользовательского интерфейса. Portlet API наследует возможности Servlet API (где-то расширяя эти возможности, а где-то ограничивая, например, сессия портала не повторяет до конца концепцию сервлетной сессии), и вследствие этого портлеты обладают возможностями сервлетов, а также дополнительными свойствами.
В отличие от сервлетов, портлеты обрабатывают запросы doView(), doConfigure() и doEdit(), приходящие не от браузера, а от портального сервера.
Возможности портлетов:
встроенная поддержка автоматического использования различных JSP-страниц для различных пользовательских устройств, таких как настольные компьютеры, Palm-компьютеры с ограниченными Web-браузерами, PDA и мобильные телефоны;
назначать права пользователям групп на использование портлетов. В случае отсутствия оных они даже не будут видеть портлеты;
создание сохраняемых между сессиями пользовательских настроек;
публикация в виде Web-сервиса;
разделение сложных приложений на задачи, когда группа тесно связанных задач равняется одному портлету;
добавление новых функций к приложению;
хорошая совместимость с брандмауэрами (firewalls), так как они (портлеты) используют стандартные Web-протоколы для получения и отображения информации;
одноразовая установка и настройка портлета для пользователей.
Сходства и различия сервлетов и портлетов
Из-за того, что PortletAPI– это расширениеServletAPI, у них есть некоторые сходства и различия.
Сходства между сервлетами и портлетами:
относятся к J2EEWeb-компонентам;
управляются контейнерами;
генерируют динамическое Web-содержимое при помощи запросов и ответов.
Различия между сервлетами и портлетами:
портлеты генерируют часть документа, в то время как сервлеты генерируют его полностью;
за счёт того, что операции кодирования URL выполняются на стороне сервера, пользователь не может обратиться к нему напрямую, зная имя портлета: портлет ведь часть страницы, поэтому знания одного URL мало;
портлеты имеют несколько иную схему управления запросами, которые делятся на запросы выполнения действий и запросы генерирования содержимого;
портлеты придерживаются стандартного набора состояний, которые определяют их контекст работы и правила генерации содержимого.
Портлеты превосходят сервлеты по следующим направлениям:
имеют расширенный механизм для управления и сохранения своей конфигурационной информации;
есть доступ к информации о пользовательском профиле, не таком тривиальном, как предоставляют сервлеты.
Приложения с использованием портлетов – это расширенные Web-приложения. Таким образом, оба типа приложений развертываются изWAR-файла и содержат дескрипторWeb-приложения (файлweb.xml). Портлет-приложения также содержат и дескриптор портлета (файл portlet.xml).
Жизненный цикл
Как и у сервлетов, жизненный цикл портлетов управляется контейнером, и у него есть метод init(), который используется для инициализации всех данных, необходимых для корректной работы портлета (создание ресурсов, конфигурирование и т.д.).
Метод init() в качестве параметра принимает объект, который реализует интерфейс PortletConfig, и этот объект предоставляет необходимые для инициализации параметры. Он может быть использован для получения ссылки на объект, реализующий интерфейс PortletContext.
Разработчики портлетов, как правило, не тратят много времени на беспокойство о сложности обработки исключений инициализации портал-контейнера из-за того, что при происхождении оного разработчик реагирует на это должным образом (выясняя обстоятельство, при котором оно произошло). Как правило, нет ничего хуже, чем UnavailableException, которое обозначает, что портлет временно или постоянно недоступен. При создании портлета доступа к окружающему коду, например к контейнеру, нет и не может быть, поэтому код внутри портлета не может оценить, насколько портлет доступен извне.
Метод destroy() предоставляет возможность для произведения очистки ресурсов, которые были востребованы и инициализированы методом init(). Этот метод аналогичен методу destroy() в сервлетах и вызывается один раз: когда контейнер выгружает портлет.
Состояния
Состояния портлетов – это часть портальной модели отображения. Состояния позволяют портлету отображать различные «виды» в зависимости от ситуации.
Есть четыре состояния:
View – основное состояние портлета;
Help – если портлет обеспечивает состояние помощи;
Edit – редактирование параметров портлета с сохранением результатов для этого конкретного пользователя;
Configure – конфигурирование портлета с охранением результатов для всех пользователей, права к состояниям никак не относятся.
Портлет может быть минимизирован или максимизирован.
Портлет-контейнер
Портлет-контейнер – среда времени выполнения портлета. Она управляет жизненным циклом портлета и запросами от портала путем вызова портлетов внутри контейнера.
Компиляция и запуск
Установить переменную окружения JAVA_HOME=C:\jdk1.5.0
Добавить в переменную окружения PATHзначение %JAVA_HOME%\bin
Загрузить и установить Apache Ant с http://ant.apache.org/
Распаковать скачанный архив, например, в папку C:\ant
Установить переменную окружения ANT_HOME=C:\ant
Добавить в переменную окружения PATHзначение %ANT_HOME%\bin
Загрузить и установить Jetspeed2 c сервераhttp://portals.apache.org/jetspeed-2/
Распаковать загруженный архив, например, в папку C:\jetspeed2
Прописать в файле build.propertiesпримеров
jetspeed.deploy.dir=C:/jetspeed2/jakarta-tomcat-
5.5.9 /webapps/jetspeed/WEB-INF/deploy
Перезагрузить Windows
Выполнить
C:/jetspeed2/jetspeed-database/start-database.bat
Выполнить
C:/jetspeed2/jakarta-tomcat-5.5.9/bin /startup.bat
Зайти в корневой каталог приложения и выполнить команду “antdeploy”
Ввести в браузер http://localhost:8080/jetspeed
Ввести пароль администратора (по умолчанию логин установлен в “admin”, как и пароль)
Настроить отображаемые портлеты.
Простейший портлет
Для демонстрации возможностей Portlet API ниже рассмотрен пример, отображающий данные, введенные пользователем. На этой основе можно разрабатывать собственные portlet-приложения. Все необходимые для написания примеров классы находятся в пакете javax.portlet.
Вначале создается класс SamplePorltet. Этот класс, собственно, и является основным классом портлета. Все, что здесь происходит – это инициализация портлета в методе init(PortletConfig config), за каждое из представлений портлета отвечают методы doEdit(), doView(), doHelp(). В методе processAction() производится обработка событий портлета (в данном случае этот метод будет вызван при подтверждении пользователем желания отредактировать настройки портлета).
/*пример # 1: простой портлет : SamplePorltet.java*/
package com.learning.portlet;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
public class SamplePortlet extends GenericPortlet {
private static final String EDIT_PAGE_PARAM
= "Edit-Page";
private static final String HELP_PAGE_PARAM
= "Help-Page";
private static final String VIEW_PAGE_PARAM
= "View-Page";
public void init(PortletConfig config)
throws PortletException {
super.init(config); // инициализация
}
// метод, отвечающий за представление страницы редактирования
public void doEdit(RenderRequest request,
RenderResponse response)
throws PortletException,IOException {
PortletContext context = getPortletContext();
// получение контекста портлета
setRequestAttributes(request); // установка атрибутов
// получение диспатчера для включения ресурсов в responce
PortletRequestDispatcher rd = context.
getRequestDispatcher(getInitParameter(EDIT_PAGE_PARAM));
rd.include(request, response); /* включение
содержимого ресурса*/
}
// метод, отвечающий за представление страницы помощи
public void doHelp(RenderRequest request,
RenderResponse response)
throws PortletException, IOException {
PortletContext context = getPortletContext();
// получение контекста портлета
setRequestAttributes(request); // установка атрибута
// получение диспатчера для включения ресурсов в responce
PortletRequestDispatcher rd = context.
getRequestDispatcher(getInitParameter(HELP_PAGE_PARAM));
rd.include(request, response); // включение содержимого ресурса
}
// метод, отвечающий за представление страницы просмотра
public void doView(RenderRequest request,
RenderResponse response)
throws PortletException, IOException {
PortletContext context = getPortletContext();
// получение контекста портлета
setRequestAttributes(request); // устанавливаем атрибуты
// получение диспатчера для включения ресурсов в response
PortletRequestDispatcher rd = context.
getRequestDispatcher(getInitParameter(VIEW_PAGE_PARAM));
rd.include(request, response); // включение содержимого ресурса
}
// вызывается контейнером для обработки событий
public void processAction(ActionRequest request,
ActionResponse response)
throws PortletException, IOException {
PortletMode mode = request.getPortletMode(); /* получение
состояния*/
PortletPreferences preferences =
request.getPreferences(); // настройки
if (mode.equals(PortletMode.VIEW)) {
// сохранение настроек
preferences.setValue("firstName",
request.getParameter("firstName"));
preferences.setValue("lastName",
request.getParameter("lastName"));
preferences.setValue("address",
request.getParameter("address"));
preferences.setValue("telephone",
request.getParameter("telephone"));
preferences.store();
}
}
// для установки атрибутов
private void setRequestAttributes(PortletRequest
request) {
PortletPreferences preferences =
request.getPreferences();
request.setAttribute("firstName",
preferences.getValue("firstName", "undefined"));
request.setAttribute("lastName",
preferences.getValue("lastName", "undefined"));
request.setAttribute("address",
preferences.getValue("address", "undefined"));
request.setAttribute("telephone",
preferences.getValue("telephone", "undefined"));
request.setAttribute("portletName",
getPortletName());
}
}
Ниже приведен файл portlet.xml, который является дескриптором портлета и необходим для его развертывания.
<!--пример # 2:дескриптор портлета : portlet.xml- ->
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
xmlns=
"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/
portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet id="sample-application">
<!-- описание -->
<description>Portlet Application</description>
<!-- название -->
<portlet-name>SamplePortlet</portlet-name>
<!-- отображаемое имя -->
<display-name>Sample Portlet</display-name>
<!-- класс портлета -->
<portlet-class> com.learning.portlet.SamplePortlet</portlet-class>
<!-- параметры инициализации -->
<init-param>
<name>ViewPage</name>
<value>/WEB-INF/jsp/sample-view.jsp</value>
</init-param>
<init-param>
<name>HelpPage</name>
<value>/WEB-INF/jsp/sample-help.jsp</value>
</init-param>
<init-param>
<name>EditPage</name>
<value>/WEB-INF/jsp/sample-edit.jsp</value>
</init-param>
<!-- количество секунд, на которое кешируется портлет. -1 значит cache не истекает -->
<expiration-cache>-1</expiration-cache>
<!-- поддерживаемые режимы -->
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>help</portlet-mode>
<portlet-mode>edit</portlet-mode>
</supports>
<!-- локализация -->
<supported-locale>en</supported-locale>
<!-- текстовые ресурсы -->
<resource-bundle> com.learning.portlet.SamplePortlet</resource-bundle>
<!-- информация -->
<portlet-info>
<!-- заголовок -->
<title>Portlet Application</title>
<short-title>Portlet</short-title>
<!-- ключевые слова -->
<keywords>portlet</keywords>
</portlet-info>
</portlet>
</portlet-app>
Файл web.xml является дескриптором web-приложения, поскольку портлет-приложение является и web-приложением, то понадобится и этот файл.
/* пример # 3: дескриптор приложения: web.xml*/
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Sample</display-name>
</web-app>
Далее приведены JSP-страницы, отвечающие за представления портлета. Единственное, что следует отметить: библиотеку тегов для работы с портлетами, которая необходима для непосредственного доступа к специфическим классам портлетов (классам, используемым портлетом): RenderRequest, RenderResponse, PortletConfig. Также эта библиотека предлагает функциональность по созданию ссылок, пригодных для работы с портлетами.
<!-- пример # 4: представление портлета : sample-edit.jsp - ->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<portlet:defineObjects/>
<portlet:actionURL var="editAction" portletMode="view"/>
<c:set var="inputTextStyle" value="border: none; width: 150px; color: #000000;"/>
<c:set var="inputSubmitStyle" value="border: none; width: 75px;"/>
<c:set var="labelStyle" value="text-align: right; color: #000000; white-space: nowrap;"/>
<fmt:setBundle basename="com.learning.portlet.SamplePortlet"/>
<form action="${editAction}" method="post">
<table style="border: none;">
<tbody>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.firstname"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="firstName" value="${firstName}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.lastname"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="lastName" value="${lastName}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.address"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="address" value="${address}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.telephone"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="telephone" value="${telephone}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td colspan="2" align="right">
<button type="submit" style="${inputSubmitStyle}">
<fmt:message key="portlet.button.submit"/>
</button>
</td>
</tr>
</tbody>
</table>
</form>
<!-- пример # 5:: sample-help.jsp- ->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<portlet:defineObjects/>
<fmt:setBundle basename="com.learning.portlet.SamplePortlet"/>
<table><tbody>
<tr>
<td colspan="2">
<fmt:message key="portlet.name.message">
<fmt:param>${portletName}</fmt:param>
</fmt:message><br>
<fmt:message key="portlet.storeduser.message">
<fmt:param>${firstName}</fmt:param>
<fmt:param>${lastName}</fmt:param>
</fmt:message>
</td></tr>
<tr>
<td align="center">
<portlet:renderURL var="viewUrl" portletMode="view"/>
<a href="${viewUrl}" style="text-decoration: none;">
<fmt:message key="portlet.viewpage.link"/>.
</a>
</td>
<td align="center">
<portlet:renderURL var="editUrl" portletMode="edit"/>
<a href="${editUrl}" style="text-decoration: none;">
<fmt:message key="portlet.editpage.link"/>.
</a>
</td></tr>
</tbody>
</table>
<!-- пример # 6:: sample-view.jsp- ->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<portlet:defineObjects/>
<c:set var="labelStyle" value="text-align: right; color: #000000; white-space: nowrap;"/>
<c:set var="textStyle" value="text-align: left; color: #000000; white-space: nowrap;"/>
<fmt:setBundle basename="com.learning.portlet.SamplePortlet"/>
<table>
<tbody style="background-color: ">
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.firstname"/>:
</td>
<td style="${textStyle}">
${firstName}
</td>
</tr>
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.lastname"/>:
</td>
<td style="${textStyle}">
${lastName}
</td>
</tr>
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.address"/>:
</td>
<td style="${textStyle}">
${address}
</td>
</tr>
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.telephone"/>:
</td>
<td style="${textStyle}">
${telephone}
</td>
</tr>
</tbody>
</table>
# пример # 7: файл свойств для русского языка : SamplePortlet_en.txt
portlet.label.firstname = First name
portlet.label.lastname = Last name
portlet.label.address = Address
portlet.label.telephone = Telephone number
portlet.button.submit = Store
portlet.name.message = This is the simple help page of the portlet <span style="font-weight: bolder">{0}</span>.
portlet.storeduser.message = Stored user is <span style="font-weight: bolder"> {0} {1}</span>.
portlet.viewpage.link = View page
portlet.editpage.link = Edit page
# пример # 8:: файл свойств для английского языка: SamplePortlet_ru.txt
portlet.label.firstname = Имя
portlet.label.lastname = Фамилия
portlet.label.address = Адрес
portlet.label.telephone = Номер телефона
portlet.button.submit = Сохранить
portlet.name.message = Страница помощи портлета <span style="font-weight: bolder">{0}</span>.
portlet.storeduser.message = Сохраненный пользователь <span style="font-weight: bolder"> {0} {1}</span>.
portlet.viewpage.link = Смотреть
portlet.editpage.link = Редактировать
/* пример # 9: файл развертывания : build.xml*/
<?xml version="1.0" encoding="UTF-8"?>
<project name="SamplePortlet" default="war" basedir=".">
<property file="build.properties"/>
<property name="src.dir" value="src"/>
<property name="jsp.dir" value="jsp"/>
<property name="java.dir" value="java"/>
<property name="message.dir" value="message"/>
<property name="config.dir" value="config"/>
<property name="lib.dir" value="lib"/>
<property name="src.lib.dir" value="${src.dir}/${lib.dir}"/>
<property name="src.java.dir" value="${src.dir}/${java.dir}"/>
<property name="src.jsp.dir" value="${src.dir}/${jsp.dir}"/>
<property name="src.message.dir" value="${src.dir}/${message.dir}"/>
<property name="src.config.dir" value="${src.dir}/${config.dir}"/>
<property name="webapp.dir" value="WEB-INF"/>
<property name="result.dir" value="result"/>
<property name="classes.dir" value="classes"/>
<property name="project.name" value="SamplePortlet"/>
<property name="localization.encoding" value="Cp1251"/>
<property name="localization.src.dir" value="${src.message.dir}/com/learning/portlet"/>
<property name="localization.result.dir" value="${result.dir}/${classes.dir}/com/learning/portlet"/>
<property name="localization.ext" value=".properties"/>
<target name="compile" description="Compiles all source files of the portlet.">
<mkdir dir="${result.dir}/${classes.dir}"/>
<javac srcdir="${src.java.dir}" destdir= "${result.dir} /${classes.dir}" optimize="yes" debug="no">
<classpath>
<fileset dir="${src.lib.dir}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
<copy todir="${result.dir}/${classes.dir}">
<fileset dir="${src.message.dir}" excludes="**/*.txt"/>
</copy>
<native2ascii src="${localization.src.dir}" dest=
"${localization.result.dir}" includes="**/*.txt"
encoding="${localization.encoding}" ext="${localization.ext}"/>
</target>
<target name="war" depends="compile" description= "Creates .war file of the portlet.">
<war destfile="${result.dir}/${project.name}.war"
webxml="${src.config.dir}/web.xml" compress="on">
<lib dir="${src.lib.dir}">
<exclude name="**/portlet-api-1.0.jar"/>
</lib>
<classes dir="${result.dir}/${classes.dir}"/>
<zipfileset dir="${src.config.dir}" prefix="${webapp.dir}">
<include name="**/*.*"/>
<exclude name="**/web.xml"/>
</zipfileset>
<zipfileset dir="${src.jsp.dir}" prefix=
"${webapp.dir}/${jsp.dir}"/>
</war>
</target>
<target name="deploy" depends="war" description ="Deploys .war file of the portlet.">
<copy todir="${jetspeed.deploy.dir}">
<fileset file="${result.dir}/${project.name}.war"/>
</copy>
</target>
<target name="clean" description=
"Deletes all result files of the portlet.">
<delete dir="${result.dir}"/>
</target>
</project>
# пример # 10: файл свойств для ant : build.properties
jetspeed.deploy.dir = E:/web/jetspeed-2.0-M3-Tomcat-5.5.9 /jakarta-tomcat-5.5.9/webapps/jetspeed/WEB-INF/deploy