Hibernate首个web工程

来源:互联网 发布:小米手环数据修改 编辑:程序博客网 时间:2024/05/01 23:55

Hibernate的前期学习的配置文件基本都是用最简单的配置,只需要:连接数据库,添加表的映射。因此具体的配置就不贴出来了。想了解的可以参考初学Hibernate
这里主要讲Hibernate Web项目的servlet类。
1.前期准备
首先建立一个servlet类EventManagerServlet,因为是最简单的只需要doGet 方法就行。

public class EventManagerServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {            //TODO            }}

1.设置响应编码
如果不设置的话,有可能回出现汉字乱码现象
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");

2.调用的方法
页面需要展示数据,把数据库中表的数据打印出来。为了方便
,就把后台代码和前台代码混合在一起了,实际操作中最好自己新建一个页面进行数据的展示

    /**     * 打印列表     */    @SuppressWarnings("unused")    private void listEvents(PrintWriter out,SimpleDateFormat dateFormatter){        @SuppressWarnings("deprecation")        List result = HibernateUtil.getSessionfactory().getCurrentSession().createCriteria(Event.class).list();        if (result.size() > 0) {            out.println("<h2>Events in database:</h2>");            out.println("<table border='1'>");            out.println("<tr>");            out.println("<th>Event title</th>");            out.println("<th>Event date</th>");            out.println("</tr>");            Iterator it = result.iterator();            while (it.hasNext()) {            Event event = (Event) it.next();            out.println("<tr>");            out.println("<td>" + event.getTitles() + "</td>");            System.out.println(event.getTitles());            out.println("<td>" + dateFormatter.format(event.getDate()) + "</td>");            out.println("</tr>");            }            out.println("</table>");            }    }

添加数据的时候需要一个表单来进行提交。表单提交的方法如下,一般需要注意action提交的路径。不过现在就一个页面,因此不需要具体的action路径,只需要在提交给当前页面就行,servlet里面会进行判断

    /**     * 打印表单     */    private void printEventForm(PrintWriter out ){        out.println("<h2>Add new event</h2>");        out.print("<form>");        out.print("Title:<input name = 'eventTitle' length = '50'/></br>");        out.print("Date(e.q.24.12.2009):<input name = 'eventDate' length = '10'/></br>");        out.print("<input type = 'submit' name = 'action' value = 'store'/>");        out.print("</form>");    }

当提交的数据的时候应该有个方法保存到 数据库中。

    /**     * 保存event     */    protected void createAndStoreEvent(String title,Date theDate){        Event event = new Event();        event.setId(UUID.randomUUID()+"");        event.setTitles(title);        event.setDate(theDate);        HibernateUtil.getSession().save(event);    }

3.doGet方法

protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {            //设置响应时的编码格式        response.setContentType("text/html;charset=utf-8");        request.setCharacterEncoding("utf-8");        //定义日期的格式        SimpleDateFormat dateFormatter = new SimpleDateFormat();        try {// begin 流程开始            //事物开始          HibernateUtil.getSessionfactory().getCurrentSession().beginTransaction();            // process 流程            // Write HTML header            PrintWriter out = response.getWriter();            out.println("<html><head><title>Event Manager</title></head><body>");            // Handle actions             //判断通过什么方式访问,如果是提交表单的话            if ( "store".equals(request.getParameter("action")) ) {            //获取action提交的信息,判断是否有数据            String eventTitle = request.getParameter("eventTitle");            String eventDate = request.getParameter("eventDate");            //无数据 提示信息            if ( "".equals(eventTitle) || "".equals(eventDate) ) {            out.println("<b><i>Please enter event title and date.</i></b>");            }            else {            //有数据则保存数据            createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));            out.println("<b><i>Added event.</i></b>");            }            }            // Print page            printEventForm(out);            listEvents(out, dateFormatter);            // Write HTML footer            out.println("</body></html>");            out.flush();            out.close();            // end            //事物结束          HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().commit();        } catch (Exception ex) {        //出现异常回滚事物          HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().rollback();            if (ServletException.class.isInstance(ex)) {                throw (ServletException) ex;            } else {                throw new ServletException(ex);            }        }    }

4.web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>Event Manager</servlet-name><servlet-class>org.grgbanking.servlet.EventManagerServlet</servlet-class></servlet><!-- 设置访问路径 --><servlet-mapping><servlet-name>Event Manager</servlet-name><url-pattern>/eventmanager</url-pattern></servlet-mapping></web-app>

5.运行
发布项目,可以采用tomcat来发布,通过下面这个路径访问,其中
/hibernate是你的项目名
/eventmanager是你在web.xml设置的访问路径
http://localhost:8080/hibernate/eventmanager

6.servlet完整的代码

package org.grgbanking.servlet;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.grgbanking.pojo.Event;import org.grgbanking.util.HibernateUtil;/** *  * @author cjyun * @Date 2016年11月23日 */public class EventManagerServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        request.setCharacterEncoding("utf-8");        SimpleDateFormat dateFormatter = new SimpleDateFormat();        try {// begin            HibernateUtil.getSessionfactory().getCurrentSession().beginTransaction();            // process            // Write HTML header            PrintWriter out = response.getWriter();            out.println("<html><head><title>Event Manager</title></head><body>");            // Handle actions            if ( "store".equals(request.getParameter("action")) ) {            String eventTitle = request.getParameter("eventTitle");            String eventDate = request.getParameter("eventDate");            if ( "".equals(eventTitle) || "".equals(eventDate) ) {            out.println("<b><i>Please enter event title and date.</i></b>");            }            else {            createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));            out.println("<b><i>Added event.</i></b>");            }            }            // Print page            printEventForm(out);            listEvents(out, dateFormatter);            // Write HTML footer            out.println("</body></html>");            out.flush();            out.close();            // end            HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().commit();        } catch (Exception ex) {            HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().rollback();            if (ServletException.class.isInstance(ex)) {                throw (ServletException) ex;            } else {                throw new ServletException(ex);            }        }    }    /**     * 打印表单     */    private void printEventForm(PrintWriter out ){        out.println("<h2>Add new event</h2>");        out.print("<form>");        out.print("Title:<input name = 'eventTitle' length = '50'/></br>");        out.print("Date(e.q.24.12.2009):<input name = 'eventDate' length = '10'/></br>");        out.print("<input type = 'submit' name = 'action' value = 'store'/>");        out.print("</form>");    }    /**     * 打印列表     */    @SuppressWarnings("unused")    private void listEvents(PrintWriter out,SimpleDateFormat dateFormatter){        @SuppressWarnings("deprecation")        List result = HibernateUtil.getSessionfactory().getCurrentSession().createCriteria(Event.class).list();        if (result.size() > 0) {            out.println("<h2>Events in database:</h2>");            out.println("<table border='1'>");            out.println("<tr>");            out.println("<th>Event title</th>");            out.println("<th>Event date</th>");            out.println("</tr>");            Iterator it = result.iterator();            while (it.hasNext()) {            Event event = (Event) it.next();            out.println("<tr>");            out.println("<td>" + event.getTitles() + "</td>");            System.out.println(event.getTitles());            out.println("<td>" + dateFormatter.format(event.getDate()) + "</td>");            out.println("</tr>");            }            out.println("</table>");            }    }    /**     * 保存event     */    protected void createAndStoreEvent(String title,Date theDate){        Event event = new Event();        event.setId(UUID.randomUUID()+"");        event.setTitles(title);        event.setDate(theDate);        HibernateUtil.getSession().save(event);    }}

HibernateUtil工具类为

package org.grgbanking.util;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/** *  * @author cjyun * @date 2016年11月22日 */public class HibernateUtil {    private static final SessionFactory sessionFactory = buildSessionFactory();    private static SessionFactory buildSessionFactory() {        try {            return new Configuration().configure().buildSessionFactory();        } catch (Throwable  ex) {            System.err.println("Initial SssionFactory creation failed." + ex);            throw new ExceptionInInitializerError(ex);        }    }    public static SessionFactory getSessionfactory() {        return sessionFactory;    }}
0 1