Hibernate首个web工程

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值