满屏幕的线程Hibernate结合Servlet…

  发觉Hibernate每次重启都会开一堆线程来处理,所以,对于最开始通过xml文件启动hibernate的语句,一定要用单例模式。何为单例模式,就是用在类里面,用static:
public class StudentTest {
    private static Configuration cfg;
    private static StandardServiceRegistryBuilder ssrb;
    private static ServiceRegistry service;
    private static SessionFactory factory;
    private static int count=0;
    StudentTest(){
        if(StudentTest.cfg==null){
            StudentTest.cfg = new Configuration().configure();
            StudentTest.ssrb = new StandardServiceRegistryBuilder()
                .applySettings(cfg.getProperties());
            StudentTest.service = ssrb.build();
            //SessionFactory factory = cfg.buildSessionFactory(service);
            StudentTest.factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
                    .applySettings(cfg.getProperties()).build());
        
        }else{}
    }
  不然就等着GG(不用的话)……
  这里就不列完整的servlet工程了,单独列出servlet文件,我们可以看看具体怎么用hibernate的:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// @author flash胜龙
public class HelloWorld extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private String message;
    @Override public void init() throws ServletException {
        message = "Hello World";
    }
    @Override public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html");
        // 实际的逻辑是在这里
        
        StudentTest st = new StudentTest();
        String r = st.get();
        
        PrintWriter out = response.getWriter();
        out.println("<h1>" + message + "</h1>");
        out.println("<h4>" + r + "</h4>");
    }
    @Override public void destroy() {
        // 什么也不做
    }
}
  没错,就是红字部分那么简单。那么简单有问题吗?当然有!如果不用单例模式,则会是这样的:
满屏幕的线程Hibernate结合Servlet后
  每刷新一次页面,立马多出4个线程(如果不用C3P0的线程池管理,则多出1个)。再多刷几次页面,线程就挤爆你的机器了。所以一定要用单例模式,cfg啥的生成一次就可以了。从这里也可以体现出,有个帮你管类的工厂是多么地重要。这就体现了IOC(控制反转)的重要性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值