Hibernate+jsp при поддержке сервлетов

Всем привет!
В этой статье я расскажу о том, как связать JSP с Hibernate при помощи сервлета. Я надеюсь, что вы умеете работать с Hibernate, если же нет, то настоятельно рекомендую прочитать эту статью. Также я надеюсь, что вы знакомы с сервлетами и хоть раз их успешно запускали.
Для того, чтобы у вас была такая же база данных в MySQL, вставьте туда следующий код:
CREATE SCHEMA `hero`;

CREATE TABLE `hero`.`heroes`
(
`idhero` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idhero`));
Создаём maven проект и вставляем следующие зависимости и не только:

<packaging>war</packaging> <properties> <hibernate.version>4.3.5.Final</hibernate.version> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> <!— https://mvnrepository.com/artifact/org.apache.commons.. —> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> 

Подключаемся к базе данных. Опять же: если вы не знаете, как это делается, то статья об этом и не только выше.
Затем подключаем web модуль.
Заходим в File,Project Structure вкладка modules. Передварительно удалите всё, что есть во вкладке modules(если оно там есть) нажав на -(красненький).Нажимаете на +(зелёный)
и добавьте web модуль

Дальше во вкладке Artifacts тоже удаляете все артефакты и добавляете новый +,Web Application:Exploded,From modules,OK

Дальше развертываем Hibernate и для того, чтобы было удобно, засуньте эту модель в папку model, которая находится в by, указав в этот путь при развертке Hibernate.
В папке by создайте папку util, а в ней класс HibernateUtil:

package by.util;  import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;   public class HibernateUtil {     private static SessionFactory sessionFactory=buildSessionFactory();      private static SessionFactory buildSessionFactory() {         try{             return new Configuration().configure().buildSessionFactory();         }catch (Exception e){             throw new ExceptionInInitializerError(e);         }     }      public static SessionFactory getSessionFactory() {         return sessionFactory;     } }  

Благодаря HibernateUtil мы можем создать специальный SessionFactory под наш проект.
В папке by создаём папку DAO, в ней класс DAOImple (мы не создаём интерфейс DAO, так как пример небольшой):

package by.DAO;  import by.model.HeroesEntity; import by.util.HibernateUtil; import org.hibernate.Query; import org.hibernate.Session;  import java.util.List; public class DAOImple {     public void saveHero(HeroesEntity heroesEntity){         Session session= HibernateUtil.getSessionFactory().openSession();         session.beginTransaction();         session.save(heroesEntity);         session.getTransaction().commit();         session.close();     }     public List<HeroesEntity> getAll(){         Session session=HibernateUtil.getSessionFactory().openSession();         session.beginTransaction();         List<HeroesEntity> list=session.createQuery("from HeroesEntity").list();         session.getTransaction().commit();         session.close();         return list;     }     public void update(HeroesEntity heroesEntity){         Session session=HibernateUtil.getSessionFactory().openSession();         session.beginTransaction();         session.update(heroesEntity);         session.getTransaction().commit();         session.close();     } public HeroesEntity getHeroById(int id){         Session session=HibernateUtil.getSessionFactory().openSession();         session.beginTransaction();         Query query= session.createQuery("from HeroesEntity where idhero=:id");         query.setInteger("id",id);         HeroesEntity heroesEntity= (HeroesEntity) query.uniqueResult();         session.getTransaction().commit();         session.close();         return heroesEntity; } public void deleteHeroes(int id){     Session session=HibernateUtil.getSessionFactory().openSession();     session.beginTransaction();     Query query=session.createQuery("from HeroesEntity where idhero=:id");     query.setInteger("id",id);     HeroesEntity heroesEntity= (HeroesEntity) query.uniqueResult();     session.delete(heroesEntity);     session.getTransaction().commit();     session.close(); } } 

Класс DAOImple нам нужен для того, чтобы работать с той информацией, что есть в базе данных.
В папке by создаём папку servlets, а в ней создаём сервлет(не класс!) SaveServlet (комментарии в коде):

package by.servlets;  import by.DAO.DAOImple; import by.model.HeroesEntity;  import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;  public class SaveServlet extends HttpServlet {     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         DAOImple daoImple=new DAOImple();         ////////////////////////////////////////         //INDEX.JSP         ////////////////////////////////////////         if(request.getParameter("add")!=null){//при нажатии на кнопку add             HeroesEntity heroesEntity=new HeroesEntity();//создаём экземпляр класса модели базы данных             heroesEntity.setIdhero(Integer.parseInt(request.getParameter("id")));//задаём ему id взятый из поля c именем id             heroesEntity.setName(request.getParameter("name"));//аналогично с прошлой строкой             daoImple.saveHero(heroesEntity);//сохраняем в базу данных полученный объект             request.setAttribute("list",daoImple.getAll());//создаём аттрибут который взял в себя всё что есть в базе данных             RequestDispatcher requestDispatcher=request.getRequestDispatcher("list.jsp");//перебрасываемся на list.jsp             requestDispatcher.forward(request,response);         }         if(request.getParameter("showAll")!=null){//при нажатии на кнопку showALL             request.setAttribute("list",daoImple.getAll());//создаём аттрибут который взял в себя всё что есть в базе данных             RequestDispatcher requestDispatcher=request.getRequestDispatcher("list.jsp");//перебрасываемся на list.jsp             requestDispatcher.forward(request,response);         }         ///////////////////////////////////////////////////         //LIST.JSP         ///////////////////////////////////////////////////         String action=request.getParameter("action");//создаём action который будет реагировать на те или иные действия         if(action.equalsIgnoreCase("update")){//если action отреагировал на update           request.setAttribute("hero",daoImple.getHeroById(Integer.parseInt(request.getParameter("idhero"))));//создаём атрибут который по id возвращает определённого HeroesEntity             RequestDispatcher requestDispatcher=request.getRequestDispatcher("update.jsp");////перебрасываемся на update.jsp             requestDispatcher.forward(request,response);         }         if(action.equalsIgnoreCase("delete")){//если action отреагировал на update             daoImple.deleteHeroes(Integer.parseInt(request.getParameter("idhero")));//удаляем по id             request.setAttribute("list",daoImple.getAll());//создаём аттрибут который взял в себя всё что есть в базе данных             RequestDispatcher requestDispatcher=request.getRequestDispatcher("list.jsp");//перебрасываемся на list.jsp             requestDispatcher.forward(request,response);         }     }     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         DAOImple daoImple = new DAOImple(); ////////////////////////////////// // UPDATE.JSP //////////////////////////////////         if (request.getParameter("update") != null) {//при нажатии на кнопку update             HeroesEntity heroesEntity = new HeroesEntity();//создаём экземпляр класса             heroesEntity.setIdhero(Integer.parseInt(request.getParameter("idhero")));//задаём id из поля idhero             heroesEntity.setName(request.getParameter("name"));//задаём name из поля name             daoImple.update(heroesEntity);//апдейтим             request.setAttribute("list", daoImple.getAll());//создаём аттрибут который взял в себя всё что есть в базе данных             RequestDispatcher requestDispatcher = request.getRequestDispatcher("list.jsp");//перебрасываемся на list.jsp             requestDispatcher.forward(request, response);         }     } }  

Регестрируем сервлет в web.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"          version="3.1">     <servlet>         <servlet-name>SaveServlet</servlet-name>         <servlet-class>by.servlets.SaveServlet</servlet-class>     </servlet>     <servlet-mapping>         <servlet-name>SaveServlet</servlet-name>         <url-pattern>/save</url-pattern>     </servlet-mapping> </web-app> 

В папке web создаём index.jsp стартовую страницу:

<%--   Created by IntelliJ IDEA.   User: УВД   Date: 29.05.2017   Time: 18:18   To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head>     <title>Title</title> </head> <body> <form method="get" action="/save">     <input type="text" name="id">     <input type="text" name="name">     <input type="submit" name="add" value="add">     <input type="submit" name="showAll" value="showAll"> </form> </body> </html> 

а так же list.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head>     <title>Title</title> </head> <body> <table>     <tr>         <td>id</td>         <td>name</td>     </tr>     <c:forEach items="${list}" var="list">         <tr>             <th>${list.idhero}</th>             <th>${list.name}</th>             <th><a href="/save?action=update&idhero=<c:out value="${list.idhero}"/>">update</a> </th>             <th><a href="/save?action=delete&idhero=${list.idhero}">delete</a> </th>         </tr>     </c:forEach> </table> </body> </html> 

и update.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head>     <title>Title</title> </head> <body> <form method="post" action="/save">         <input type="text" name="idhero" readonly="readonly" value="<c:out value="${hero.idhero}"/>">         <input type="text" name="name" value="<c:out value="${hero.name}"/>">     <input type="submit" value="ok" name="update"> </form> </body> </html> 

Дальше настраиваем TomCat:


Даём ему артефакт(можно просто нажать внизу на кнопку с красной лампочкой и названием Fix):

Я надеюсь что вам удалось запустить этот пример если же нет можете обратится ко мне в vk:ссылка
Этот пример на github:здесь
Удачи!
ссылка на оригинал статьи https://habrahabr.ru/post/329924/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *