'

Java : persistence, servlets

Понравилась презентация – покажи это...




Слайд 0

Java : persistence, servlets http://mcproject.narod.ru


Слайд 1

Основы Hibernate Hibernate – одна из технологий ORM (Object Relational Mapping), реализует технологию JPA (Java Persistence Architecture). Аналоги – iBATIS, Oracle TopLink Работа с СУБД происходит через простые java-классы (POJO – Plain Old Java Objects), для которых указывается дополнительная информация (в XML или через аннотации)


Слайд 2

Файлы, необходимые для работы Библиотека hibernate (включает: ядро – core, аннотации – annotation) Файл конфигурации (hibernate.cfg.xml), в котором указаны общие параметры для hibernate и список классов для ORM Классы POJO для воспроизведения структуры БД и хранения данных


Слайд 3

Пример hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!– Драйвер СУБД --> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <!– Строка подключения --> <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/tpl_db</property> <property name="hibernate.connection.username">postgres</property> <property name="hibernate.connection.password">postgres</property> <!– hbm2ddl.auto: create, create-drop, update --> <property name="hibernate.hbm2ddl.auto">update</property> <!– DerbyDialect, MySQLDialect, Oracle8iDialect, Oracle10gDialect, HSQLDialect --> <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <!– вывод SQL-выражений на System.out --> <property name="hibernate.show_sql">false</property> <property name="hibernate.format_sql">true</property> <!– jta, managed, thread – контекст, в котором поддерживаются транзакции --> <property name="current_session_context_class">thread</property> <!– Список классов для проецирования в СУБД --> <mapping class=“ormtest.entities.User"/> <mapping class=“ormtest.entities.Department"/> </session-factory> </hibernate-configuration>


Слайд 4

Целевая структура БД


Слайд 5

Класс Person package ormtest.entities; import java.util.*; import javax.persistence.*; import org.hibernate.annotations.IndexColumn; @Entity @Table(name="PERSON") public class Person implements java.io.Serializable{ @Id() @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String firstname; private String middlename; private String lastname; private String gender; @Temporal(value = TemporalType.DATE) private Date bdate; @ManyToMany(cascade=CascadeType.ALL) @JoinTable(name = "PERSON_DEPARTMENT", joinColumns=@JoinColumn(name="PERSON"), inverseJoinColumns=@JoinColumn(name="DEPARTMENT") ) private List<Department> departments = new ArrayList<Department>(); //getXXX, setXXX methods (JavaBeans-style) }


Слайд 6

Класс Department package ormtest.entities; import java.util.*; import javax.persistence.*; import org.hibernate.annotations.IndexColumn; @Entity public class Department { @Id() @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String briefname; private String fullname; @ManyToMany(cascade=CascadeType.ALL) @JoinTable(name = "PERSON_DEPARTMENT", joinColumns = @JoinColumn(name = "DEPARTMENT"), inverseJoinColumns = @JoinColumn(name = "PERSON")) @IndexColumn(name = "DEP_INDEX") private List<Person> persons = new ArrayList<Person>(); //getXXX, setXXX methods (JavaBeans-style) }


Слайд 7

Класс 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; } }


Слайд 8

Использование шаблона Data Access Object http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html DataSource – наши классы-сущности (POJO)


Слайд 9

Класс 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<Person> 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 ); }


Слайд 10

Пример – добавление сотрудника Person p = new Person(); p.setFirstname("oleg"); p.setLastname("ivanov"); p.setGender("M"); p.setBdate( new java.text.SimpleDateFormat("dd.mm.yyyy").parse("01.01.1980") ); Department dep = new Department( "ПИКО", "Кафедра Прикладной и Компьютерной Оптики" ); dep.getPersons().add( p ); OrganizationDAO dao = OrganizationDAO.getInstance(); dao.beginTransaction(); dao.savePerson( p ); dao.saveDepartment( dep ); dao.commit();


Слайд 11

Выбор всех сотрудников OrganizationDAO dao = OrganizationDAO.getInstance(); dao.beginTransaction(); List<Person> 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();


Слайд 12

Информация по Hibernate Настройка ORM на основе XML-конфигурации: http://docs.jboss.org/hibernate/stable/core/reference/en/html/index.html Настройка ORM на основе аннотаций: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/


Слайд 13

Задание 1 Создать консольное приложение с поддержкой библиотеки Hibernate. Добавить к классам из примеров класс Timesheet, связанный с классом Person (связь «многие-к-одному»). Класс должен содержать следующие поля: Дата (включая время) начала выполнения работы; Дата (включая время) окончания работы; Описание работы; Название проекта. В классе Test добавить для пользователя несколько записей об использовании рабочего времени. Произвести сохранение в БД, а затем чтение с выводом на консоль.


Слайд 14

Технологии JEE JEE – Java Enterprise Edition Включает следующие технологии: Сервлеты (Servlets); JSP (Java Server Pages); JSF (Java Server Faces); RMI (Remote Method Invocation); Веб-службы (Web Services)


Слайд 15

Сервлеты Работают под управлением контейнера сервлетов (Apache Tomcat, Sun Application Server, JBoss и др.); Состав: Дескриптор развертывания (файл web.xml); Класс, наследуемый от javax.servlet.http.HttpServlet


Слайд 16

Взаимодействие по протоколу HTTP Обозреватель отправляет стандартные запросы GET или POST на сервер. После обработки на сервере клиенту возвращается ответ (с указанием типа: text/html, application/xml, text/plain). При запросе типа GET на веб-сервере разбирается URL запрос и создается переменная окружения QUERY_STRING (например, a=1&b=2&c=3 для URL: http://localhost/cgi-bin/test.cgi?a=1&b=2&c=3) При запросах типа POST веб-сервер передает параметры запроса CGI-приложению через стандартный поток ввода.


Слайд 17

Особенности работы сервлета Интерфейсом для сервлетов служит javax.servlet.Servlet. Интерфейс объявляет следующие методы: void destroy() ServletConfig getServletConfig() String getServletInfo() void init() void service( ServletRequest, ServletResponse )


Слайд 18

Класс HttpServlet Абстрактный класс, позволяет реализовать веб-приложение, путем перегрузки методов: doPost( HttpServletRequest, HttpServletResponse ) doGet( HttpServletRequest, HttpServletResponse ) Параметры методов позволяют получить доступ к параметрам запроса (по именам) и выходному потоку для записи ответа.


Слайд 19

Пример сервлета 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("<html>"); out.println("<head>"); out.println("<title>Servlet TestServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet TestServlet at " + request.getContextPath () + "</h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }


Слайд 20

Быстрое создание сервлета в NetBeans Создаем новое веб-приложение: File / New project / Web application. Зададим Context Path как “test” Добавляем сервлет: Source Packages / New / Servlet… (назовем сервлет TestServlet, а url pattern – “/svt/*”) Раскомментируем содержание метода processRequest Развернем (deploy) сервлет на веб-сервере: <название проекта> / deploy Обратимся к сервлету через обозреватель по URL: http://localhost:8084/test/svt


Слайд 21

Содержание web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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-app_2_5.xsd"> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>svt.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/svt/*</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> </web-app>


Слайд 22

Обработка параметров 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);


Слайд 23

Перенаправление запросов Сервлеты могут перенаправлять запросы, например, другим сервлетам или на другие ресурсы данного веб-сервера. RequestDispatcher rd = request.getRequestDispatcher(“page.html”); В интерфейсе RequestDispatcher объявлены 2 метода. Метод для перенаправления запроса (с закрытием выходного потока) - void forward( ServletRequest request, ServletResponse response ); Метод для включение содержимого в текущий ответ, без закрытия потока - void include( ServletRequest request, ServletResponse response );


Слайд 24

Задание 2 Разработать веб-приложение для авторизации пользователя. Первая страница – форма для ввода имени и пароля. Вторая – сообщение об ошибке авторизации. Третья – приглашение для работы в системе при успешной авторизации. Форма авторизации Логин или пароль указаны не правильно Приглашение для работы в системе


×

HTML:





Ссылка: