Руководство по разработке веб-приложений в среде IDE NetBeans
Добро пожаловать в руководство по разработке веб-приложений в среде IDE NetBeans 6.0 и 6.1. В рамках этого руководства формируется довольно сложное веб-приложение, попутно предлагается ознакомиться с рядом средств и технологий в среде IDE NetBeans, а также с типичным циклом разработки веб-приложения, от его создания до развертывания. Начиная с создания сервлетов и страниц JSP, в последующих разделах этого руководства показано, как пользоваться библиотекой тегов JavaServer Pages Standard Tag Library (JSTL) для получения динамических данных, и как интернационализировать страницы JSP, используемые в этом приложении. В последней части руководства представлено краткое описание средства контроля HTTP Monitor, предусмотренного в среде IDE, которое позволяет анализировать веб-приложение в процессе его развертывания.
Примечание: При отсутствии опыта работы в среде IDE NetBeans перед тем, как продолжить обучение, рекомендуется изучить руководство Введение в разработку веб-приложений.
Сервер приложений GlassFish
или Контейнер сервлетов Tomcat
V2
версия 6.x
Примечания:
* Для получения преимуществ благодаря функциональности Java EE 5 в среде IDE NetBeans используйте сервер приложений, который является полностью совместимым со спецификацией Java EE 5, например, сервер приложений GlassFish V2 UR2. В случае использования другого сервера см. заметки о выпуске и часто задаваемые вопросы для получения информации об известных проблемах и обходных решениях. Для получения подробной информации о поддерживаемых серверах и платформе Java EE см. заметки о выпуске.
Дополнительно, в целях поиска и устранения ошибок, можно загрузить готовые примеры и изучить исходный код.
Терминология
Ниже приведены пояснения некоторых терминов, используемых в этом руководстве.
Составное представление. Модель, используемая для представления информации на страницах JSP. Эта модуль формирует единое представление на основе представлений элементов. Представления элементов должны включать динамические и модульные части страницы. При создании представления на основе многочисленных подчиненных представлений модель составного представления относится к проекту веб-приложения. Объединенные веб-страницы зачастую состоят из содержимого, поступающего из различных источников. Управление структурой страниц осуществляется независимо от содержимого его подчиненных представлений. Например, представление может иметь несколько подчиненных представлений, таких как "Navigation", "Search", "Feature Story" и "Headline".
При создании составного представления можно добавить в него статическое и динамическое содержимое. Статическое содержимое может состоять из файла HTML. Динамическое содержимое представляет собой фрагмент страницы JSP. Определенное содержимое может быть казано во время преобразования JSP или в ходе выполнения.
Фронтальные контроллеры. Элементы, отвечающие за маршрутизацию входящих запросов и осуществление переходов в веб-приложениях. Для получения дополнительных сведений об использовании модели фронтальных контроллеров см. каталог моделей J2EE.
Страницы JSP. Файлы, используемые в веб-приложениях для представления информации конечным пользователям и обеспечения возможности передачи данных от конечных пользователей обратно на сервер. Для исполнения страниц JSP в среде IDE они должны быть размещены внутри веб-приложения.
Сервлеты. Классы Java, выполняемые в контейнере сервлетов, который обычно размещается на веб-сервере. Сервлеты используются для выполнения следующих операций:
создание динамического содержимого;
расширение возможностей веб-серверов и серверов приложений, реализованных на основе веб-технологий;
обеспечение взаимодействия с веб-клиентами (как правило, приложениями обозревателя, например, Netscape или Internet Explorer) с использованием парадигмы "запрос-ответ".
Получение требуемых исходных файлов
Для создания приложения "Midnight Cookie Company" требуется файл midnight.zip, содержащий исходные файлы, на основе которых будет создано приложение. Исходные файлы содержат папку WEB-INF с папками classes, docs, tlds и lib, которые будут использованы в этом руководстве.
В файловой системе создайте папку с именем midnight. В нее будут распаковываться файлы приложения. С того момента она будет называться $UNZIPHOME.
Воспользуйтесь архиватором для распаковывания файла midnight.zip в папку $UNZIPHOME.
Теперь в папке $UNZIPHOME содержится папка WEB-INF со следующими файлами и папками:
Файл или папка
Описание
web.xml
Дескриптор развертывания для веб-приложения.
classes
Содержит файлы свойств набора ресурсов, которые используются для интернационализации страниц, а также папку com/midnightcookies/taghandlers. Папка taghandlers содержит файлы классов для обработчика тега "ContentHandler", обработчика тега "ButtonHandler" и обработчика тега "LinksHandler". В состав обработчика "ContentHandler" входит содержимое указанного файла JSP. Обработчик "ButtonHandler" выводит кнопку "Submit" с локализованным сообщением. Обработчик "LinksHandler" выводит на экран набор ссылок, включая разделитель, из атрибута тега.
docs
Содержит файл header.jsp, файл index.jsp и файл nonesuch.jsp. В ходе изучения руководства будет создана страница main.jsp, размещаемая в этой папке. Также содержит папку cookies с файлами CookieCutter.jsp и CookieMake.jsp. В ходе изучения руководства будет создана страница Tray.jsp, размещаемая в этой папке. Папка about содержит файл about.jsp, описывающий архитектуру этого веб-приложения.
lib
Содержит файл standard.jar и файл jstl.jar. Эти два файла содержат реализацию для JSTL. Архив standard.jar содержит определения TLD и обработчики тегов. Файл jstl.jar содержит другие необходимые интерфейсы API.
tlds
Содержит фирменный файл midnight.tld.
Разработка приложения
Создание веб-проекта из предоставляемых исходных файлов
Выберите "File > New Project" (Ctrl-Shift-N). В области "Categories" выберите "Web". В области "Projects" выберите "Web Project with Existing Sources". Нажмите кнопку "Next".
В области "Location" нажмите кнопку "Browse" и выберите корневой узел документа веб-приложения. Корневой узел документа – это папка $UNZIPHOME, которая, если были выполнены приведенные выше указания, имеет имя midnight. Это папка, в которую был разархивирован файл midnight.zip.
Обратите внимание, что в поле "Project Name" указано имя midnight. Поскольку имя проекта обычно начинается с прописной буквы, введите "Midnight" с прописной буквы. В поле "Project Location" укажите любую папку на компьютере. Далее эта папка будет называться $PROJECTHOME.
Примечание: При создании проекта в NetBeans 6.1 доступны новые параметры, для которых можно оставить значения по умолчанию. Например, флажок "Use Dedicated Folder for Storing Libraries" может быть оставлен неустановленным.
При использовании среды IDE NetBeans 6.1 нажмите кнопку "Next"; в противном случае перейдите к действию 5.
Выберите сервер, на котором требуется выполнить развертывание приложения. В списке представлены только те серверы, которые зарегистрированы в среде IDE.
Для версии Java EE убедитесь, что выбрана Java EE 5. Обратите внимание на то, что "Context Path" имеет значение /Midnight. Нажмите кнопку "Next".
В поле "Web Pages Folder" выберите корневой узел документа ($UNZIPHOME). Обратите внимание, что папки $PROJECTHOME/Midnight/WEB-INF/lib и $PROJECTHOME/Midnight/WEB-INF/classes автоматически выбираются как папки библиотек и папки исходных файлов соответственно, как показано ниже: Нажмите кнопку "Finish".
Появится запрос IDE на разрешение удалить учебные файлы, поскольку при сборке проекта они будут автоматически скомпилированы в папке проекта build.
Нажмите кнопку "Delete", после чего это действие будет выполнено средой IDE.
Средой IDE осуществляется импорт исходных файлов, удаление файлов классов и создание проекта "Midnight".
Логическую структуру этого проекта можно просмотреть в окне "Projects", а структуру файлов – в окне "Files".
Создание фронтального контроллера с помощью сервлета
Фронтальный контроллер отвечает за маршрутизацию поступающих запросов пользователя, и с его помощью могут осуществляться переходы в веб-приложениях. Фронтальный контроллер предоставляет единую точку входа, через которую проходят запросы для нескольких ресурсов веб-приложения. Фронтальный контроллер снижает дублирование кодов на страницах JSP, особенно в случаях, когда несколько ресурсов требуют одинаковой обработки. Для получения дополнительных сведений о фронтальных контроллерах см. каталог моделей J2EE.
Разверните узел проекта "Midnight" и узел "Source Packages".
Щелкните правой кнопкой мыши узел пакета com.midnightcookies и выберите "New > Servlet".
Введите FrontController в текстовом поле "Class Name" и убедитесь, что в раскрывающемся списке "Package" выбран пакет com.midnightcookies. Нажмите кнопку "Next".
Измените значение в поле "URL Pattern(s)" на следующее:
/docs/*, /
Обратите внимание, что "," в приведенной выше строке является разделителем между отображениями URL-адреса. Это позволяет создавать по несколько отображений URL-адреса для каждого сервлета.
Нажмите кнопку "Finish".
В редакторе исходного кода откроется FrontController.java.
Разверните узлы "Web Pages" и "WEB-INF". Дважды щелкните узел web.xml. Содержимое файла-дескриптора развертывания, web.xml, отображается в графическом редакторе. Щелкните "Servlets" в верхней части редактора. Разверните узел для отображения сервлета "FrontController". Обратите внимание на модели URL-адресов сервлета, определенные ранее в действии 4:
Отображение сервлета "/docs/*" предотвращает передачу сервлетом FrontController страниц самому себе, в то время как отображение "/" дает сервлету FrontController отображение для обработки таких запросов, как http://имя_узла:номер_порта/midnight/.
Щелкните "XML" в верхней части редактора. Содержимое файла-дескриптора развертывания отображается в формате XML. Отображения сервлетов будут выглядеть следующим образом:
Добавление методов для обработки запросов и создания cookie
Теперь изменим файл FrontController.java для добавления в него логики, необходимой для обработки запросов, получаемых веб-приложением. Требуется изменить метод processRequest и создать новый метод под названием createCookie, иллюстрирующий процесс создания cookie, используемого в веб-приложении.
Откройте окно "Navigator" (Ctrl-7) и выберите узел "FrontController.java" в окне "Projects". Теперь в окне "Navigator" отображаются методы класса:
Дважды щелкните узел метода "processRequest" в окне "Navigator". В редакторе исходного кода появится метод processRequest.
Замените метод processRequest по умолчанию на следующий код:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getRequestURI();
id = id.substring(request.getContextPath().length());
getServletContext().log
("Midnight Cookies FrontController received a request for " + id);
// Переменная страницы содержит путь к странице, которая будет добавлена в область содержимого шаблона страницы /WEB-INF/docs/main.jsp.
// Она передается в шаблон в составе атрибута запроса.
String page;
// Если запрос не получен или полученный запрос предназначен для пользователя root, должна использоваться /WEB-INF/docs/index.jsp.
if (id == null || id.trim().equals("") || id.equals("/")){
page = "/WEB-INF/docs/index.jsp";
}
// Если полученный запрос предназначен для файла, который не оканчивается на .jsp или .html, выдается ошибка. Include the
// Страница ошибки (nonesuch.jsp), определение атрибута "nonesuch" с путем из запроса.
else if (!id.endsWith(".jsp") && !id.endsWith(".html")) {
page = "/WEB-INF/docs/nonesuch.jsp";
request.setAttribute("nonesuch", id);
}
else {
page = "/WEB-INF".concat(id);
if (id.equals("/docs/cookies/CookieMake.jsp")) {
Cookie cookie = createCookie(request);
if (cookie == null) {
page = "/WEB-INF/docs/cookies/CookieCutter.jsp";
}
else {
response.addCookie(cookie);
request.setAttribute("cookie", cookie);
}
}
}
request.setAttribute("page", page);
try {
request.getRequestDispatcher("/WEB-INF/docs/main.jsp").forward(request, response);
}
catch(Throwable t) {
getServletContext().log(t.getMessage());
}
}
Примечание: После ввода кода (с клавиатуры или путем копирования и вставки) в редакторе исходного кода установите курсор в редакторе исходного кода и нажмите комбинацию клавиш Alt-Shift-F для автоматического форматирования кода. Для отображения номеров строк щелкните правой кнопкой мыши отступ слева и выберите параметр "Show Line Numbers" в контекстном меню.
Строка с вызовом метода createCookie будет подчеркнута и выделена как ошибочная, как показано на следующем рисунке. Это вызвано тем, что метод еще не существует.
Нажмите комбинацию клавиш Alt-Enter с курсором на строке, содержащей ошибку, и обратите внимание, что на экране появляется предложение с информацией о том, как можно устранить ошибку:
Подтвердите предлагаемый вариант. Средой IDE создается скелетный метод createCookie в конце файла.
Заполните новый метод createCookie, скопировав следующий код и вставив его в редактор исходного кода:
Звездочка на вкладке файла в верхней области редактора исходного кода всегда появляется при наличии изменений, которые не были сохранены на диск:
Для сохранения документа нажмите комбинацию клавиш Ctrl-S. Звездочка на вкладке файла в верхней области редактора исходного кода исчезнет.
В окне "Projects" щелкните правой кнопкой мыши узел "FrontController.java" и выберите "Compile File" (F9) для проверки на отсутствие ошибок в выполненных ранее действиях. В окне "Output" появятся сообщения компилятора, отражающие все возникшие ошибки. Для определения места возникновения ошибки дважды щелкните ссылки в сообщениях об ошибках. Перед дальнейшим изучением руководства исправьте все ошибки, перечисленные в окне "Output".
Создание страницы JSP для получения всех запросов
Страница main.jsp получает все запросы, обрабатываемые сервлетом "FrontController". Для создания страницы используются оператор динамического добавления и обработчик "LinksHandler".
Разверните узел проекта "Midnight" и узел "WEB-INF". Щелкните правой кнопкой мыши узел "Docs", выберите "New > JSP" и присвойте файлу "JavaServer Pages" имя main. Нажмите кнопку "Finish".
В редакторе исходного кода откроется main.jsp.
В редакторе исходного кода замените содержимое файла main.jsp следующим кодом:
Примечание: После ввода кода (с клавиатуры или путем копирования и вставки) в редакторе исходного кода установите курсор в редакторе исходного кода и нажмите комбинацию клавиш Alt-Shift-F для автоматического форматирования кода.
Для сохранения изменений нажмите комбинацию клавиш Ctrl-S.
Создание файлов параметров для обработки вводимых пользователем данных
Создаваемые в этом разделе файлы параметра иллюстрируют использование тегов из библиотек тегов для поддержки интернационализации. Они также показывают, как вводимые данные передаются через параметры запроса, особенно через выражение на языке выражений (EL) JSP ${param.input}, которое установлено в поле ввода страницы Input.jsp.
Щелкните правой кнопкой мыши узел "Docs" и из контекстного меню выберите "New > Other". В области "Categories" выберите "Other", а в поле "File Types" выберите "Folder". Нажмите кнопку "Next".
На экране "Name and Location" введите parameters в текстовом поле "Folder Name" и нажмите кнопку "Finish". Новая папка параметров появляется в окне "Projects" в узле "Docs".
Щелкните правой кнопкой мыши узел параметров и выберите "New > JSP". Введите Input в текстовом поле "JSP File Name" и убедитесь, что в текстовом поле "Folder" выбрана папка WEB-INF/docs/parameters. Нажмите кнопку "Finish". В редакторе исходного кода откроется Input.jsp.
В редакторе исходного кода замените содержимое файла Input.jsp следующим кодом:
<%@page contentType="text/html;charset=UTF-8"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@taglib prefix="midnight" uri="/WEB-INF/tlds/midnight.tld"%>
<fmt:setBundle basename="com.midnightcookies.Midnight" var="bundle"
scope="page"/>
<h3><fmt:message key="provide_input" bundle="${bundle}"/></h3>
<form method="POST" action="Output.jsp">
<table>
<tr>
<td><fmt:message key="type_input" bundle="${bundle}"/>:</td>
<%-- Значение поля ввода будет помещено в параметр запроса с названием "input", и он будет передан в "Output.jsp". --%>
<td><input type="text" size="20" name="input" value=""></td>
</tr>
<tr>
<td><fmt:message key="submit" bundle="${bundle}"
var="buttonLabel" scope="page"/>
<midnight:button/>
</td>
<td></td>
</tr>
</table>
</form>
Для сохранения изменений нажмите комбинацию клавиш Ctrl-S.
Создайте файл Output.jsp в папке "Parameters" с помощью того же самого метода, который использовался для создания файла Input.jsp.
В редакторе исходного кода замените содержимое файла Output.jsp следующим кодом:
<%@page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<fmt:setBundle basename="com.midnightcookies.Midnight" var="bundle" scope="page"/>
<h3><fmt:message key="display_input" bundle="${bundle}"/></h3>
<fmt:message key="datareceived" bundle="${bundle}"/>:
<!--Следующая строка получает значение параметра запроса с названием "input". Это демонстрационное приложение. Из соображений безопасности рекомендуется не выводить вводимую пользователем информацию без предварительного анализа. -->
<c:out value="${param.input}"/>
Для сохранения изменений нажмите комбинацию клавиш Ctrl-S.
Использование JSTL для обработки интернационализации
Страница Tray.jsp, созданная в этом разделе, иллюстрирует процесс использования JSTL вместо создания сценария для интернационализации страницы. Файл CookieCutter.jsp, файл CookieMaker.jsp и файлы свойств набора ресурсов были добавлены в файле midnight.zip. Эти файлы, а также файл Tray.jsp, можно рассмотреть подробнее для изучения примеров обработки интернационализации, представленных в этом приложении.
Разверните узел "docs" и затем узел "cookies".
Создайте файл Tray.jsp в папке cookies с помощью того же метода, который использовался для создания других файлов JSP. Убедитесь в том, что он помещен в папку cookies.
В редакторе исходного кода замените содержимое файла Tray.jsp следующим кодом:
<%@page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<fmt:setBundle basename="com.midnightcookies.Midnight" var="bundle" scope="page"/>
<h3><fmt:message key="cookies" bundle="${bundle}"/></h3>
<table border="1">
<tr>
<th halign="center">#</th>
<th align="left">
<fmt:message key="name" bundle="${bundle}"/>
</th>
<th align="left">
<fmt:message key="value" bundle="${bundle}"/>
</th>
<tr>
<%-- Для получения массива необходимо использовать выражение.
При использовании ${cookie} будет сформировано отображение, автоматические приведение значений осуществляться не будет. --%>
<% request.setAttribute("cookies", request.getCookies()); %>
<c:set var="i" value="0"/>
<c:forEach var="ck" items="${cookies}">
<c:set var="i" value="${i+1}"/>
<tr>
<td><c:out value="${i}"/></td>
<td><c:out value="${ck.name}"/></td>
<td><c:out value="${ck.value}"/></td>
</tr>
</c:forEach>
</table>
Для сохранения изменений нажмите комбинацию клавиш Ctrl-S.
Заключительная подготовка
После завершения стадии разработки, описанной выше, внешний вид окна "Projects" и окна "Files" должен быть следующим:
Примечание: Приложение, иллюстрированное выше, развертывается на веб-сервере Tomcat. Если вместо него был зарегистрирован и выбран другой целевой сервер, файл META-INF/context.xml будет отсутствовать. Например, при использовании сервера GlassFish дескриптором развертывания будет являться файл WEB-INF/sun-web.xml.
Выполнение и контроль приложения
Включение средства контроля HTTP Monitor
В веб-сервере Tomcat средство контроля HTTP Monitor по умолчанию включено. Однако для других серверов необходимо активировать HTTP Monitor вручную. Кроме того, для работы HTTP Monitor на других серверах необходимо запустить сервер HTTP.
Для подготовки к использованию HTTP Monitor выполните следующие действия:
В главном окне выберите "Tools > Servers".
Выберите сервер.
Щелкните "Enable HTTP Monitor", а затем нажмите кнопку "Close".
В окне "Runtime" щелкните правой кнопкой мыши узел "HTTP Server" и выберите "Start HTTP Server".
Проверка пути контекста
Щелкните правой кнопкой мыши узел проекта "Midnight" и выберите "Properties".
В диалоговом окне "Project Properties" выберите "Run".
Убедитесь в том, что в поле "Context Path" установлено значение /Midnight.
Убедитесь в том, что в поле "Relative URL" установлено значение docs/index.jsp
Выполнение приложения
В окне "Projects" щелкните правой кнопкой мыши узел проекта "Midnight" и выберите пункт "Run" в контекстном меню.
На экране появится окно контроля процесса подготовки и развертывания приложения на веб-сервере.
Веб-обозреватель запускается с установленным значением URL-адреса http://имя_узла:порт/Midnight. В следующем примере представлен веб-обозреватель, запущенный на платформе Microsoft Windows.
Обратите внимание на то, что в среде IDE отображается HTTP Monitor.
В следующих разделах иллюстрируются возможности использования HTTP Monitor для контроля запросов, сеансов и cookie.
Контроль запросов и сеансов
В HTTP Monitor выберите последнюю запись под узлом "Current Records".
Последняя запись представляет собой запрос к веб-приложению "Midnight".
Перейдите на вкладку "Request", на которой выводится следующая информация.
Выберите вкладку "Session", на которой выводится следующая информация.
В веб-обозревателе щелкните ссылку "Parameters" для отображения страницы Input.jsp. Веб-обозреватель должен отображать следующую информацию.
В текстовом поле "Type Input" введите hello и нажмите кнопку "Submit data".
В веб-обозревателе должно отображаться содержимое страницы Output.jsp, аналогичное приведенному ниже.
В HTTP Monitor выберите последнюю запись под узлом "Current Records" и перейдите на вкладку "Request".
В HTTP Monitor должна отображаться следующая информация.
Контроль cookie
В веб-обозревателе щелкните ссылку "Cookies".
В веб-обозревателе откроется страница CookieCutter.jsp.
В текстовом поле "Name" введите cookie, and в текстовом поле "Value" введите chocolate.
Нажмите кнопку "Make me a cookie now!".
Веб-обозреватель должен отображать следующую информацию.
В HTTP Monitor выберите последнюю запись под узлом "Current Records".
На вкладке "Cookies" в HTTP Monitor отображается следующая информация.
В веб-обозревателе щелкните мышью в трее "Cookie", после чего в обозревателе отобразится следующая информация.
В HTTP Monitor выберите последнюю запись под узлом "Current Records" и перейдите на вкладку "Cookies".
В HTTP Monitor должна отображаться следующая информация.
Перейдите на вкладку "Request". В HTTP Monitor будет отображена следующая информация.
В HTTP Monitor щелкните правой кнопкой мыши ту же самую запись (GET Tray.jsp) под узлом "Current Records" и выберите пункт "Replay" в контекстном меню. В диалоговом окне "Edit and Replay" перейдите на вкладку "Cookies" и нажмите кнопку "Add Cookie". Установите имя "Ingredient" и значение "Sugar". Нажмите кнопку "Send HTTP Request". В обозревателе появится страница с новым cookie.
Контроль запросов несуществующих страниц
В веб-обозревателе введите URL-адрес несуществующей страницы для просмотра используемой страницы nonesuch.jsp. Например, можно ввести URL-адрес http://localhost:8084/Midnight/docs/Bake.jsp, после чего в веб-обозреватель должна отображаться страница, подобная следующей:
В HTTP Monitor перейдите на вкладку "Request", содержащую следующую информацию.
Обратите внимание на то, что вместо несуществующей страницы Bake.jsp отображается содержимое страницы nonesuch.jsp.
Включение интернационализации
Измените предпочтительный язык, используемый в веб-обозревателе, на французский или шведский для просмотра результата выполнения функции интернационализации в данном веб-приложении "Midnight Cookie Company".
Обратите внимание на то, что может потребоваться добавление этих двух языков в список языков, доступных в веб-обозревателе в настоящее время.
Перезагрузите или обновите страницы, просмотренные на предыдущих этапах.
Обратите внимание на то, что ссылки в левой части панели переходов, ссылки в нижней части страницы и содержимое некоторых страниц JSP приложения были переведены на выбранный язык.
Веб-приложение использует файлы свойств набора ресурсов для упрощения процесса перевода некоторых страниц, используемых в этом веб-приложении. Так, перевод имеет такой же объем, что и содержимое файлов свойств набора ресурсов.
Закрепление материала на практике
Добавление ссылки "Exit", направляющей пользователя на страницу с фразой "До свидания" на соответствующем языке
Щелкните правой кнопкой мыши файл com/midnightcookies/Midnight.properties и выберите пункт "Open" в контекстном меню. Добавьте следующие ключевые слова и значения.
Ключевое слово
Значение по умолчанию
Французский язык
Шведский язык
exit
Exit
Sortie
Utgang
closingRemark
Goodbye
Au revoir
Hej da
Используйте å для отображения символа а.
Добавьте файл содержимого Exit.jsp. Используйте тег сообщения из библиотеки тегов "fmt" при отображении сообщения для ключевого слова "closingRemark" (подсказка: см. файл "Output.jsp"). Не забывайте добавить директиву "taglib" для библиотеки тегов "fmt".
Откройте файл "com/midnightcookies/taghandlers/LinksHandler.java" в редакторе исходного кода и добавьте ссылку на файл "Exit.jsp". Используйте ключевое слово "exit" для получения текста ссылки из набора свойств. Скомпилируйте класс.
Выполните веб-приложение.
Дальнейшее изучение
Ниже приведены некоторые другие возможности веб-приложений, которые могут представлять интерес для дальнейшего изучения.
Изучение библиотеки тегов "Midnight"
Разверните узел tlds/Midnight для просмотра списка тегов в библиотеке. Просмотрите тег "Links" в редакторе исходного кода и изучите его атрибуты; обратите внимание на использование атрибута разделителя.
Отладка веб-приложений
Откройте файл "docs/main.jsp" в редакторе исходного кода и установите точку останова, щелкнув в поле в рядом со строкой 32 (строка, вызывающая элемент "midnight:content"). Щелкните правой кнопкой мыши узел проекта в окне "Projects" или "Files" и выберите "Debug Project" из контекстного меню. Веб-приложение завершит работу в установленной точке останова. Нажмите F7 для перехода к соответствующему месту в коде. При каждом появлении диалогового окна, вызванном отсутствием источника, нажимайте кнопку "OK" для выбора настройки по умолчанию, т.е. остановке в первой строке с источником. Продолжайте нажимать клавишу F7 до достижения функции otherDoStartTagOperations() в классе ContentHandler. Установите точку останова на строке 50 (request.getRequestDispatcher(page).include(request, response)) и нажмите комбинацию клавиш Ctrl-F5 (для продолжения). Установите курсор на параметры "page", "request" и "response" для просмотра их значений. Значения также можно просмотреть на вкладке "Local Variables". Обратите внимание на то, что на вкладке "Call Stack" отображается взаимосвязь между кодом JSP и созданными методами сервлетов. Попробуйте установить другие точки останова. Щелкните правой кнопкой мыши переменную и выберите "New Watch" в контекстном меню. Щелкните вкладку "Watches" для просмотра изменений значений по мере создания различных страниц в веб-приложении. Для выхода из сеанса отладки выберите "Debug > Finish Session".
Тестирование файлов JSP
Для выполнения общедоступного файла JSP (файла, который не хранится в папке WEB-INF) просто щелкните правой кнопкой мыши узел файла и выберите "Execute" в контекстном меню. Если страница загружена, при нажатии кнопки перезагрузки обозревателя будут отображены все внесенные изменения. Несколько сложнее обеспечить выполнение закрытых файлов JSP, подобных файлам, приведенным в этом руководстве. Один из способов проверки измененных закрытых файлов JSP без необходимости перезапуска веб-приложения и перехода к этой странице состоит в использовании действия "Replay" в HTTP Monitor. Измените файл "docs/cookies/Tray.jsp", установив значение 10 для границы таблицы и сохраните изменения. В HTTP Monitor щелкните правой кнопкой мыши запись "GET Tray.jsp" и выберите "Replay" в контекстном меню. Страница "Tray.jsp" должна появиться в обозревателе с большей границей таблицы.
Глоссарий
Ниже приведены пояснения некоторых терминов, используемых в этом руководстве.
Составное представление
Модель, используемая для представления информации на страницах JSP. Эта модуль формирует единое представление на основе представлений элементов. Представления элементов должны включать динамические и модульные части страницы. При создании представления на основе многочисленных подчиненных представлений модель составного представления относится к проекту веб-приложения. Объединенные веб-страницы зачастую состоят из содержимого, поступающего из различных источников. Управление структурой страниц осуществляется независимо от содержимого его подчиненных представлений. Например, представление может иметь несколько подчиненных представлений, таких как "Navigation", "Search", "Feature Story" и "Headline".
При создании составного представления можно добавить в него статическое и динамическое содержимое. Статическое содержимое может состоять из файла HTML. Динамическое содержимое представляет собой фрагмент страницы JSP. Определенное содержимое может быть казано во время преобразования JSP или в ходе выполнения.
Фронтальный контроллер
Фронтальные контроллеры отвечают за маршрутизацию входящих запросов и осуществление переходов в веб-приложениях. Для получения дополнительных сведений об использовании модели фронтальных контроллеров см. каталог моделей J2EE.
Страница JSP
Страницы, используемые в веб-приложениях для представления информации конечным пользователям и обеспечения возможности передачи данных от конечных пользователей обратно на сервер. Для исполнения страниц JSP в среде IDE они должны быть размещены внутри веб-приложения.
Сервлет
Сервлеты – это классы Java, выполняемые в контейнере сервлетов, который обычно размещается на веб-сервере. Сервлеты используются для выполнения следующих операций:
создание динамического содержимого;
расширение возможностей веб-серверов и серверов приложений, реализованных на основе веб-технологий;
обеспечение взаимодействия с веб-клиентами (как правило, приложениями обозревателя, например, Firefox или Internet Explorer) с использованием парадигмы "запрос-ответ".
Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для J2EE с помощью среды IDE NetBeans можно в списке рассылки