您的位置:首页 > Web前端 > JavaScript

JSP+Hibernate入门级实例--留言系统

2007-07-19 14:52 441 查看
这是个用JSP+Hibernate编写的非常简单的留言系统例子,是个准三层结构(因为为了节省时间着重介绍hibernate部分,省去的 service层,转而使用jsp页面进行业务处理,但并不是在jsp页面上过多的编写java代码,而是使用专门的jsp作为业务处理层)
开发工具:MyEclipse+Mysql

目录结构如下:

config(配置类)

BeanConfig.java
MessageConfig.java

constants(常量类)

Constants.java

dao(数据访问类)

hibernate
MessageDAO.java
UserDAO.java
IMessageDAO.java
IUserDAO.java

exception(异常类)
MessageAuthorityException.java
MessageDAOException.java
MessageException.java

model(模型类)
Message.hbm.xml
Message.java
User.hbm.xml
User.java

sql (数据库脚本)
scrip.sql

util(工具类)
DaoFactory.java
HibernateDAO.java
HibernateFilter.java
HibernateUtil.java

BeanConfig.java


package cn.hxex.message.config;




import org.apache.commons.lang.builder.ReflectionToStringBuilder;




import cn.hxex.message.exception.MessageException;




public class BeanConfig




...{


private String id;


private String type;






public String getId() ...{


return id;


}




public void setId(String id) ...{


this.id = id;


}






public String getType() ...{


return type;


}




public void setType(String type) ...{


this.type = type;


}




private Object instance;


public Object getInstance()




...{


if( null!=instance ) return instance;




try




...{


Class cls = Class.forName( getType() );


instance = cls.newInstance();


return instance;


}


catch( Exception ex )




...{


throw new MessageException( "Couldn't find class:" + getType() );


}


}




public String toString()




...{


return ReflectionToStringBuilder.toString( this );


}


}



MessageConfig


package cn.hxex.message.config;




import java.util.Hashtable;




import org.apache.commons.lang.builder.ReflectionToStringBuilder;




import cn.hxex.message.exception.MessageException;






/** *//**


* 系统配置信息类


*/


public class MessageConfig




...{


public static Hashtable beans;






/** *//**


* 构造函数


*/


public MessageConfig()




...{


beans = new Hashtable();


}






/** *//**


* 增加一个BeanConfig对象


* @param bean


*/


public void addBean(BeanConfig bean)




...{


beans.put(bean.getId(), bean);


}






/** *//**


* 得到一个DAO接口对象的实例


* @param name DAO接口对象的名称


* @return 指定DAO接口的实现类的实例


*/


public Object getBean(String name)




...{


BeanConfig config = (BeanConfig) beans.get(name);




if (config == null)




...{


throw new MessageException("Couldn't find the bean: " + name);


}




return config.getInstance();


}




public String toString()




...{


return ReflectionToStringBuilder.toString(this);


}


}



Constants


package cn.hxex.message.constants;






public class Constants ...{


public static final String SESSION_USER = "cn.hxex.message.user";


}



IMessageDAO


package cn.hxex.message.dao;




import java.util.List;




import cn.hxex.message.model.Message;




public interface IMessageDAO




...{


public void saveMessage( Message message );


public void updateMessage( Message message );


public List getMessages( );


public void deleteMessage( String id, String userId );


public Message getMessage( String id );


}



IUserDAO


package cn.hxex.message.dao;




import cn.hxex.message.model.User;




public interface IUserDAO




...{


public void saveUser( User user );


public User getUser( String username );


public User getUserById( String id );


}



MessageDAO


package cn.hxex.message.dao.hibernate;




import java.util.List;




import cn.hxex.message.dao.IMessageDAO;


import cn.hxex.message.exception.MessageDAOException;


import cn.hxex.message.model.Message;


import cn.hxex.message.util.HibernateDAO;






/** *//**


* IMessageDAO接口的Hibernate实现


*/


public class MessageDAO extends HibernateDAO implements IMessageDAO




...{






/** *//**


* 保存留言信息


*


* @param message


* 被保存的留言对象


*/


public void saveMessage(Message message)




...{


super.saveObject(message);


}






/** *//**


* 得到所有的留言信息


*


* @return 返回所有的留言信息


*/


public List getMessages()




...{


String hsql = "from Message";


return super.getObjects(hsql);


}






/** *//**


* 删除留言信息


*


* @param id


* 要删除的留言信息的ID值


* @param userId


* 执行删除操作的用户ID


*/


public void deleteMessage(String id, String userId)




...{


Message msg = getMessage(id);


if (msg == null)




...{


throw new MessageDAOException("找不到你所要删除的留言!");


}




if (!msg.getUser().getId().equals(userId))




...{


throw new MessageDAOException("你不能删除别人的留言!");


}




deleteObject(msg);


}






/** *//**


* 得到留言信息


*


* @param id


* 留言的ID值


* @return 指定ID值得留言对象


*/


public Message getMessage(String id)




...{


return (Message) getObject(Message.class, id);


}






/** *//**


* 更新留言信息


*


* @param message


* 欲更新的留言对象


*/


public void updateMessage(Message message)




...{


updateObject(message);


}




}



UserDAO


package cn.hxex.message.dao.hibernate;




import cn.hxex.message.dao.IUserDAO;


import cn.hxex.message.exception.MessageDAOException;


import cn.hxex.message.model.User;


import cn.hxex.message.util.HibernateDAO;






/** *//**


* IUserDAO接口的Hibernate实现


*/


public class UserDAO extends HibernateDAO implements IUserDAO




...{






/** *//**


* 保存用户信息到数据库


* @param user 被保存的用户对象


*/


public void saveUser(User user)




...{


if (user == null)


return;




User u = getUser(user.getName());


if (u != null)


throw new MessageDAOException("用户名已经存在,请使用其它用户名!");




saveObject(user);


}






/** *//**


* 得到用户对象


* @param username 用户的登录名


* @return 指定登录名的用户对象


*/


public User getUser(String username)




...{


User u = (User) getObject("from User u where u.name = '" + username


+ "'");


return u;


}






/** *//**


* 得到用户对象的信息


* @param id 用户的ID值


* @return 指定的用户信息


*/


public User getUserById(String id)




...{


return (User) getObject(User.class, id);


}




}



MessageAuthorityException


package cn.hxex.message.exception;




public class MessageAuthorityException extends MessageException




...{


private static final long serialVersionUID = 1L;




public MessageAuthorityException(String message)




...{


super(message);


}




}



MessageDAOException


package cn.hxex.message.exception;




public class MessageDAOException extends MessageException




...{




private static final long serialVersionUID = 2L;




public MessageDAOException(String message)




...{


super(message);


}






}



MessageException


package cn.hxex.message.exception;




public class MessageException extends RuntimeException




...{






/** *//**


* Generated serialVersionUID


*/


private static final long serialVersionUID = 6905209869067708768L;




public MessageException( String message )




...{


super( message );


}


}



Message.hbm.xml


<?xml version="1.0"?>


<!DOCTYPE hibernate-mapping PUBLIC


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"


"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="cn.hxex.message.model">




<class name="Message" table="MESSAGE">




<id name="id" column="ID" type="string">


<generator class="uuid.hex"/>


</id>




<property name="title" column="TITLE"/>




<property name="content" column="CONTENT" />




<many-to-one name="user" column="USER_ID"/>




</class>




</hibernate-mapping>

User.hbm.xml


<?xml version="1.0"?>


<!DOCTYPE hibernate-mapping PUBLIC


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"


"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="cn.hxex.message.model">




<class name="User" table="USERINFO">




<id name="id" column="ID" type="string">


<generator class="uuid.hex"/>


</id>




<property name="name" column="NAME"/>




<property name="password" column="PASSWORD" />




<set name="messages" inverse="true" cascade="save-update" >


<key column="USER_ID"/>


<one-to-many class="Message"/>


</set>




</class>




</hibernate-mapping>

Message


package cn.hxex.message.model;




import org.apache.commons.lang.builder.ReflectionToStringBuilder;






public class Message ...{




private String id;


private String title;


private String content;


private User user;




public String getContent()




...{


return content;


}


public void setContent(String content)




...{


this.content = content;


}






public String getId() ...{


return id;


}


public void setId(String id)




...{


this.id = id;


}




public String getTitle()




...{


return title;


}


public void setTitle(String title)




...{


this.title = title;


}




public User getUser()




...{


return user;


}


public void setUser(User user)




...{


this.user = user;


}




public String toString()




...{


return ReflectionToStringBuilder.toString( this );


}




public int hashcode()




...{


if( id!=null )


this.id.hashCode();


return 0;


}




public boolean equals( Object obj )




...{


if( obj==null ) return false;




if( this==obj ) return true;




if( obj instanceof Message )




...{


if( this.id!=null )


return this.id.equals( ((Message)obj).getId() );


}


return false;


}


}



User


package cn.hxex.message.model;




import java.util.Set;




import org.apache.commons.lang.builder.ReflectionToStringBuilder;








public class User ...{




private String id;


private String name;


private String password;


private Set messages;






public String getId() ...{


return id;


}




public void setId(String id) ...{


this.id = id;


}






public Set getMessages() ...{


return messages;


}




public void setMessages(Set messages) ...{


this.messages = messages;


}






public String getName() ...{


return name;


}




public void setName(String name) ...{


this.name = name;


}






public String getPassword() ...{


return password;


}




public void setPassword(String password) ...{


this.password = password;


}




public String toString()




...{


return ReflectionToStringBuilder.toString( this );


}




public boolean equals( Object obj )




...{


if( obj==null ) return false;




if( this==obj ) return true;




if( obj instanceof User )




...{


if( this.id!=null )


return this.id.equals( ((User)obj).getId() );


}


return false;


}


}




create table userinfo(


id varchar(32) not null,


name varchar(32) not null,


password varchar(32) not null,


constraint userinfo_pk primary key(id),


constraint userinfo_unique_name unique(name)


);






create table message(


id varchar(32) not null,


title varchar(32) not null,


content varchar(2000),


user_id varchar(32),


constraint message_pl primary key(id),


constraint message_user_fk foreign key(user_id) references userinfo(id)


) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

DaoFactory


package cn.hxex.message.util;




import java.io.IOException;


import java.io.InputStream;




import org.apache.commons.digester.Digester;


import org.apache.commons.logging.Log;


import org.apache.commons.logging.LogFactory;


import org.xml.sax.SAXException;




import cn.hxex.message.config.MessageConfig;




public class DaoFactory




...{


private static Log log = LogFactory.getLog(DaoFactory.class);




public static final MessageConfig messageConfig;




static




...{


Digester digester = new Digester();


digester.setValidating( false );




digester.addObjectCreate( "config", "cn.hxex.message.config.MessageConfig" );


digester.addSetProperties( "config" );




digester.addObjectCreate( "config/bean", "cn.hxex.message.config.BeanConfig" );


digester.addSetProperties( "config/bean" );


digester.addSetNext( "config/bean", "addBean", "cn.hxex.message.config.BeanConfig" );




ClassLoader classLoader = Thread.currentThread().getContextClassLoader();


InputStream in = classLoader.getResourceAsStream( "MessageConfig.xml" );


MessageConfig config = null;




try ...{


if( in!=null )


config = (MessageConfig)digester.parse( in );




} catch (IOException e) ...{


e.printStackTrace();




} catch (SAXException e) ...{


e.printStackTrace();


}


messageConfig = config;


}




public static Object getDao( String name )




...{


if( null==messageConfig ) return null;




return messageConfig.getBean( name );


}


}



HibernateDAO


package cn.hxex.message.util;




import java.util.List;






/** *//**


* 使用Hibernate实现DAO的基础类


* 包括了持久化操作的一些基础方法


*/


public class HibernateDAO




...{




/** *//**


* 保存对象信息到数据库


* @param obj 需要进行持久化操作的对象


*/


public void saveObject(Object obj)




...{


HibernateUtil.getCurrentSession().save(obj);


}






/** *//**


* 更新持久化对象


* @param obj 需要更新的对象


*/


public void updateObject(Object obj)




...{


HibernateUtil.getCurrentSession().update(obj);


}






/** *//**


* 使用HQL语句进行查询


* @param hsql 查询语句


* @return 符合条件的对象集合


*/


public List getObjects(String hsql)




...{


List result = HibernateUtil.getCurrentSession().createQuery(hsql)


.list();


return result;


}






/** *//**


* 使用HQL语句进行对象的查询


* @param hsql 查询语句


* @return 符合条件的对象


*/


public Object getObject(String hsql)




...{


Object result = HibernateUtil.getCurrentSession().createQuery(hsql)


.uniqueResult();


return result;


}






/** *//**


* 根据ID值得到持久化的对象


* @param cls 对象的类型


* @param id ID值


* @return 指定ID的对象


*/


public Object getObject(Class cls, String id)




...{


Object result = HibernateUtil.getCurrentSession().get(cls, id);


return result;


}






/** *//**


* 删除对象信息


* @param obj 被删除的对象


*/


public void deleteObject(Object obj)




...{


HibernateUtil.getCurrentSession().delete(obj);


}


}



HibernateFilter


package cn.hxex.message.util;




import java.io.IOException;




import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;




import org.apache.commons.logging.Log;


import org.apache.commons.logging.LogFactory;




public class HibernateFilter implements Filter




...{


private static Log log = LogFactory.getLog(HibernateFilter.class);






public void init(FilterConfig filterConfig) throws ServletException ...{


log.info("Servlet filter init, now opening/closing a Session for each request.");


}




public void doFilter(ServletRequest request,


ServletResponse response,


FilterChain chain)


throws IOException, ServletException




...{


// There is actually no explicit "opening" of a Session, the


// first call to HibernateUtil.beginTransaction() in control


// logic (e.g. use case controller/event handler, or even a


// DAO factory) will get a fresh Session.


try




...{


HibernateUtil.beginTransaction();




request.setCharacterEncoding( "gb2312" );




chain.doFilter(request, response);


// Commit any pending database transaction.


HibernateUtil.commitTransaction();




}


catch (ServletException ex)




...{


log.debug("Rolling back the database transaction.");


HibernateUtil.rollbackTransaction(); // Also closes the Session


// Just rollback and let others handle the exception, e.g. for display


throw ex;


}


catch (IOException ex)




...{


log.debug("Rolling back the database transaction.");


HibernateUtil.rollbackTransaction(); // Also closes the Session


// Just rollback and let others handle the exception, e.g. for display


throw ex;


}


finally




...{


// No matter what happens, close the Session.


HibernateUtil.closeSession();


}


}






public void destroy() ...{}


}



HibernateUtil


package cn.hxex.message.util;




import javax.naming.InitialContext;


import javax.naming.NamingException;




import org.apache.commons.logging.Log;


import org.apache.commons.logging.LogFactory;


import org.hibernate.Interceptor;


import org.hibernate.Session;


import org.hibernate.SessionFactory;


import org.hibernate.Transaction;


import org.hibernate.cfg.Configuration;


import org.hibernate.cfg.Environment;




public class HibernateUtil




...{




private static Log log = LogFactory.getLog(HibernateUtil.class);




private static final String INTERCEPTOR_CLASS = "hibernate.util.interceptor_class";




private static Configuration configuration;


private static SessionFactory sessionFactory;


private static ThreadLocal threadSession = new ThreadLocal();


private static ThreadLocal threadTransaction = new ThreadLocal();




private static boolean useThreadLocal = true;






static ...{


// Create the initial SessionFactory from the default configuration files




try ...{




// Replace with Configuration() if you don't use annotations or JDK 5.0


//configuration = new AnnotationConfiguration();


configuration = new Configuration();




// Read not only hibernate.properties, but also hibernate.cfg.xml


configuration.configure();




// Assign a global, user-defined interceptor with no-arg constructor


String interceptorName = configuration.getProperty(INTERCEPTOR_CLASS);




if (interceptorName != null) ...{


Class interceptorClass =


HibernateUtil.class.getClassLoader().loadClass(interceptorName);


Interceptor interceptor = (Interceptor)interceptorClass.newInstance();


configuration.setInterceptor(interceptor);


}




// Disable ThreadLocal Session/Transaction handling if CMT is used


if (org.hibernate.transaction.CMTTransactionFactory.class.getName()


.equals( configuration.getProperty(Environment.TRANSACTION_STRATEGY) ) )


useThreadLocal = false;






if (configuration.getProperty(Environment.SESSION_FACTORY_NAME) != null) ...{


// Let Hibernate bind it to JNDI


configuration.buildSessionFactory();




} else ...{


// or use static variable handling


sessionFactory = configuration.buildSessionFactory();


}






} catch (Throwable ex) ...{


// We have to catch Throwable, otherwise we will miss


// NoClassDefFoundError and other subclasses of Error


log.error("Building SessionFactory failed.", ex);


throw new ExceptionInInitializerError(ex);


}


}






/** *//**


* Returns the original Hibernate configuration.


*


* @return Configuration


*/




public static Configuration getConfiguration() ...{


return configuration;


}






/** *//**


* Returns the global SessionFactory.


*


* @return SessionFactory


*/




public static SessionFactory getSessionFactory() ...{


SessionFactory sf = null;


String sfName = configuration.getProperty(Environment.SESSION_FACTORY_NAME);




if ( sfName != null) ...{


log.debug("Looking up SessionFactory in JNDI.");




try ...{


sf = (SessionFactory) new InitialContext().lookup(sfName);




} catch (NamingException ex) ...{


throw new RuntimeException(ex);


}




} else ...{


sf = sessionFactory;


}


if (sf == null)


throw new IllegalStateException("SessionFactory not available.");


return sf;


}






/** *//**


* Closes the current SessionFactory and releases all resources.


* <p>


* The only other method that can be called on HibernateUtil


* after this one is rebuildSessionFactory(Configuration).


*/




public static void shutdown() ...{


log.debug("Shutting down Hibernate.");


// Close caches and connection pools


getSessionFactory().close();




// Clear static variables


configuration = null;


sessionFactory = null;




// Clear ThreadLocal variables


threadSession.set(null);


threadTransaction.set(null);


}








/** *//**


* Rebuild the SessionFactory with the static Configuration.


* <p>


* This method also closes the old SessionFactory before, if still open.


* Note that this method should only be used with static SessionFactory


* management, not with JNDI or any other external registry.


*/




public static void rebuildSessionFactory() ...{


log.debug("Using current Configuration for rebuild.");


rebuildSessionFactory(configuration);


}






/** *//**


* Rebuild the SessionFactory with the given Hibernate Configuration.


* <p>


* HibernateUtil does not configure() the given Configuration object,


* it directly calls buildSessionFactory(). This method also closes


* the old SessionFactory before, if still open.


*


* @param cfg


*/




public static void rebuildSessionFactory(Configuration cfg) ...{


log.debug("Rebuilding the SessionFactory from given Configuration.");




synchronized(sessionFactory) ...{


if (sessionFactory != null && !sessionFactory.isClosed())


sessionFactory.close();


if (cfg.getProperty(Environment.SESSION_FACTORY_NAME) != null)


cfg.buildSessionFactory();


else


sessionFactory = cfg.buildSessionFactory();


configuration = cfg;


}


}






/** *//**


* Retrieves the current Session local to the thread.


* <p/>


* If no Session is open, opens a new Session for the running thread.


* If CMT is used, returns the Session bound to the current JTA


* container transaction. Most other operations on this class will


* then be no-ops or not supported, the container handles Session


* and Transaction boundaries, ThreadLocals are not used.


*


* @return Session


*/




public static Session getCurrentSession() ...{




if (useThreadLocal) ...{


Session s = (Session) threadSession.get();




if (s == null) ...{


log.debug("Opening new Session for this thread.");


s = getSessionFactory().openSession();


threadSession.set(s);


}


return s;




} else ...{


return getSessionFactory().getCurrentSession();


}


}






/** *//**


* Closes the Session local to the thread.


* <p>


* Is a no-op (with warning) if called in a CMT environment. Should be


* used in non-managed environments with resource local transactions, or


* with EJBs and bean-managed transactions.


*/




public static void closeSession() ...{




if (useThreadLocal) ...{


Session s = (Session) threadSession.get();


threadSession.set(null);


Transaction tx = (Transaction) threadTransaction.get();


if (tx != null && (!tx.wasCommitted() || !tx.wasRolledBack()) )


throw new IllegalStateException("Closing Session but Transaction still open!");




if (s != null && s.isOpen()) ...{


log.debug("Closing Session of this thread.");


s.close();


}




} else ...{


log.warn("Using CMT/JTA, intercepted superfluous close call.");


}


}






/** *//**


* Start a new database transaction.


* <p>


* Is a no-op (with warning) if called in a CMT environment. Should be


* used in non-managed environments with resource local transactions, or


* with EJBs and bean-managed transactions. In both cases, it will either


* start a new transaction or join the existing ThreadLocal or JTA


* transaction.


*/




public static void beginTransaction() ...{




if (useThreadLocal) ...{


Transaction tx = (Transaction) threadTransaction.get();




if (tx == null) ...{


log.debug("Starting new database transaction in this thread.");


tx = getCurrentSession().beginTransaction();


threadTransaction.set(tx);


}




} else ...{


log.warn("Using CMT/JTA, intercepted superfluous tx begin call.");


}


}






/** *//**


* Commit the database transaction.


* <p>


* Is a no-op (with warning) if called in a CMT environment. Should be


* used in non-managed environments with resource local transactions, or


* with EJBs and bean-managed transactions. It will commit the


* ThreadLocal or BMT/JTA transaction.


*/




public static void commitTransaction() ...{




if (useThreadLocal) ...{


Transaction tx = (Transaction) threadTransaction.get();




try ...{


if ( tx != null && !tx.wasCommitted()




&& !tx.wasRolledBack() ) ...{


log.debug("Committing database transaction of this thread.");


tx.commit();


}


threadTransaction.set(null);




} catch (RuntimeException ex) ...{


log.error(ex);


rollbackTransaction();


throw ex;


}




} else ...{


log.warn("Using CMT/JTA, intercepted superfluous tx commit call.");


}


}






/** *//**


* Rollback the database transaction.


* <p>


* Is a no-op (with warning) if called in a CMT environment. Should be


* used in non-managed environments with resource local transactions, or


* with EJBs and bean-managed transactions. It will rollback the


* resource local or BMT/JTA transaction.


*/




public static void rollbackTransaction() ...{




if (useThreadLocal) ...{


Transaction tx = (Transaction) threadTransaction.get();




try ...{


threadTransaction.set(null);




if ( tx != null && !tx.wasCommitted() && !tx.wasRolledBack() ) ...{


log.debug("Tyring to rollback database transaction of this thread.");


tx.rollback();


log.debug("Database transaction rolled back.");


}




} catch (RuntimeException ex) ...{


throw new RuntimeException("Might swallow original cause, check ERROR log!", ex);




} finally ...{


closeSession();


}




} else ...{


log.warn("Using CMT/JTA, intercepted superfluous tx rollback call.");


}


}






/** *//**


* Reconnects a Hibernate Session to the current Thread.


* <p>


* Unsupported in a CMT environment.


*


* @param session The Hibernate Session to be reconnected.


*/




public static void reconnect(Session session) ...{




if (useThreadLocal) ...{


log.debug("Reconnecting Session to this thread.");


session.reconnect();


threadSession.set(session);




} else ...{


log.error("Using CMT/JTA, intercepted not supported reconnect call.");


}


}






/** *//**


* Disconnect and return Session from current Thread.


*


* @return Session the disconnected Session


*/




public static Session disconnectSession() ...{




if (useThreadLocal) ...{


Transaction tx = (Transaction) threadTransaction.get();


if (tx != null && (!tx.wasCommitted() || !tx.wasRolledBack()) )


throw new IllegalStateException("Disconnecting Session but Transaction still open!");


Session session = getCurrentSession();


threadSession.set(null);




if (session.isConnected() && session.isOpen()) ...{


log.debug("Disconnecting Session from this thread.");


session.disconnect();


}


return session;




} else ...{


log.error("Using CMT/JTA, intercepted not supported disconnect call.");


return null;


}


}






/** *//**


* Register a Hibernate interceptor with the current SessionFactory.


* <p>


* Every Session opened is opened with this interceptor after


* registration. Has no effect if the current Session of the


* thread is already open, effective on next close()/getCurrentSession().


* <p>


* Attention: This method effectively restarts Hibernate. If you


* need an interceptor active on static startup of HibernateUtil, set


* the <tt>hibernateutil.interceptor</tt> system property to its


* fully qualified class name.


*/




public static void registerInterceptorAndRebuild(Interceptor interceptor) ...{


log.debug("Setting new global Hibernate interceptor and restarting.");


configuration.setInterceptor(interceptor);


rebuildSessionFactory();


}






public static Interceptor getInterceptor() ...{


return configuration.getInterceptor();


}


}




<?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE hibernate-configuration PUBLIC


"-//Hibernate/Hibernate Configuration DTD 3.0//EN"


"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">




<!-- Generated by MyEclipse Hibernate Tools. -->


<hibernate-configuration>




<session-factory>


<property name="hibernate.connection.username">root</property>


<property name="hibernate.connection.url">


jdbc:mysql://localhost:3306/guestmessagebook


</property>


<property name="hibernate.dialect">


org.hibernate.dialect.MySQLDialect


</property>


<property name="myeclipse.connection.profile">mysql</property>


<property name="hibernate.connection.password">1234</property>


<property name="hibernate.connection.driver_class">


com.mysql.jdbc.Driver


</property>


<property name="show_sql">true</property>


<mapping resource="cn/hxex/message/model/Message.hbm.xml" />


<mapping resource="cn/hxex/message/model/User.hbm.xml" />




</session-factory>




</hibernate-configuration>

MessageConfig.xml


<?xml version="1.0" encoding="UTF-8"?>


<config>


<bean id="userDao"


type="cn.hxex.message.dao.hibernate.UserDAO"/>


<bean id="messageDao"


type="cn.hxex.message.dao.hibernate.MessageDAO"/>


</config>



index.jsp


<%@ page contentType="text/html;charset=gb2312" %>


<%@ page isErrorPage="true" %>


<html>


<head>


<title>欢迎使用留言板系统!</title>


<meta http-equiv="content-type" content="text/html;charset=gb2312">


<link rel="stylesheet" href="css/common.css">


<script language="Javascript" src="pub/js/common.js"></script>


<script language="javascript">




function checkValues(form)...{


var checked=[[form.name,"请输入用户名"],[form.password,"请输入密码"]];




if(!isRequired(checked))...{


return false;


}


return true;


}




function regist()...{


window.location="registinput.jsp";


}


</script>


</head>


<body>


<center>


<h1>欢迎使用留言板系统!</h1>


<br>


<table width="500">


<form name="main" method="post" action="logon.jsp" onSubmit="return checkValues( this );">


<%




if(exception!=null)...{


%>


<tr>


<td colspan="2" class="warning">


<%=exception.getMessage() %>


</td>


</tr>


<%


}


%>


<tr>


<td align="right">用户名:</td>


<td><input type="text" name="name"> *</td>


</tr>


<tr>


<td align="right">密码:</td>


<td><input type="password" name="password"> *</td>


</tr>


<tr>


<td align="left">  </td>


<td align="left"><input type="submit" name="login" value="登录">


<input type="button" name="register" value="注册" onClick="regist();"></td>


</tr>


<tr>


<td align="right" colspan="2">


<img height="200" src="img/welcome.gif"> </td>


</tr>


</form>


</table>


</center>


</body>


</html>

logon.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IUserDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.User,


cn.hxex.message.exception.MessageDAOException,


cn.hxex.message.constants.Constants" %>


<jsp:useBean id="user" scope="request" class="cn.hxex.message.model.User"></jsp:useBean>


<jsp:setProperty name="user" property="*"/>


<%


IUserDAO userDAO = (IUserDAO)DaoFactory.getDao( "userDao" );


User u = userDAO.getUser( user.getName() );


if( u==null || !u.getPassword().equals( user.getPassword() ) )


{


throw new MessageDAOException( "用户不存在或者密码错误!" );


}


session.setAttribute( Constants.SESSION_USER, u.getId() );




response.sendRedirect( "message.jsp" );


%>



message.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IMessageDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.Message,


cn.hxex.message.constants.Constants,


java.util.List" %>




<html>


<head>


<title>留言列表</title>


<meta http-equiv="content-type" content="text/html;charset=gb2312">


<link rel="stylesheet" href="css/common.css">


<script language="Javascript" src="pub/js/common.js"></script>


<script language="javascript">


function checkValues(form){


var checked=[[form.title,"请输入留言标题"],[form.content,"请输入留言内容"]];


if(!isRequired(checked)){


return false;


}


return true;


}


</script>


</head>


<body>


<center>


<h1>留言列表</h1>


<table width="80%" border="1">




<tr>


<td align="center">标题</td>


<td align="center">发布人</td>


<td align="center">内容</td>


<td align="center">操作</td>


</tr>


<%


String id=(String)session.getAttribute(Constants.SESSION_USER);


IMessageDAO msgDao=(IMessageDAO)DaoFactory.getDao("messageDao");


List msgs=msgDao.getMessages();


for(int i=0;i<msgs.size();i++)


{


Message msg=(Message)msgs.get(i);




%>


<tr>


<td width="120" align="left"><%=msg.getTitle() %></td>


<td width="60" align="left"><%=msg.getUser().getName() %></td>


<td width="250" align="left"><%=msg.getContent() %></td>


<td width="80" align="center">




<%...


if(msg.getUser().getId().equals(id)){


%>


<a href="messagedel.jsp?id=<%=msg.getId()%>" >删除</a>


<a href="messageupdateinput.jsp?id=<%=msg.getId() %>" >修改</a>




<%...


}


else{


out.println(" ");


}


%>


</td>


</tr>




<%...


}


%>


</table>




<hr>




<table width="80%">


<form name="main" method="post" action="messagesave.jsp" onSubmit="return checkValues( this );">


<tr>


<td>标题:</td>


<td><input type="text" name="title" size="40" maxlength="32">*</td>


<td rowspan="3">


<img src="img/content.gif" width="120">


</td>


</tr>


<tr>


<td>内容:</td>


<td><textarea name="content" cols="40" rows="10"></textarea>*</td>


</tr>


<tr>


<td align="center" colspan="2">


<input type="submit" name="regist" value="发布">  


<input type="reset" name="reset" value="重写">


</td>


</tr>


</form>


</table>


</center>


</body>


</html>

messagedel.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IUserDAO,


cn.hxex.message.dao.IMessageDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.User,


cn.hxex.message.model.Message,


cn.hxex.message.constants.Constants,


cn.hxex.message.exception.MessageDAOException,


java.util.List" %>


<%


String id=request.getParameter("id");


String userid=(String)session.getAttribute(Constants.SESSION_USER);


IMessageDAO msgDao=(IMessageDAO)DaoFactory.getDao("messageDao");


msgDao.deleteMessage(id,userid);


response.sendRedirect("message.jsp");


%>



messagesave.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IUserDAO,


cn.hxex.message.dao.IMessageDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.User,


cn.hxex.message.model.Message,


cn.hxex.message.constants.Constants,


java.util.List" %>




<jsp:useBean id="msg" scope="request" class="cn.hxex.message.model.Message">


</jsp:useBean>


<jsp:setProperty name="msg" property="*"/>




<%


String userId=(String)session.getAttribute(Constants.SESSION_USER);


IUserDAO userDao=(IUserDAO)DaoFactory.getDao("userDao");


User u=userDao.getUserById(userId);


IMessageDAO msgDao=(IMessageDAO)DaoFactory.getDao("messageDao");


msg.setUser(u);


msgDao.saveMessage(msg);


response.sendRedirect("message.jsp");


%>

messageupdate.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IUserDAO,


cn.hxex.message.dao.IMessageDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.User,


cn.hxex.message.model.Message,


cn.hxex.message.constants.Constants,


cn.hxex.message.exception.MessageDAOException,


java.util.List" %>


<jsp:useBean id="msg" scope="request" class="cn.hxex.message.model.Message"></jsp:useBean>


<jsp:setProperty property="*" name="msg"/>


<%


String userId=(String)session.getAttribute(Constants.SESSION_USER);


IUserDAO userDao=(IUserDAO)DaoFactory.getDao("userDao");


User u=userDao.getUserById(userId);


IMessageDAO msgDao=(IMessageDAO)DaoFactory.getDao("messageDao");


msg.setUser(u);


msgDao.updateMessage(msg);


response.sendRedirect("message.jsp");


%>

messageupdateinput.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IUserDAO,


cn.hxex.message.dao.IMessageDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.User,


cn.hxex.message.model.Message,


cn.hxex.message.constants.Constants,


cn.hxex.message.exception.MessageDAOException,


java.util.List" %>


<jsp:include flush="true" page="pub/jsp/authority.jsp"></jsp:include>


<%


String id=(String)request.getParameter("id");


IMessageDAO msgDao=(IMessageDAO)DaoFactory.getDao("messageDao");


Message msg=(Message)msgDao.getMessage(id);


if(msg==null){


throw new MessageDAOException("找不到需要修改的留言");


}


%>


<html>


<head>


<title>修改留言</title>


<meta http-equiv="content-type" content="text/html;charset=gb2312">


<link rel="stylesheet" href="css/common.css">


<script language="Javascript" src="pub/js/common.js"></script>




<script language="javascript">...




function checkValues(form)...{


var checked=[[form.title,"请输入留言标题"],[form.content,"请输入留言内容"]];




if(!isRequired(checked))...{


return false;


}


return true;


}




function message()...{


window.location="message.jsp";


}


</script>


</head>


<body>


<center>




<h1>修改留言</h1>


<table width="80%">


<form name="main" method="post" action="messageupdate.jsp" onsubmit="return checkValues( this );">


<tr>


<td>标题:</td>


<td><input type="text" name="title" size="50" maxlength="32" value="<%=msg.getTitle() %>">*</td>


</tr>


<tr>


<td>内容:</td>


<td><textarea name="content" cols="50"><%=msg.getContent() %></textarea>*</td>


</tr>


<tr>


<td align="center" colspan="2">


<input type="submit" name="save" value="保存">  


<input type="reset" name="reset" value="重填">  


<input type="button" name="return" value="取消" onclick="message();">


<input type="hidden" name="id" value="<%=msg.getId() %>">


</td>


</tr>


<tr>


<td align="center" colspan="2">


 <br>


<img src="img/update.gif" width="150">


</td>


</tr>


</form>


</table>




</center>


</body>


</html>

regist.jsp








<%...@ page contentType="text/html;charset=gb2312" %>




<%...@ page import="cn.hxex.message.dao.IUserDAO,


cn.hxex.message.util.DaoFactory,


cn.hxex.message.model.User,


cn.hxex.message.constants.Constants" %>




<jsp:useBean id="user" scope="request" class="cn.hxex.message.model.User">


</jsp:useBean>


<jsp:setProperty property="*" name="user"/>


<%


System.out.println(user);


IUserDAO userDao=(IUserDAO)DaoFactory.getDao("userDao");


userDao.saveUser(user);




session.setAttribute(Constants.SESSION_USER,user.getId());


response.sendRedirect("message.jsp");


%>





registinput.jsp




<%...@ page contentType="text/html;charset=gb2312" %>


<html>


<head>


<title>请输入注册信息!</title>


<meta http-equiv="content-type" content="text/html;charset=gb2312">


<link rel="stylesheet" href="css/common.css">


<script language="Javascript" src="pub/js/common.js"></script>




</head>




<script language="javascript">...




function checkValues(form)...{


var checks=[[form.name,"请输入用户名"],[form.password,"请输入密码"],[form.repassword,"请输入确认密码"]];




if(!isRequired(checks))...{


return false;


}




if(form.password.value!=form.repassword.value)...{


alert("密码输入不一致,请重新输入");


form.password.value="";


form.repassword.value="";


form.password.focus();


return false;


}


return true;


}




function logon()...{


window.location="index.jsp";


}


</script>


<body>


<center>


<h1>用户注册</h1>


<br>


<table width="300">


<tr>


<td colspan="2" align="center" class="warnning">   请输入注册信息!</td>


</tr>


<form name="main" method="post" action="regist.jsp" onSubmit="return checkValues( this );">


<tr>


<td align="right">用户名:</td>


<td><input type="text" name="name"> *</td>


</tr>


<tr>


<td align="right">密码:</td>


<td><input type="password" name="password"> *</td>


</tr>


<tr>


<td align="right">确认密码:</td>


<td><input type="password" name="repassword"> *</td>


</tr>


<tr>


<td align="center" colspan="2">


     <input type="submit" name="regist" value="注册">


<input type="reset" name="reset" value="重填">


<input type="button" name="Logon" value="返回" onClick="logon();">


</td>


</tr>


<tr>


<td align="center" colspan="2">


 <p><p>


<img src="img/register.gif" height="120">


</td>


</tr>


</form>


</table>


</center>


</body>


</html>

web.xml


<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">



<filter>


<filter-name>HibernateFilter</filter-name>


<filter-class>cn.hxex.message.util.HibernateFilter</filter-class>


</filter>




<filter-mapping>


<filter-name>HibernateFilter</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>




<servlet>








<servlet-name>action</servlet-name>


<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>


<init-param>


<param-name>config</param-name>


<param-value>/WEB-INF/struts-config.xml</param-value>


</init-param>


<init-param>


<param-name>debug</param-name>


<param-value>3</param-value>


</init-param>


<init-param>


<param-name>detail</param-name>


<param-value>3</param-value>


</init-param>


<load-on-startup>0</load-on-startup>


</servlet>


<servlet-mapping>


<servlet-name>action</servlet-name>


<url-pattern>*.do</url-pattern>


</servlet-mapping>


<welcome-file-list>


<welcome-file>index.jsp</welcome-file>


</welcome-file-list>


<error-page>


<exception-type>


cn.hxex.message.exception.MessageDAOException


</exception-type>


<location>/error/daoerror.jsp</location>


</error-page>


<error-page>


<error-code>404</error-code>


<location>/index.jsp</location>


</error-page>


<error-page>


<exception-type>cn.hxex.message.exception.MessageAuthorityException</exception-type>


<location>/index.jsp</location>


</error-page>


</web-app>





common.js


function isRequired( checked )




...{


for( var i=0; i<checked.length; i++ )




...{


var input = checked[i][0];


if( input.value==null || input.value.length==0 )




...{


alert( checked[i][1] );


input.focus();


return false;


}


}


return true;


}

authority.jsp




<%...@ page contentType="text/html;charset=gb2312" %>




<%...@page import="cn.hxex.message.constants.Constants,


cn.hxex.message.exception.MessageAuthorityException" %>


<%


String id = (String)session.getAttribute(Constants.SESSION_USER);


if( id==null || id.length()==0 )


{


throw new MessageAuthorityException( "你没有登录,请重新登录!" );


}


%>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: