26
Углубленное программирование на Java Занятие 1.2 «Сессия пользователя» Виталий Чибриков

Java осень 2014 занятие 2

Embed Size (px)

DESCRIPTION

Java осень 2014 занятие 2

Citation preview

Page 1: Java осень 2014 занятие 2

Углубленное программирование на

Java Занятие 1.2 «Сессия

пользователя»

Виталий Чибриков

Page 2: Java осень 2014 занятие 2

План лекции

2

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

Page 3: Java осень 2014 занятие 2

Задание

3

Сессия пользователя

1. Регистрация

2. Авторизация

3. Игра

4. Выход

Page 4: Java осень 2014 занятие 2

Задание

4

Упрощения

1. Без записи в базу

2. Без интерфейсов

3. Потоками управляет Jetty

4. «Потокоопасные» карты

Page 5: Java осень 2014 занятие 2

Регистрация

5

Frontend

1. Страница с вводом: логин, email, пароль

Backend

1. Сервлет обработки запроса

2. Класс AccountService с методом регистрации

3. Класс UserProfile с полями: логин, email, пароль

4. Карта логин -> UserProfile

Page 6: Java осень 2014 занятие 2

Авторизация

6

Frontend

1. Страница с вводом: логин, пароль

Backend

1. Сервлет обработки запроса

2. Класс AccountService с методом авторизации

3. Поиск UserProfile в карте по логину

4. Карта HttpSession -> UserProfile

Page 7: Java осень 2014 занятие 2

Узнавание пользователя

7

Frontend

1. Страницы после логина

Backend

1. Сервлет обработки запроса страницы

2. Получение HttpSession из request-а

3. Поиск UserProfile в карте по HttpSession

Page 8: Java осень 2014 занятие 2

Выход

8

Frontend

1. Кнопка выхода

Backend

1. Сервлет обработки запроса

2. Получение HttpSession из request-а

3. Удаление UserProfile в карте по HttpSession

Page 9: Java осень 2014 занятие 2

План лекции

9

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

Page 10: Java осень 2014 занятие 2

generics (templates)

Generic programming

N алгоритмов, M типов данных. N * M реализаций?

Алгоритмы работают с шаблонами => N реализаций

Универсальные алгоритмы

Примеры синтаксиса

List<String> students = new ArrayList<String>();

Map<Integer, String> indexToName = new HashMap<Integer, String>();

void printCollection(List<Integer> collection){…};

void printCollection(List<?> collection) {…};

void drawShape(List<Shape> shapes) {…};

void drawShape(List<? extends Shape> shapes) {…};

― аглоритмы для типов, которые будут указыны позже

10

Page 11: Java осень 2014 занятие 2

generics vs inheritance

принцип «разновидность чего-то» (is a)

class Ветеринар<T extends Животное> extends Человек

T: Слон, Собака, Мышь

принцип «специализируется на» (of something)

В случае Т: Человек, получаем ветеринара по людям – врача

11

Пример

Шаблон

Наследование

Page 12: Java осень 2014 занятие 2

generics (templates)

List students == List<Object> students == List<?> students

public static Object getFirstValue(List listOfNumbers){ return listOfNumbers.get(0); }

public static String getFirstStringValue(List<String> listOfStrings){ return listOfStrings.get(0); }

public static void main(String[] args){ List<Integer> listOfNumbers = new ArrayList<Integer>(); listOfNumbers.add(42); String name1 = (String) getFirstValue(listOfNumbers); //Runtime error String name2 = getFirstStringValue(listOfNumbers); //Compile error }

12

Типизация значений

Page 13: Java осень 2014 занятие 2

Класс с шаблонным типом

public class GenericExample<T> { private T value;

public GenericExample(T value){ this.value = value; }

public T getT(){ return value; }

public static void main(String[] args) { GenericExample<Integer> intObject = new GenericExample<Integer>(1); Integer valueInteger = intObject.getT();

GenericExample<String> stringObject = new GenericExample<String>("word"); String valueString = stringObject.getT();

} }

13

Page 14: Java осень 2014 занятие 2

Метод с шаблонным типом

public class GenericExample {

public static <T> T getTheFirst(List<T> list){ return list.get(0); }

public static void main(String[] args) { List<Integer> listOfInts = new ArrayList<Integer>(); listOfInts.add(0); Integer intValue = getTheFirst(listOfInts);

List<String> listOfStrings = new ArrayList<String>(); listOfStrings.add(“Java is the best!”); String stringValue = getTheFirst(listOfStrings);

} }

14

Page 15: Java осень 2014 занятие 2

class LongId<T>

public class LongId<T> { private long id;

public LongId(long id){ this.id = id; }

public long getLong(){ return id; }

}

public void manyIdsInParams(long userId, long serverId, long address){…}

public void manyIdsInParams(LongId<User> userId, LongId<Server> serverId, LongId<Address> address){…}

15

Page 16: Java осень 2014 занятие 2

План лекции

16

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

Page 17: Java осень 2014 занятие 2

interface Iterable<T>

interface Iterator<T>

Iterator & Iterable

17

Iterator<T> iterator()

boolean hasNext()

void remove()

T next()

Page 18: Java осень 2014 занятие 2

Иерархия контейнеров

18

Page 19: Java осень 2014 занятие 2

Методы

Collection

19

extends Iterable<T>

add(T object)

addAll(Collection<T> coll)

clear()

contains(Object o)

remove(Object o)

removeAll(Collection<T> coll)

size()

isEmpty()

Page 20: Java осень 2014 занятие 2

List, Set, Queue

20

ListСписок с очередностью

LinkedList ― быстрое удаление и добавление элементов

ArrayList ― быстрый доступ по индексу

SetБез очередности

Без индекса

Быстрый поиск элемента

Queue

FIFO

Page 21: Java осень 2014 занятие 2

Map<key, value>

Map

21

Быстрый поиск по ключу – get(key)

Объект в качестве value. Например другой контейнер (Map<Integer, List<T>>)

Set<keyType> keySet()

Collection<valueType> values()

Page 22: Java осень 2014 занятие 2

interface Comparable<T>

Comparable

22

int compareTo(T o)

Возвращаемое значение типа int может быть >, =, < нуля

Integer a = 1;

Integer b = 2;

a.compareTo( b ) == -1; // true

a.compareTo( a ) == 0; // true

b.compareTo( a ) == 1; // true

Page 23: Java осень 2014 занятие 2

Основные методы

class Collections

― набор статических методов для работы с контейнерамиCollections

Object max(Collection coll)

void copy (List dest, List src)

Object min(Collection coll)

void reverse(List list)

void shuffle(List list)

void sort(List list)

void swap(List list, int i, int j)

23

Page 24: Java осень 2014 занятие 2

План лекции

24

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

Page 25: Java осень 2014 занятие 2

HttpSession

HttpSession session = request.getSession(); Long userId = (Long) session.getAttribute("userId");

if (userId == null) { userId = userIdGenerator.getAndIncrement(); session.setAttribute("userId", userId); }

String key = session.toString();

25

Page 26: Java осень 2014 занятие 2

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

Виталий Чибриков [email protected]