Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 8 лет назад пользователемЕкатерина Ханыкова
1 Java : persistence, servlets
2 Основы Hibernate Hibernate – одна из технологий ORM (Object Relational Mapping), реализует технологию JPA (Java Persistence Architecture). Аналоги – iBATIS, Oracle TopLink Работа с СУБД происходит через простые java-классы (POJO – Plain Old Java Objects), для которых указывается дополнительная информация (в XML или через аннотации)
3 Файлы, необходимые для работы Библиотека hibernate (включает: ядро – core, аннотации – annotation) Файл конфигурации (hibernate.cfg.xml), в котором указаны общие параметры для hibernate и список классов для ORM Классы POJO для воспроизведения структуры БД и хранения данных
4 Пример hibernate.cfg.xml org.postgresql.Driver jdbc:postgresql://localhost:5432/tpl_db postgres update org.hibernate.dialect.PostgreSQLDialect false true thread
5 Целевая структура БД
6 Класс Person package ormtest.entities; import java.util.*; import javax.persistence.*; public class Person = GenerationType.AUTO) private long id; private String firstname; private String middlename; private String lastname; private String = TemporalType.DATE) private = "PERSON_DEPARTMENT", ) private List departments = new ArrayList (); //getXXX, setXXX methods (JavaBeans-style) }
7 Класс Department package ormtest.entities; import java.util.*; import javax.persistence.*; import public class = GenerationType.AUTO) private long id; private String briefname; private = "PERSON_DEPARTMENT", joinColumns = "DEPARTMENT"), inverseJoinColumns = = "DEP_INDEX") private List persons = new ArrayList (); //getXXX, setXXX methods (JavaBeans-style) }
8 Класс HibernateUtil package ormtest.entities; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory from standard (hibernate.cfg.xml) // config file. sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } catch (Throwable ex) { // Log the exception. System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } public static SessionFactory getSessionFactory() { return sessionFactory; }
9 Использование шаблона Data Access Object ns/Patterns/DataAccessObject.html DataSource – наши классы-сущности (POJO)
10 Класс OrganizationDAO Методы для доступа к объектам в пакете ormtest.entities public void beginTransaction() throws Exception{ if( s != null ) throw new Exception( "Session already opened!" ); s = HibernateUtil.getSessionFactory().openSession(); s.beginTransaction(); } public void commit() throws Exception{ try{ s.getTransaction().commit(); s.close(); }finally{ try{ s.close(); }catch( Exception exc ){} s = null; } public void rollback() throws Exception{ s.getTransaction().rollback(); s.close(); } public List getPesons() throws Exception{ return s.createQuery( "select p from Person p" ).list(); } public Person getPerson( long id ) throws Exception{ return (Person)s.createQuery("select p from Person p where p.id=?").setLong( 0, id ).uniqueResult(); } public void savePerson( Person p ) throws Exception{ s.saveOrUpdate( p ); }
11 Пример – добавление сотрудника Person p = new Person(); p.setFirstname("oleg"); p.setLastname("ivanov"); p.setGender("M"); p.setBdate( new java.text.SimpleDateFormat("dd.mm.yyyy").parse(" ") ); Department dep = new Department( "ПИКО", "Кафедра Прикладной и Компьютерной Оптики" ); dep.getPersons().add( p ); OrganizationDAO dao = OrganizationDAO.getInstance(); dao.beginTransaction(); dao.savePerson( p ); dao.saveDepartment( dep ); dao.commit();
12 Выбор всех сотрудников OrganizationDAO dao = OrganizationDAO.getInstance(); dao.beginTransaction(); List persons = dao.getPesons(); for( Person p : persons ){ System.out.println( " - " + p.getFirstname() + " " + p.getLastname() ); System.out.println( "\tDepartments:" ); for( Department dep : p.getDepartments() ) System.out.println( "\t - [" + dep.getBriefname() + "] " + dep.getFullname() ); } dao.commit();
13 Информация по Hibernate Настройка ORM на основе XML- конфигурации: reference/en/html/index.html reference/en/html/index.html Настройка ORM на основе аннотаций: tations/reference/en/html_single/ tations/reference/en/html_single/
14 Задание 1 Создать консольное приложение с поддержкой библиотеки Hibernate. Добавить к классам из примеров класс Timesheet, связанный с классом Person (связь «многие-к-одному»). Класс должен содержать следующие поля: -Дата (включая время) начала выполнения работы; -Дата (включая время) окончания работы; -Описание работы; -Название проекта. В классе Test добавить для пользователя несколько записей об использовании рабочего времени. Произвести сохранение в БД, а затем чтение с выводом на консоль.
15 Технологии JEE JEE – Java Enterprise Edition Включает следующие технологии: –Сервлеты (Servlets); –JSP (Java Server Pages); –JSF (Java Server Faces); –RMI (Remote Method Invocation); –Веб-службы (Web Services)
16 Сервлеты Работают под управлением контейнера сервлетов (Apache Tomcat, Sun Application Server, JBoss и др.); Состав: –Дескриптор развертывания (файл web.xml); –Класс, наследуемый от javax.servlet.http.HttpServlet
17 Взаимодействие по протоколу HTTP Обозреватель отправляет стандартные запросы GET или POST на сервер. После обработки на сервере клиенту возвращается ответ (с указанием типа: text/html, application/xml, text/plain). При запросе типа GET на веб-сервере разбирается URL запрос и создается переменная окружения QUERY_STRING (например, a=1&b=2&c=3 для URL: При запросах типа POST веб-сервер передает параметры запроса CGI- приложению через стандартный поток ввода.
18 Особенности работы сервлета Интерфейсом для сервлетов служит javax.servlet.Servlet. Интерфейс объявляет следующие методы: –void destroy() –ServletConfig getServletConfig() –String getServletInfo() –void init() –void service( ServletRequest, ServletResponse )
19 Класс HttpServlet Абстрактный класс, позволяет реализовать веб-приложение, путем перегрузки методов: doPost( HttpServletRequest, HttpServletResponse ) doGet( HttpServletRequest, HttpServletResponse ) Параметры методов позволяют получить доступ к параметрам запроса (по именам) и выходному потоку для записи ответа.
20 Пример сервлета package svt; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println(" "); out.println(" Servlet TestServlet "); out.println(" "); out.println(" Servlet TestServlet at " + request.getContextPath () + " "); out.println(" "); } finally { out.close(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
21 Быстрое создание сервлета в NetBeans Создаем новое веб-приложение: File / New project / Web application. Зададим Context Path как test Добавляем сервлет: Source Packages / New / Servlet… (назовем сервлет TestServlet, а url pattern – /svt/*) Раскомментируем содержание метода processRequest Развернем (deploy) сервлет на веб-сервере: / deploy Обратимся к сервлету через обозреватель по URL:
22 Содержание web.xml TestServlet svt.TestServlet TestServlet /svt/* 30 index.jsp
23 Обработка параметров if( request.getParameter("login") == null || request.getParameter("passwd") == null ){ request.getRequestDispatcher("login.html").forward(request, response); return; } String login = request.getParameter("login"); String passwd = request.getParameter("passwd"); if( login.equals("a") && passwd.equals("a") ){ request.getRequestDispatcher("login-ok.html").forward(request, response); return; }else request.getRequestDispatcher("login-failed.html"). forward(request, response); 24 Перенаправление запросов Сервлеты могут перенаправлять запросы, например, другим сервлетам или на другие ресурсы данного веб- сервера. RequestDispatcher rd = request.getRequestDispatcher(page.html); В интерфейсе RequestDispatcher объявлены 2 метода. Метод для перенаправления запроса (с закрытием выходного потока) - void forward( ServletRequest request, ServletResponse response ); Метод для включение содержимого в текущий ответ, без закрытия потока - void include( ServletRequest request, ServletResponse response );
25 Задание 2 Разработать веб-приложение для авторизации пользователя. Первая страница – форма для ввода имени и пароля. Вторая – сообщение об ошибке авторизации. Третья – приглашение для работы в системе при успешной авторизации. Форма авторизации Логин или пароль указаны не правильно Приглашение для работы в системе
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.