在 课程中,读取 hibernate的配置文件 当然是硬代码的 方式读取 的,课程中的是使用 一个 Hibernate 的工具类 来读取 src 目录下的 配置文件
package com.imooc.page;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class HibernateSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static org.hibernate.SessionFactory sessionFactory;
private static Configuration configuration = new Configuration();
private static ServiceRegistry serviceRegistry;
static {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}
}
第一种的<url-pattern>/HibernateServlet</url-pattern>路径不对,应该为<url-pattern>/hibernate/HibernateServlet</url-pattern>。路径配置正确以后,看看webRooot或者webContent根目录下是否有hibernate文件夹,hibernate文件夹中是否有hibernateStudent.jsp文件。<url-pattern>/hibernate/HibernateServlet</url-pattern>中的/hibernate对应的路径是webRooot根目录下hibernate文件夹,/HibernateServlet对应的是路径对在hibernate文件夹中h得ibernateStudent.jsp文件进行操作。若有的话,启动tomcat服务器,在浏览器上输入:http://localhost:8080/pager/hibernate/hibernateStudent.jsp即可显示。tomcat的端口默认为8080,前提是不要改动端口号。
struts2--hibernate--mybatis--spring--springMVC
这样可以把公共的抽出来封装成一个接口,这样以后改的时候就容易了
没有加入java驱动mysql的jar包。
在webRoot/WEB-INF/lib/下加入驱动包
mysql-connector-java-5.1.26-bin.jar
项目报错有好多种,是404、是500,是200......
报错200(成功)服务器已成功处理了请求,
报错是404,则是路径不对,需要重新进行路径的检查,
报错是500服务器内部错误(Internal server error)主要是由于IWAM账号的密码错误造成的。
详情请看:https://zhidao.baidu.com/question/209166744.html
这个问题错误可能引起的地方太多,解决步骤:
1、检查一下你的数据库的信息都对了没;
2、检查一下HibernateStudentDaoImpl.java文件中的hql和countHql拼接是否正确;(注意占位符前后不能有空格)
(提示:主要根据错误信息自己慢慢找。)
注意:
// 这个是版本4中的用法
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// 这个是版本5中的用法
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
因为countResult.get(0)取到的是对象,而不是基本类型像(int,long,double,float等等)所以先转换为对象Number,在通过对象Number获得值,一般来说不会让对象强制类型转换为基本类型的
那你用了绑定SCROLL事件了吗?用了的话就检查一下。request,response都有可能出错啊,具体也不好说。
我也是醉了
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
不一定要放在dao层,可以直接放在Service层,并不是所有的代码都需要写dao层和service层,一般简单的业务只要写service层就可以解决问题。