Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n...

62
Java Server Pages Развитие © Составление, Гаврилов А.В., 2013 Лекция 26.1 УНЦ «Инфоком» Самара 2013

Transcript of Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n...

Page 1: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Java Server PagesРазвитие

© Составление, Гаврилов А.В., 2013

Лекция 26.1

УНЦ «Инфоком»Самара

2013

Page 2: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

1

План лекции

n Недостатки прежнего JSP

n Expression Language

n Custom tags

n JSTL

Page 3: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Что было не так?..

n Смешение Java-кода и тегов страницы

n Много «типовых» действий

n «Некомфортность» работы на Java в ходе обработки запросовl Громоздкость кодаl Необходимость знания особенностей

преобразования в сервлет

2

Page 4: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Смена парадигмы

n БылоJSP нужно для того, чтобы

Java-программистам было удобнее писать под Web

n СталоJSP-программист может

и не знать Java, и даже лучше,если он ее знать не будет

3

Page 5: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Основные идеи

n Альтернативный языкl Expression Language

n Использование библиотек теговl особенно JSTL – JSP Standard Tag Library

n Ориентация на компоненты в смысле JavaBeans и использование понятия свойств

n Общие принципы остаются прежними

4

Page 6: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы писали раньше

5

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSP Page</title></head> <body><h1>Hello page</h1><br><% if (request.getParameter("name") != null) {

out.print("<b>Hello, ");out.print(request.getParameter("name"));out.println("!</b><br>");

} %><form name="oldform" action="old.jsp">

What's your name?<br><input type="text" name="name" value="" size="50" /><input type="submit" value="Tell name" name="tell" />

</form> </body> </html>

Page 7: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы пишем теперь

6

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSP Page</title></head> <body>

<h1>Hello page</h1><br><c:if test="${!empty param.name}" var="val" scope="request">

<b>Hello, ${param.name}!</b><br></c:if> <form name="oldform" action="old.jsp">

What's your name?<br><input type="text" name="name" value="" size="50" /><input type="submit" value="Tell name" name="tell" />

</form></body></html>

Page 8: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Expression Language

n Является альтернативой выражениям и скриптлетам

n Динамическое чтение данных из…l JavaBeans-компонентовl Неявных объектовl Различных структур данных

n Динамическая запись данных в…l Формыl JavaBeans-компоненты

n Вызов статических и публичных методовn Динамическое выполнение простых операций

7

Page 9: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Виды выражений EL

n По моменту вычисленияl Немедленное вычислениеl Отложенное вычисление

n По цели выраженияl Обращение к даннымl Вызов метода

n По режиму доступаl Только чтениеl Чтение и запись данных

8

Page 10: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Немедленное и отложенное вычислениеn Немедленное вычисление (JSP)

l ${ выражение }l Позволяет лишь получить значение выражения

n Отложенное вычисление (JSF)l #{ выражение }l Выражение может использоваться различным

образом в разные моменты жизненного циклаl Позволяет не только получать значения, но и

записывать их (в т.ч. для свойств бинов)

9

Page 11: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Применение выражений с немедленным вычислением n Выражения EL могут применяться:

l в статическом текстеl в качестве значений атрибутов тегов

10

<some:tag>some text ${expr} some text

</some:tag>

<some:tag value="${expr}"/>

<some:tag value="some${expr}${expr}text${expr}"/>

Page 12: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Обращение к данным

n Компоненты JavaBeansl ${beanName.propertyName}l ${beanName["propertyName"]}

n Коллекцииl ${beanName.listName[i]}l ${beanName.mapName["string key"]}

n Перечислимые типы JavaSEl ${reference == "enumConstant"}

n Неявные объектыl ${param["paramName"]}

n Вычисление выраженийl ${customer.age + 20}

11

Page 13: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Вызов методов

n Без параметровl ${object.method}l ${object["method"]}

n С параметрамиl ${object.method(param1, ..., paramN)}

l ${object["method"](param1, ..., paramN)}

12

Page 14: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Литералы в выражениях

n Логические

n Целочисленные

n С плавающей точкой

n Строковые

n Ссылочные

truefalse136

3.141.0e10"string"'literal'null

13

Page 15: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Операторы в выражениях

n Доступ к элементамn Операторные скобкиn Унарныеn Арифметические

n Сравнение

n Логические

n [] .n ()n - not ! Emptyn * / div % modn + -n < > <= >=lt gt le ge

n == != eq nen && andn || orn ? :

14

Page 16: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Неявные объекты

n Объекты доступа к другим объектамl pageScope

l requestScope

l sessionScope

l applicationScope

n Часто используемые объектыl pageContext

l session

l request

l response

l param

l cookie

l ...

15

Page 17: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Примеры выражений EL

16

Выражение Результат${(10*10) ne 100} false${'a' < 'b'} true${1.2E4 + 1.4} 12001.4${!empty param.Add} true, если параметр Add не null и

не пустая строка${pageContext.request.contextPath} Путь контекста${param['mycom.productId']} Значение параметра

mycom.productId${departments[deptName]} Значение элемента deptName в

departments${header["host"]} Имя хоста

Page 18: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

JSP-страница с применением ELn JSP-страница

n Фрагмент примерного кода сервлета

17

${20 + 335}<br/>${!empty param.Add}<br/>

out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.evaluateExpression(

"${20 + 335}", java.lang.String.class, (PageContext)_jspx_page_context, null));

out.write("<br/>\n");out.write((java.lang.String)

org.apache.jasper.runtime.PageContextImpl.evaluateExpression("${!empty param.Add}", java.lang.String.class, (PageContext)_jspx_page_context, null));

out.write("<br/>\n");

Page 19: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Custom tags

n Определяются пользователем и описывают часто используемые операции

n Описываются и распространяются в виде библиотек тегов, определяющих семейства тегов и содержащих объекты, реализующие теги

n Для использования тегов необходимо:l Объявить библиотеку теговl Сделать ее доступной для web-приложения

18

<prefix:tag attr1="value" ... attrN="value" /><prefix:tag attr1="value" ... attrN="value" >body

</prefix:tag>

Page 20: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Библиотеки тегов

n Библиотеки тегов описываются в tld-файлах

n Библиотеки могут бытьl публичными и храниться в сетиl локальными и храниться в каталоге WEB-INF

n Для подключения библиотеки необходимо использовать директиву taglib

19

<%@ taglib prefix=”mytag" uri="/WEB-INF/iterator.tld"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Page 21: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Обработка custom tags

n В процессе компиляции jsp-страницы теги будут преобразовываться в java-код в соответствии с описанием в библиотеке тегов

n Если соответствующая библиотека не была подключена, относящиеся к ней теги будут трактоваться как статическая часть jsp-страницы и просто выводиться в отклик

20

Page 22: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

JSP-страница с применением custom tagsn JSP-страница

n Фрагмент примерного кода сервлета

21

<c:if test="${!empty param.name}" var="nameExists" scope="request"><b>Hello, ${param.name}!</b><br/>

</c:if>

org.apache.taglibs.standard.tag.rt.core.IfTag _jspx_th_c_if_0 = (org.apache.taglibs.standard.tag.rt.core.IfTag) _jspx_tagPool_c_if_var_test_scope.get(

org.apache.taglibs.standard.tag.rt.core.IfTag.class);_jspx_th_c_if_0.setPageContext(_jspx_page_context);_jspx_th_c_if_0.setParent(null);_jspx_th_c_if_0.setTest(((java.lang.Boolean)org.apache.jasper.runtime.PageContextImpl.evaluateExpression(

"${!empty param.name}", java.lang.Boolean.class, (PageContext)_jspx_page_context, null)).booleanValue());

Page 23: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

JSP-страница с применением custom tagsn Фрагмент примерного кода сервлета

22

_jspx_th_c_if_0.setVar("nameExists");_jspx_th_c_if_0.setScope("request");int _jspx_eval_c_if_0 = _jspx_th_c_if_0.doStartTag();if (_jspx_eval_c_if_0 != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {

do {out.write(“<b>Hello, ");out.write((java.lang.String)

org.apache.jasper.runtime.PageContextImpl.evaluateExpression("${param.name}", java.lang.String.class, (PageContext)_jspx_page_context, null));

out.write("!</b><br/>\n");int evalDoAfterBody = _jspx_th_c_if_0.doAfterBody();if (evalDoAfterBody !=

javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)break;

} while (true);}

Page 24: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

JSP Standard Tag Library

n Библиотека включает в себя набор тегов, функциональность которых часто используется в web-приложениях

n Эти теги должны обрабатываться единообразно в рамках всех контейнеров

n Это позволяет:l избежать использования различных библиотекl единообразно организовывать JSP-страницы

23

Page 25: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Библиотеки JSTL

n JSTL поставляется в виде набора библиотек:l Различные направления функциональностиl Различные пространства имен

n Библиотеки и соответствующие путиl Core http://java.sun.com/jsp/jstl/corel XML http://java.sun.com/jsp/jstl/xmll Internationalizationhttp://java.sun.com/jsp/jstl/fmtl Database http://java.sun.com/jsp/jstl/sqll Functions http://java.sun.com/jsp/jstl/functions

24

Page 26: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Библиотеки JSTL

25

Библиотека Функциональность Префикс

Core

Работа с переменными

cУправление ходом выполнения

Работа с URL

Разное

XML

Базовые

xУправление выполнением

Преобразования

I18n

Локализация

fmtФорматирование сообщений

Форматирование чисел и дат

Database SQL sql

FunctionsВозможности коллекций

fnРабота со строками

Page 27: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Библиотека Core

26

Функциональность ТэгиРабота с переменными remove

set

Управление ходом выполнения choose (when, otherwise)forEachforTokensif

Работа с URL import (param)redirect (param)url (param)

Разное catchout

Page 28: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Библиотека XML

27

Функциональность ТэгиБазовая out

parseset

Управление ходом выполнения

choose (when, otherwise)forEachif

Преобразования transform (param)

Page 29: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Пример использования

28

<c:if test="${!empty param.Add}"><c:set var="bid" value="${param.Add}"/><jsp:useBean id="bid" type="java.lang.String" /><sql:query var="books"

dataSource="${applicationScope.bookDS}">select * from PUBLIC.books where id = ?<sql:param value="${bid}" />

</sql:query><c:forEach var="bookRow" begin="0" items="${books.rows}">

<jsp:useBean id="bookRow" type="java.util.Map" /><jsp:useBean id="addedBook" class="database.Book"

scope="page" />...<% cart.add(bid, addedBook); %>

...</c:if>

Page 30: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Java Server Faces© Составление, Гаврилов А.В., 2013

Лекция 26.2

УНЦ «Инфоком»Самара

2013

Page 31: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

30

План лекции

n Принципы JSF

n Модель данных

n Порядок обработки запросов

n Элементы JSF

Page 32: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Недостатки JSP

n Возможности «чистого» HTML недостаточныl Необходимо использование других языков и

технологийn Необходимость обработки параметров

запросовn Необходимость перехода к модели данных

на стороне сервера

31

Page 33: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Технология Java Server Faces

n Фреймворк для Web-приложений на Java, предназначенный для описания пользовательского интерфейса с помощью компонентов, находящихся на сервере

n Основные элементы технологии:l API для представления UI-компонентов и

управления их состоянием; управления событиями, преобразования данных; определения навигации по страницам; и т.д.

l Библиотеки тегов для описания UI-компонентов на jsf-страницах

32

Page 34: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

ВозможностиJava Server Facesn Создание пользовательского интерфейса на

основе компонентовn Добавление компонентов на страницу простым

указанием теговn Привязка генерируемых компонентами событий

к коду на стороне сервераn Привязка состояния компонентов к данным на

сервереn Сохранение и восстановление состояния

компонентов пользовательского интерфейса вне процесса обработки запроса

33

Page 35: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы писали раньшеКласс JavaBean

34

package calc;public class Calculator {

private double a = 0;private double b = 0;private double result = 0;private boolean resultExists = false;public Calculator() {}public double getA() { return a; }public void setA(double a) { this.a = a; }public double getB() { return b; }public void setB(double b) { this.b = b; }public double getResult() {resultExists = false; return result; }public void doSum() { result = a + b; resultExists = true; }public void doSubtr() { result = a - b; resultExists = true; }public void doMult() { result = a * b; resultExists = true; }public void doDev() { result = a / b; resultExists = true; }public boolean isResultExists() { return resultExists; }

}

Page 36: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы писали раньшеJSP-страница, часть 1

35

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="calc.Calculator" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd"><html><body><%Calculator calc = (Calculator) session.getAttribute("calc");if (calc == null) {calc = new Calculator();session.setAttribute("calc", calc);

}if (request.getParameter("aEd") != null) {calc.setA(Double.parseDouble((String) request.getParameter("aEd")));

}if (request.getParameter("bEd") != null) {calc.setB(Double.parseDouble((String) request.getParameter("bEd")));

}...

Page 37: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы писали раньшеJSP-страница, часть 2

36

...

if (request.getParameter("sum") != null) {calc.doSum();

}else if (request.getParameter("subtr") != null) {calc.doSubtr();

}else if (request.getParameter("mult") != null) {calc.doMult();

}else if (request.getParameter("dev") != null) {calc.doDev();

}%>

...

Page 38: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы писали раньшеJSP-страница, часть 3

37

...

<form name="calcForm" action="index.jsp">First:<input type="text" name="aEd"

value="<%=calc.getA()%>" size="15"/><br/>Second:<input type="text" name="bEd"

value="<%=calc.getB()%>" size="15" /><br/><input type="submit" value="+" name="sum" /><input type="submit" value="-" name="subtr" /><input type="submit" value="*" name="mult" /><input type="submit" value="/" name="dev" /> <%if (calc.isResultExists()) {

%><br/>Result: <%=calc.getResult()%><%}%>

</form></body>

</html>

Page 39: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы пишем теперьweb.xml

38

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><context-param><param-name>javax.faces.PROJECT_STAGE</param-name><param-value>Development</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>faces/index.xhtml</welcome-file>

</welcome-file-list></web-app>

Page 40: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы пишем теперьКласс JavaBean

39

package calc;

import java.io.Serializable;import javax.faces.bean.ManagedBean;import javax.faces.bean.SessionScoped;

@ManagedBean(name = "Calculator")@SessionScopedpublic class Calculator

implements Serializable {...

}

Page 41: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Как мы пишем теперьFacelet

40

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"xmlns:c="http://java.sun.com/jsp/jstl/core">

<h:head><title>Calculator</title>

</h:head><h:body>

<h:form>First: <h:inputText label="a" value="#{Calculator.a}"/><br/>Second: <h:inputText label="b" value="#{Calculator.b}"/><br/><h:commandButton action="#{Calculator.doSum}" value="+" /><h:commandButton action="#{Calculator.doSubtr}" value="-" /><h:commandButton action="#{Calculator.doMult}" value="*" /><h:commandButton action="#{Calculator.doDev}" value="/" /><c:if test="${Calculator.resultExists}">

<br/>Result: <h:outputText value="${Calculator.result}" /></c:if>

</h:form></h:body>

</html>

Page 42: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Элементы JSF-приложения

n Набор страниц

l JSP (классический html + дополнительные теги)

l Facelets (xhtml + дополнительные теги)

n Набор используемых бинов

n Опционально, конфигурационный файл (faces-config.xml)

n Дескриптор развертывания (web.xml)

n Дополнительные классы

n Библиотеки дополнительных тегов

41

Page 43: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Обработка запроса

n Facelet включает JSF-теги, описывающие UI-компонентыn Программа UI управляет объектами, использующимися в

xhtml-странице:l Компоненты UI, описанные тегами на страницеl Зарегистрированными для компонентов слушателями событий,

валидаторами и конвертерамиl POJO-объектами, инкапсулирующими данные и бизнес-логику

42

Page 44: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Взаимодействие элементов

43

Представление компонентов

Модель компонентов

Управляемые компоненты

HTTPконвертеры

валидаторысобытия

КЛИЕНТ(браузер)

СЕРВЕР(web-контейнер)

Page 45: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Жизненный циклобработки запросов

44

Page 46: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Жизненный циклобработки запросовn Значительно отличается от жизненного цикла

в случае JSPn Выражения EL вида #{ выражение }

(отложенное вычисление) имеют различный смысл на различных стадияхl На этапе формирования отклика позволяют

вычислять значения, отправляемые в откликl На этапе обработки запроса позволяют изменять

состояние компонентов на сервереn Операции жизненного цикла отличаются в

случае первого и последующих запросов

45

Page 47: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Facelets

n Особенностиl Для создания страниц используется XHTML (transitional)l Использование библиотек тегов (через пространства имен)l Поддержка Expression Language

n Преимуществаl Повторное использование кода (шаблоны и компоненты)l Возможность настройки и корректировки работы компонентовl Быстрая компиляцияl Проверка выражений EL на этапе компиляцииl Быстрый рендеринг компонентов

46

Page 48: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Библиотеки теговБиблиотека URI Префикс Содержимое

Java Server Faces Facelets Tag Library

http://java.sun.com/jsf/facelets ui: Теги для работы с шаблонами

Java Server Faces HTML Tag Library

http://java.sun.com/jsf/html h: Теги для компонентов документа

JavaServer Faces Core Tag Library

http://java.sun.com/jsf/core f: Тегидополнительных действий, не зависящих от технологии рендеринга

JSTL Core Tag Library

http://java.sun.com/jsp/jstl/core c: JSTL Core

JSTL Functions Tag Library

http://java.sun.com/jsp/jstl/functions fn: JSTL Functions

47

Page 49: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Управляемые биныManaged beansn С точки зрения языка представляют собой обычный

класс JavaBean-компонента

n Класс снабжается аннотацией @ManagedBean

n Жизненный цикл экземпляра компонента управляется контейнером

n В основном свойства бина «подкладываются» под свойства UI-компонента, а его методы «выполняют действия» компонента

n Характеристики указываются с помощью дополнительных аннотаций

48

Page 50: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Пределы сохранения компонентов n Всё web-приложение

l @ApplicationScopedn Клиентская сессия

l @SessionScopedn Одна страница (представление)

l @ViewScopedn Один запрос

l @RequestScopedn Отсутствие сохранения

l @NoneScoped

49

Page 51: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Конвертеры

n Когда бин привязан к UI-компоненту, существует 2 формы данных компонентаl В представлении: нечто, что может интерпретировать и вводить

пользовательl В модели: данные, хранящиеся в бине в виде значений типов

данныхn Конвертеры применяются для перевода из одной формы

в другуюn Существуют стандартные конвертеры для стандартных

типовl DoubleConverterl LongConverterl ...

50

Page 52: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Конвертеры

n Существует возможность разрабатывать и использовать новые типы конвертеров

n Для конвертеров можно указывать сообщение, которое следует выводить в случае ошибки

51

<h:inputText id="ccno"size="19"converterMessage="#{ErrMsg.userNoConvert}"converter="CreditCardConverter"required="true">

...</h:inputText>

Page 53: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Валидаторы

n Функционирование компонента может подразумевать ограничения стандартных типов

n Для проверки соответствия значений требованиям бизнес-логики приложения применяются валидаторы

n Существует ряд стандартных валидаторовl DoubleRangeValidatorl LongRangeValidatorl LengthValidator

52

Page 54: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Валидаторы

n Валидаторы указываются с помощью специальных тегов

n Существует возможность разрабатывать и использовать новые виды валидаторов

53

<h:inputText id="userNo" label="User Number"value="#{UserNumberBean.userNumber}">

<f:validateLongRangeminimum="#{UserNumberBean.minimum}"maximum="#{UserNumberBean.maximum}" />

</h:inputText>

Page 55: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Выбор перехода

n «Исход» страницы определяется атрибутом action компонента, который был использован пользователем

n Данный атрибут может быть:l Статичным

l Вычислимым

n Если в случае вычислимого атрибута метод не возвращает ничего или возвращает null, то переход совершается на эту же страницу

54

<h:commandButton id="submit" action="success" value="Submit" />

<h:commandButton id="submit" action="#{userNumberBean.getStatus}" value="Submit" />

Page 56: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Значения исходов

n URL

n Имя фейслета (без расширения)

n Имя случая для правил навигации

55

<h:commandLink action="exit">navigation rule</h:commandLink>

<h:commandLink action="page2">facelet name</h:commandLink>

<h:commandLink action="page1.xhtml">URL</h:commandLink>

Page 57: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Правила навигации

n Определяет правила перехода между страницами приложенияn По сути образует граф состояний с случаями переходовn Сами правила указываются в конфигурационном файле

faces-config.xml

56

<?xml version='1.0' encoding='UTF-8'?><faces-config version="2.0"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"><navigation-rule>

<from-view-id>/index.xhtml</from-view-id><navigation-case>

<from-outcome>exit</from-outcome><to-view-id>/page3.xhtml</to-view-id>

</navigation-case></navigation-rule>

</faces-config>

Page 58: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Сообщения

n Сообщения, выводимые, например, в случае ошибок конвертеров, можно хранить в отдельных файлах с расширением properties

n Для использования сообщений их необходимо зарегистрировать в конфигурационном файле

n Существуют механизмы, облегчающие локализацию программ

57

ConversionError=Input value is not a StringFormatInvalid=Input value does not match legal pattern(s) {0}

<application><resource-bundle>

<base-name>guessNumber.ApplicationMessages</base-name><var>ErrMsg</var>

</resource-bundle></application>

Page 59: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

За бортом…

n Библиотеки тегов и их возможностиn Шаблоны документов и встраиваемые в

шаблоны фейслетыn Встроенный AJAXn Написание собственных конвертеровn Написание собственных валидаторовn Написание собственных компонентовn Дополнительные библиотеки компонентовn …

58

Page 60: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Общая ситуация

59

Page 61: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Небольшие изменения в сервлетахn Конфигурирование с помощью аннотаций

60

import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "SomeServlet", urlPatterns = {"/SomeServlet"})

public class SomeServlet extends HttpServlet {...

}

Page 62: Java Server Pages · 2019. 9. 5. · l особенно JSTL – JSP Standard Tag Library n Ориентация на компоненты в смысле JavaBeans и использование

Спасибо за внимание!