Реферат Технология JavaServer Faces
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
ЙА КУРСАВИГ
Содержание
Введение. 3
1. Технология JavaServer Faces. 4
2. Понятие Managed Bean и конфигурация JSF-проекта. 7
3. Демонстрационная задача и реализация. 9
4. Исходный код. 13
4.1. web.xml 13
4.2. faces-config.xml 13
4.3. MyTest.java. 14
4.4. index.jsp. 16
4.5. test.jsp. 16
4.6. result.jsp. 17
Заключение. 18
Список использованных источников. 19
Введение
В настоящее время развитие web-технологий крайне интенсивно. Десять лет назад в процессе разработки интернет-приложений программистам приходилось буквально вручную формировать HTML-поток с помощью CGI, но уже через несколько лет были созданы более удобные средства (такие, как JSP, ASP, PHP), которые позволили разделить дизайн страниц и бизнес-логику. Однако и эти средства не так легки (например, смесь программного кода и HTML-разметки в PHP-приложениях).
В связи с выше описанным возникла необходимость создания технологии разработки web-приложений с приминением объектно-ориентированной парадигмы. Корпорация Microsoft создала технолгию ASP.NET, а Sun Microsystems — бесплатную альтернативную технологию под названием JavaServer Faces.
Целью настоящей работы является изучение базового уровня JSF и построение простого демонстрационного web-приложения.
1. Технология JavaServer Faces
JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам динамически генерировать HTML, XML и другие веб-страницы. Является составной частью единой технологии создания бизнес-приложений J2EE[1]. Технология позволяет внедрять Java-код, а также EL (expression language) в статичное содержимое страницы. Также могут использоваться библиотеки JSP тегов для внедрения их в JSP-cтраницы. Страницы компилируются JSP-компилятором в сервлеты, представляющие собой Java-классы, которые выполняются на сервере. Сервлеты также могут быть написаны разработчиком, не используя JSP-страницы. Эти технологии могут дополнять друг друга.
JSP — одна из высокопроизводительных технологий, так как весь код страницы транслируется в java-код сервлета с помощью компилятора JSP страниц Jasper, и затем компилируется в байт-код виртуальной машины java (JVM). Сервлет-контейнеры (Tomcat), способные исполнять JSP страницы, написаны на платформонезависимом языке Java, который может работать под различными операционными системами и платформами. Сервлет-контейнеры могут работать как полноценные самостоятельные веб-серверы, работать поставщиком страниц для другого веб-сервера или интегрироваться в J2EE сервер приложений. Web-контейнер обеспечивает обмен данными между сервлетом и клиентами, берет на себя выполнение таких функций, как создание программной среды для функционирующего сервлета, идентификацию и авторизацию клиентов, организацию сессии для каждого из них.
JavaServer Faces (JSF) — это MVC[2] фреймворк для веб-приложений, основанный на JSP и написанный на Java. Он служит для того, чтобы облегчать разработку пользовательских интерфейсов для Java EE приложений.
Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента (рис. 1):
1. Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние.
2. Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
3. Поведение (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Рисунок 1. Схема «модель-представление-поведение»
В отличие от прочих MVC фреймворков, которые управляются запросами, подход JSF основывается на использовании компонент. Состояние компонентов пользовательского интерфейса сохраняется, когда пользователь запрашивает новую страницу и затем восстанавливается, если запрос повторяется.
Технология JavaServer Faces включает:
· набор API для представления компонент пользовательского интерфейса (UI) и управления их состоянием, обработкой событий и валидацией вводимой информации, определения навигации, а также поддержку интернационализации (i18n) и доступности (accessibility);
· специальную библиотеку JSP тегов для выражения интерфейса JSF на JSP странице.
Разработанная быть гибкой, технология JavaServer Faces усиливает существующие, стандартные концепции пользовательского интерфейса (UI) и концепции Web-уровня без привязки разработчика к конкретному языку разметки, протоколу или клиентскому устройству. Классы компонент пользовательского интерфейса, поставляемые вместе с технологией JavaServer Faces, содержат функциональность компонент, а не специфичное для клиента отображение, открывая тем самым возможность рендеринга JSF-компонент на различных клиентских устройствах. Совмещая функциональность компонент интерфейса пользователя со специальными рендерерами, разработчики могут конструировать специальные теги для заданного клиентского устройства. В качестве удобства технология JSF предоставляет специфичный рендерер и специальную библиотеку JSP-тегов для рендеринга на HTML-клиенте, позволяя разработчикам приложений на J2EE платформе использовать технологию JSF в своих приложениях.
2. Понятие Managed Bean и конфигурация JSF-проекта
JavaBeans — классы в языке Java, написанные по определённым правилам. Они используются для объединения нескольких объектов в один (bean) для удобной передачи данных.
Спецификация Sun Microsystems определяет JavaBeans, как «универсальные программные компоненты, которые могут управляться с помощью графического интерфейса». JavaBeans обеспечивают основу для многократно используемых, встраиваемых и модульных компонентов ПО. Компоненты JavaBeans могут принимать различные формы, но наиболее широко они применяются в элементах графического пользовательского интерфейса. Одна из целей создания JavaBeans — взаимодействие с похожими компонентными структурами.
Managed Bean — это особый вид JavaBean, созданный с использованием Dependency Injection, который представляет некоторый запущенный ресурс в виртуальной java-машине (например, исполнимое приложение или какой-либо сервис).
В парадигме JSF managed beans можно использовать для представления состояния web-приложения, для хранения информации о текущем пользователе, для взаимодействия с бизнес-логикой (в т.ч. работа с БД) и т.д.
Для конфигурации JSF-приложения используются два XML-файла: web.xml и faces-config.xml.
· web.xml — стандартный конфигурационный файл для web-приложений, созданных с помощью J2EE.
· faces-config.xml — ключевой конфигурационный файл для JSF, в котором настраиваются следующие высокоуровневые элементы дефиниций:
· application (определение классов с циклом жизни приложения);
· component;
· converter;
· factory (определения классов-фабрик);
· lifecycle (определения цикла жизни по умолчанию);
· managed-bean (определение классов managed beans);
· navigation-rule (определение правил навигации в приложении);
· referenced-bean;
· render-kit;
· validator (определение «валидаторов», осуществляющих контроль правильности вводимых данных).
Пример faces-config.xml:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>test</managed-bean-name>
<managed-bean-class>testpack.MyTest</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<navigation-case>
<from-outcome>result</from-outcome>
<to-view-id>/result.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
В данном примере определён managed bean, соответствующий классу MyTest пакета testpack, с жизненным циклом, равным одной сессии, а также правило навигации, согласно которому при исходе «result» пользователь будет автоматически перенаправлен к представлению, соответствующему адресу: /result.jsp.
Обращение к полям класса MyTest из jsp-страниц происходит, как можно видеть из их исходного кода, с помощью конструкций вида #{test.ИмяПоля}.
3. Демонстрационная задача и реализация
Необходимо разработать web-приложение, позволяющее проводить тестирование пользователей с последующим выводом результатов.
В качестве интегрированной среды разработки программного обеспечения используется NetBeans IDE 5.5.1 со встроенным web-сервером Tomcat 5.5.17.
Структура проекта представлена на рисунке 2.
Рисунок 2. Структура проекта
Во всех jsp-страницах для улучшения дизайна используется CSS, определённая в файле .\css\public.css. Таким образом, есть возможность быстро и легко менять вид отображаемых страниц заменой css-файла на подходящий.
Конфигурационный файл web.xml определяет главной страницей файл index.jsp, а страницей вывода ошибки — файл error.jsp. Файл faces-config.xml определяет managed bean и одно правило навигации, как и в выше приведенном примере.
Класс MyTest соответствует managed bean с названием test, представляющему текущего пользователя и его ответы, и содержит статические массивы, хранящие вопросы теста и варианты ответов. Цикл жизни test определён как session, что значит, что при каждой новой сессии будет создан новый экземпляр класса MyTest.
Файл index.jsp описывает приветственную страницу проекта, отображающую единственную ссылку на страницу тестирования (рис. 3).
Рисунок 3. Отображение index.jsp
Файл test.jsp соответствует странице тестирования (рис. 4, 5), на которой отображается номер вопроса, текст вопроса, возможные варианты ответа и три кнопки: «Назад» (активна, если текущий вопрос не первый), «Вперёд» (активная, если текущий вопрос не последний) и «Результат» (отображается, если текущий вопрос последний; при нажатии даёт исход «result», который описан в faces-config.xml: переход к result.jsp).
Рисунок 4. Отображение test.jsp
Рисунок 5. Отображение test.jsp
Файл result.jsp соответствует странице отображения результатов тестирования (рис. 6), на которой отображается количество правильно данных ответов и общее количество вопросов.
Рисунок 6. Отображение result.jsp
В случае попытки обратиться к несуществующей странице, web-приложение переадресует пользователя на страницу error.jsp (рис. 7).
Рисунок 7. Отображение error.jsp
В настоящей работе опущено рассмотрение jsp- и jsf-тегов, используемых в jsp-страницах.
4. Исходный код
Ниже приведены исходные коды файлов демонстрационного проекта, описанного в предыдущем разделе.
4.1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 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">
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>
4.2. faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>test</managed-bean-name>
<managed-bean-class>testpack.MyTest</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<navigation-case>
<from-outcome>result</from-outcome>
<to-view-id>/result.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
4.3. MyTest.java
package testpack;
import javax.faces.model.SelectItem;
public class MyTest {
// Номер текущего вопроса
private int curQuestion = 0;
// Массив вопросов
private String[] Questions = {
"Сколько у треугольника сторон?",
"Сколько у четырёхугольника углов?",
"Что такое JSF?"
};
// Массив массивов ответов на вопросы
private String[][] Answers = {
{"1", "2", "3", "4"},
{"0", "4", "8"},
{"JavaServer Faces", "Java Sun Foundation"}
};
// Массив номеров правильных ответов
private int[] CorAns = {
2, 1, 0
};
// Массив данных ответов
private int[] givenAns = {
0, 0, 0
};
// Строка результата
private String result = null;
// Массив возможных ответов на текущий вопрос
private SelectItem[] curAnsItems;
// Текущий вопрос
private String Quest;
public String next(){
if (getCurQuestion() < Questions.length - 1) {
++curQuestion;
}
return "";
}
public String prev(){
if (getCurQuestion() > 0) {
--curQuestion;
}
return "";
}
public String res(){
int n = Questions.length;
int m = 0;
for (int i = 0; i < n; ++i){
if (CorAns[i] == givenAns[i]){
++m;
}
}
this.result = "Итого правильных ответов "+m+" из "+n+".";
return "result";
}
public MyTest() {
}
public String getQuest() {
return Questions[getCurQuestion()];
}
public Integer getCurAns() {
return new Integer(givenAns[getCurQuestion()]);
}
public void setCurAns(Integer curAns) {
givenAns[getCurQuestion()] = curAns.intValue();
}
// Подготовка списка ответов для выпадающего меню
public SelectItem[] getCurAnsItems() {
SelectItem[] tmp = new SelectItem[Answers[getCurQuestion()].length];
for (int i = 0; i < Answers[getCurQuestion()].length; ++i){
tmp[i] = new SelectItem(new Integer(i), Answers[getCurQuestion()][i]);
}
return tmp;
}
// Можно ли "Вперёд"
public boolean isCanNext(){
return getCurQuestion() < Questions.length - 1;
}
// Можно ли "Назад"
public boolean isCanPrev(){
return getCurQuestion() > 0;
}
// Отображать ли "Результат"
public boolean isCanFinish(){
return getCurQuestion() == Questions.length - 1;
}
public String getResult() {return result;}
public int getCurQuestion() {return curQuestion;}
}
4.4. index.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<link href="./css/public.css" rel="stylesheet" type="text/css"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Web-тест!</title>
</head>
<body>
<h1>Добро пожаловать!</h1>
<a href="./faces/test.jsp">Перейти к тестированию</a>
</body>
</html>
4.5. test.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<link href="./css/public.css" rel="stylesheet" type="text/css"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Тест</title>
</head>
<body>
<f:view>
<h1><h:outputText value="Вопрос №#{test.curQuestion + 1}" /></h1>
<h:form>
<h:panelGrid columns="1">
<h:outputText value="#{test.quest}" />
<h:outputText value="Выберите ответ:" />
<h:selectOneRadio value="#{test.curAns}">
<f:selectItems value="#{test.curAnsItems}"/>
</h:selectOneRadio>
</h:panelGrid>
<h:panelGrid columns="2">
<h:commandButton value="Назад" action="#{test.prev}" disabled="#{!test.canPrev}"/>
<h:commandButton value="Вперёд" action="#{test.next}" disabled="#{!test.canNext}"/>
</h:panelGrid>
<h:commandButton value="Результат" action="#{test.res}" rendered="#{test.canFinish}"/>
</h:form>
</f:view>
</body>
</html>
4.6. result.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<link href="./css/public.css" rel="stylesheet" type="text/css"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Web-тест -- результаты</title>
</head>
<body>
<h1>Результаты</h1>
<f:view>
<h:outputText value="#{test.result}"/>
</f:view>
</body>
</html>
4.7. error.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<link href="./css/public.css" rel="stylesheet" type="text/css"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Web-тест -- Ошибка!</title>
</head>
<body>
<h1>404. Докумет не найден</h1>
Страница, к которой Вы пытаетесь обратиться, не найдена. :(
</body>
</html>
Заключение
В настоящей работе показана актуальность применения компонентных технологий разработки web-приложений, таких, как ASP.NET и JSF, и приведены минусы устаревших технологий, таких, как PHP и CGI.
Изучены технологии JavaServer Pages и JavaServer Faces, даны их описания и приведены примеры использования на основе парадигмы MVC, рассмотрены основные элементы JSF: конфигурационный файл faces-config.xml и его элементы.
С помощью JSP и JSF в интегрированной среде разработки приложений NetBeans создан web-проект, позволяющий проводить тестирование пользователей с последующим отображением результатов (количество верно данных ответов).
Также изучена работа со средой NetBeans 5.5.1 и сервером Tomcat 5.5.17.
Список использованных источников
1. Официальная домашняя страница JSF. https://javaserverfaces.dev.java.net
2. Ресурс учебных пособий и примеров JSF. http://www.jsftutorials.net
3. Ресурс «JSF шаг за шагом». http://jsf.iatp.org.ua/ru/index.html
4. C. McClanahan, E. Burns, R. Kitain. JavaServer Faces Specification ver. 1.1. Sun Microsystems, Inc., 2004.
5. H. Bergsten. JavaServer Faces. O'Reilly, 2004.
[1] Java Platform, Enterprise Edition
[2] Model-view-controller, «Модель-представление-поведение» — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты.