-Поиск по дневнику

Поиск сообщений в rss_rss_hh_new

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2011
Записей:
Комментариев:
Написано: 51


[recovery mode] Hibernate+jsp при поддержке сервлетов

Среда, 31 Мая 2017 г. 16:48 + в цитатник
Всем привет!
В этой статье я расскажу о том, как связать 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 проект и вставляем следующие зависимости и не только:

war

4.3.5.Final



javax.servlet
servlet-api
3.0-alpha-1
provided


commons-fileupload
commons-fileupload
1.2.2


commons-io
commons-io
2.4


org.hibernate
hibernate-core
${hibernate.version}


org.hibernate
hibernate-entitymanager
${hibernate.version}


javaee
javaee-api
5


mysql
mysql-connector-java
5.1.38


javax
javaee-web-api
6.0
provided



org.apache.commons
commons-lang3
3.4


jstl
jstl
1.2



Подключаемся к базе данных. Опять же: если вы не знаете, как это делается, то статья об этом и не только выше.
Затем подключаем 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 getAll(){
        Session session=HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        List 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:


    
        SaveServlet
        by.servlets.SaveServlet
    
    
        SaveServlet
        /save
    


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




    



а так же list.jsp:




    


id name
${list.idhero} ${list.name} ">update delete

и update.jsp:




    


"> ">

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


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

Я надеюсь что вам удалось запустить этот пример если же нет можете обратится ко мне в vk:ссылка
Этот пример на github:здесь
Удачи!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/329924/

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку