サーブレットをサポートするHibernate + jsp

みなさんこんにちは! この記事では、サーブレットを使用してJSPをHibernateに関連付ける方法について説明します。 Hibernateで作業できることを願っています。そうでない場合は、この記事を読むことを強くお勧めします 。 また、サーブレットに精通し、少なくとも1回は正常に実行できることを願っています。



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モジュールを接続します。



[ファイル]、[プロジェクト構造]タブのモジュールに移動します。 -(赤)をクリックして、モジュールタブにあるすべてのものを削除します(ある場合)。

Webモジュールを追加します。







さらに、[アーティファクト]タブで、すべてのアーティファクトを削除し、新しい+、Webアプリケーションを追加します:分解、モジュールから、OK:







次に、Hibernateをデプロイします。Hibernateをデプロイするときに、このパスを指す、byにあるモデルフォルダーにこのモデルを配置すると便利です。



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」という名前の付いた下のボタンをクリックするだけです)。







この例を実行できたことを願っています。 この例はgithub: hereにあります



頑張って



All Articles