DWR+hibernate+tomcat例子

tomcat中数据连接池 配置

<Context path="/hibernate" docBase="E:/work_soft/hibernate"
        debug="5" reloadable="true" crossContext="true">
  <Logger className="org.apache.catalina.logger.FileLogger"
             prefix="localhost_DBTest_log." suffix=".txt"
             timestamp="true"/>
  <Resource name="jdbc/TestDB"
               auth="Container"
               type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/TestDB">
    <parameter>
      <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <!-- Maximum number of dB connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to 0 for no limit.
         -->
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <!-- Maximum number of idle dB connections to retain in pool.
         Set to 0 for no limit.
         -->
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>
    <!-- Maximum time to wait for a dB connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
    <!-- MySQL dB username and password for dB connections  -->
    <parameter>
     <name>username</name>
     <value>root</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>root</value>
    </parameter>
    <!-- Class name for mm.mysql JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <!-- The JDBC connection url for connecting to your MySQL dB.
         The autoReconnect=true argument to the url makes sure that the
         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
         connection.  mysqld by default closes idle connections after 8 hours.
         -->
    <parameter>
      <name>url</name> <value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value>
    </parameter>
  </ResourceParams>
</Context>

项目 web.xml 配置 +dwr的

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app id="dwr">

  <display-name>DWR (Direct Web Remoting)</display-name>
  <description>A Simple Demo DWR</description>
 
  <listener>
    <listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextAttributeListener</listener-class>
  </listener>
  <listener>
    <listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextListener</listener-class>
  </listener>


  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <display-name>DWR Servlet</display-name>
    <description>Direct Web Remoter Servlet</description>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>activeReverseAjaxEnabled</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>initApplicationScopeCreatorsAtStartup</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>maxWaitAfterWrite</param-name>
      <param-value>500</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
  <resource-ref>
   <res-ref-name>jdbc/TestDB</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>hwl</res-auth>
  </resource-ref>

</web-app>

hibernate.cgf.xml配置

<?xml version='1.0' encoding='GBK'?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 是否将运行期生成的SQL输出到日志以供调试 -->
        <property name="show_sql">true</property>
        <!-- SQL方言,这里设定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC驱动程序 -->
        <property name="connection.datasource">java:comp/env/jdbc/TestDB</property>
        <!-- 指定User的映射文件 -->
      <mapping resource="xj/hwl/bean/User.hbm.xml"/>     
    </session-factory>
</hibernate-configuration>

dwr配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="userac">
 <param name="class" value="xj.hwl.action.UserAc"></param>
 <include method="testSelect"/>
 <include method="testInsert"/>
 <include method="testUpdate"/>
 <include method="testDelete"/>
</create>
<convert converter="bean" match="xj.hwl.bean.User">
 <param name="include" value="id,username,password"></param>
</convert> 
</allow>
</dwr>

index.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>
Hibernate JSP Test
</title>
<script type="text/javascript" src="./dwr/interface/userac.js"></script>
<script type="text/javascript" src="./dwr/engine.js"></script>
<script type="text/javascript" src="./dwr/util.js"></script>
<script type="text/javascript">
function init() {
  dwr.util.useLoadingMessage();
  fillTable();
}

var userCache = { };
var viewed = -1;

function fillTable() {

  userac.testSelect(function(list) {
    // Delete all the rows except for the "pattern" row
    dwr.util.removeAllRows("userbody", { filter:function(tr) {
      return (tr.id != "pattern");
    }});
    // Create a new set cloned from the pattern row
    var user, id;
    for (var i = 0; i < list.length; i++) {
      user = list[i];
      id = user.id;
      dwr.util.cloneNode("pattern", { idSuffix:id });
      dwr.util.setValue("tableUsername" + id, user.username);
      dwr.util.setValue("tablePassword" + id, user.password);
      $("pattern" + id).style.display = ""; // officially we should use table-row, but IE prefers "" for some reason
      userCache[id] = user;
    }
  });
}


function editClicked(eleid) {
  // we were an id of the form "edit{id}", eg "edit42". We lookup the "42"
  var user = userCache[eleid.substring(4)];
  dwr.util.setValues(user);
}

function deleteClicked(eleid) {
  // we were an id of the form "delete{id}", eg "delete42". We lookup the "42"
  var user = userCache[eleid.substring(6)];
  if (confirm("Are you sure you want to delete " + user.username + "?")) {
    dwr.engine.beginBatch();
    userac.testDelete(user);
    fillTable();
    dwr.engine.endBatch();
  }
}

function writePerson() {
  var user = { id:viewed, username:null, password:null };
  dwr.util.getValues(user);

  dwr.engine.beginBatch();
  if(user.id==-1){
   userac.testInsert(user);
  }else{
     userac.testUpdate(user);
  }
  fillTable();
  dwr.engine.endBatch();
}

function clearPerson() {
  viewed = -1;
  dwr.util.setValues({ id:-1, username:null, password:null });
}

 

</script>

</head>

<body οnlοad="init();">

    <h3>All User</h3>
    <table border="1" class="rowed grey">
      <thead>
        <tr>
          <th>username</th>
          <th>password</th>
          </tr>
      </thead>
      <tbody id="userbody">
        <tr id="pattern" style="display:none;">
          <td><span id="tableUsername">Username</span><br/></td>
          <td><span id="tablePassword">Password</span></td>
          <td>
            <input id="edit" type="button" value="Edit" οnclick="editClicked(this.id)"/>
            <input id="delete" type="button" value="Delete" οnclick="deleteClicked(this.id)"/>
          </td>
        </tr>
      </tbody>
    </table>
    <h3>Edit User</h3>
    <table class="plain">
      <tr>
        <td>Username:</td>
        <td><input id="username" type="text" size="30"/></td>
      </tr>
      <tr>
        <td>Password:</td>
        <td><input id="password" type="text" size="20"/></td>
      </tr>

      <tr>
        <td colspan="2" align="right">
          <small>(ID=<span id="id">-1</span>)</small>
          <input type="button" value="Save" οnclick="writePerson()"/>
          <input type="button" value="Clear" οnclick="clearPerson()"/>
       </td>
      </tr>
    </table>
</body>
</html>

调用到的方法
package xj.hwl.action;

import java.util.List;

import junit.framework.Assert;
import net.sf.hibernate.Criteria;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Transaction;
import xj.hwl.bas.HibernateAc;
import xj.hwl.bean.User;


public class UserAc extends HibernateAc {
  
   public void testInsert(User user){
    try {
   setSession();
   Transaction tx = session.beginTransaction();    
      session.save(user);
      tx.commit();
      session.flush();     
      closeSession();
    } catch (HibernateException e) {
      e.printStackTrace();   
    }   
  }
  
    public List testSelect(){
       String hql= " from User";
       System.out.println("===============");
      try {
        setSession();
           List userList = session.find(hql);
           Criteria criteria = session.createCriteria(User.class);
//         限定查询返回检索结果中,从第一百条结果开始的20条记录
           criteria.setFirstResult(2);
           criteria.setMaxResults(3);
           userList=criteria.list();
           closeSession();
           return userList;
      } catch (HibernateException e) {
          e.printStackTrace();
          return null;
      }  
   }

    public void testUpdate(User user){
      
      try {
        setSession();
        Transaction tx = session.beginTransaction();
           session.update(user);
           tx.commit();
           closeSession();
      } catch (HibernateException e) {
          e.printStackTrace();
        }   
     }
   
    public void testDelete(User user){
      
      try {
       setSession();
       Transaction tx = session.beginTransaction();
           session.delete(user);
           tx.commit();
           closeSession();
      } catch (HibernateException e) {
          e.printStackTrace();
          Assert.fail(e.getMessage());
        }   
      }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值