J2EE社區(qū)

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          使用DWR開發(fā)AJAX For J2EE

          Posted on 2008-10-03 10:21 xcp 閱讀(2838) 評(píng)論(7)  編輯  收藏 所屬分類: Dwr
          DWR是Direct Web Remoting 的縮寫。

          DWR 是一個(gè)開放源碼的使用 Apache 許可協(xié)議的解決方案,它包含服務(wù)器端 Java 庫、一個(gè) DWR servlet 以及 JavaScript 庫。雖然 DWR 不是 Java 平臺(tái)上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了許多有用的功能。
          從最簡(jiǎn)單的角度來說,DWR 是一個(gè)引擎,可以把服務(wù)器端 Java 對(duì)象的方法公開給 JavaScript 代碼。使用 DWR 可以有效地從應(yīng)用程序代碼中把 Ajax 的全部請(qǐng)求-響應(yīng)循環(huán)消除掉。這意味著客戶端代碼再也不需要直接處理 XMLHttpRequest 對(duì)象或者服務(wù)器的響應(yīng)。不再需要編寫對(duì)象的序列化代碼或者使用第三方工具才能把對(duì)象變成 XML。甚至不再需要編寫 servlet 代碼把 Ajax 請(qǐng)求調(diào)整成對(duì) Java 域?qū)ο蟮恼{(diào)用。
          DWR 是作為 Web 應(yīng)用程序中的 servlet 部署的。把它看作一個(gè)黑盒子,這個(gè) servlet 有兩個(gè)主要作用:首先,對(duì)于公開的每個(gè)類,DWR 動(dòng)態(tài)地生成包含在 Web 頁面中的 JavaScript。生成的 JavaScript 包含存根函數(shù),代表 Java 類上的對(duì)應(yīng)方法并在幕后執(zhí)行 XMLHttpRequest。這些請(qǐng)求被發(fā)送給 DWR,這時(shí)它的第二個(gè)作用就是把請(qǐng)求翻譯成服務(wù)器端 Java 對(duì)象上的方法調(diào)用并把方法的返回值放在 servlet 響應(yīng)中發(fā)送回客戶端,編碼成 JavaScript。DWR 還提供了幫助執(zhí)行常見的用戶界面任務(wù)的 JavaScript 工具函數(shù)。

          下面只是一個(gè)注冊(cè)的時(shí)候判斷用戶名是否已被注冊(cè),也就是完成了當(dāng)用戶輸入完用戶名的時(shí)候,自動(dòng)測(cè)試用戶名是否被使用.!! ,首先我們要建立一個(gè)web工程,導(dǎo)入對(duì) Hibernate的支持(在這就不多說,肯定大家都會(huì));還有加上對(duì)Dwr的支持,在我們下載下來的dwr源碼里面有一個(gè)dwr.jar文件我們把它復(fù)制到我們web工程的lib下面,還要加上一個(gè)dwr.xml文件與web.xml同目錄(在后面將會(huì)配置).

          表信息:
          create table user(
          uid 
          INT  primary key auto_increment,
          username 
          VARCHAR(32unique not null,
          password 
          VARCHAR(32not null,
          );

          Hibernate映射:

          hibernate.cfg.xml文件
          <?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="connection.username">root</property>
                  
          <property name="connection.url">
                      jdbc:mysql://localhost:3306/struts1
                  
          </property>
                  
          <property name="dialect">
                      org.hibernate.dialect.MySQLDialect
                  
          </property>
                  
          <property name="myeclipse.connection.profile">mysql</property>
                  
          <property name="connection.password">sa</property>
                  
          <property name="connection.driver_class">
                      com.mysql.jdbc.Driver
                  
          </property>
                  
          <property name="show_sql">true</property>
                  
          <mapping resource="org/topCSA/dwr/User.hbm.xml" />

              
          </session-factory>

          </hibernate-configuration>

          User實(shí)體類:
          package org.topCSA.dwr;

          /**
           * User entity.
           * 
           * 
          @author MyEclipse Persistence Tools
           
          */


          @SuppressWarnings(
          "serial")
          public class User implements java.io.Serializable
          {

              
          // Fields

              
          private Integer uid;
              
          private String  username;
              
          private String  password;

              
          // Constructors

              
          /** default constructor */
              
          public User()
              
          {
              }


              
          /** full constructor */
              
          public User(String username, String password)
              
          {
                  
          this.username = username;
                  
          this.password = password;
              }


              
          // Property accessors

              
          public Integer getUid()
              
          {
                  
          return this.uid;
              }


              
          public void setUid(Integer uid)
              
          {
                  
          this.uid = uid;
              }


              
          public String getUsername()
              
          {
                  
          return this.username;
              }


              
          public void setUsername(String username)
              
          {
                  
          this.username = username;
              }


              
          public String getPassword()
              
          {
                  
          return this.password;
              }


              
          public void setPassword(String password)
              
          {
                  
          this.password = password;
              }


          }

           

          User.hbm.xml映射文件

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >
          <!-- 
              Mapping file autogenerated by MyEclipse Persistence Tools
          -->
          <hibernate-mapping>
              
          <class name="org.topCSA.dwr.User" table="user">
                  
          <id name="uid" type="java.lang.Integer">
                      
          <column name="uid" />
                      
          <generator class="native" />
                  
          </id>
                  
          <property name="username" type="java.lang.String">
                      
          <column name="username" length="32" not-null="true" />
                  
          </property>
                  
          <property name="password" type="java.lang.String">
                      
          <column name="password" length="32" not-null="true" />
                  
          </property>
              
          </class>
          </hibernate-mapping>


          HibernateSessionFactory類(放在org.topCSA.util,是加入Hibernate時(shí)自動(dòng)生成的Session工廠類,在這為了減少篇幅就不寫出來了)


          形成UserDAO接口:

           

          package org.topCSA.dwr;

          public interface UserDAO
          {
              
          public boolean existUser(String username);
          }

           

           形成UserDAOImpl:

          package org.topCSA.dwr;

          import java.util.List;


          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.Transaction;
          import org.topCSA.util.HibernateSessionFactory;

          public class UserDAOImpl implements UserDAO
          {

              @SuppressWarnings(
          "unchecked")
              @Override
              
          public boolean existUser(String username)
              
          {
                  Session session 
          = HibernateSessionFactory.getSession();
                  Transaction tx 
          = session.beginTransaction();
                  
                  Query qeury 
          = session.createQuery("from User u where u.username=?");
                  qeury.setString(
          0, username);
                  
                  List
          <User> user =  qeury.list();
                  
                  
          if(user.size() > 0)
                      
          return true;
                  
                  tx.commit();
                  
          return false;
                  
              }


          }



          形成一個(gè)UserDAOAjax接口(主要就是為客戶端定義要調(diào)用的服務(wù)方法):

           

          package org.topCSA.dwr;

          public interface 
          {
           
          public boolean existUser(String username);
          }



          形成一個(gè)UserDAOAjaxImpl類:

          package org.topCSA.dwr;

          public class UserDAOAjaxImpl implements UserDAOAjax
          {
              
          private UserDAO userDAO;
              @Override
              
          public boolean existUser(String username)
              
          {
                  userDAO 
          = new UserDAOImpl();
                  
          return userDAO.existUser(username);
              }


          }



          配置dwr.xml文件(它的作用就是將服務(wù)端方法轉(zhuǎn)換成javascript代碼):
          <?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 javascript="UserDAOAjaxImpl" creator="new">
                      
          <param name="class" value="org.topCSA.dwr.UserDAOAjaxImpl"></param>
                  
          </create>
                  
          <convert match="org.topCSA.dwr.User" converter="bean"></convert>
              
          </allow>
          </dwr>

          web.xml里面加上對(duì)dwr框架的支持:

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation
          ="http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          >

              
          <servlet>
                  
          <servlet-name>dwr</servlet-name>
                  
          <servlet-class>
                      org.directwebremoting.servlet.DwrServlet
                  
          </servlet-class>
                  
          <init-param>
                      
          <param-name>debug</param-name>    
                      
          <param-value>true</param-value>
                  
          </init-param>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>dwr</servlet-name>
                  
          <url-pattern>/dwr/*</url-pattern>
              
          </servlet-mapping>
          </web-app>


          前臺(tái)頁面register.jsp:
          <%@ page language="java" contentType="text/html; charset=GB18030"
              pageEncoding
          ="GB18030"
          %>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
              
          <head>
                  
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
                  
          <title>register</title>

                  
          <!-- 第一個(gè)是dwr的引擎腳本 -->
                  
          <script type="text/javascript" src="dwr/engine.js"></script>
                  
          <!-- 第二個(gè)是dwr的工具腳本 -->
                  
          <script type="text/javascript" src="dwr/util.js"></script>
                  
          <!-- 第三個(gè)是調(diào)用dwr通過dwr.xml自動(dòng)生成的js -->
                  
          <script type="text/javascript" src="dwr/interface/UserDAOAjaxImpl.js"></script>
                  
          <!-- 具體操作腳本 -->
                  
          <script type="text/javascript">
                      
          function show(boolean)
                      
          {
                          
          if(boolean)
                          
          {
                              $(
          "error").style.visibility="visible";
                              form1.username.value
          ='';
                          }

                          
          else
                          
          {
                              $(
          "error").style.visibility="hidden";
                          }

                      }

                      
          function validate()
                      
          {
                          
          var name = $("username").value;
                          
          //alert(name);
                          UserDAOAjaxImpl.existUser(name,show);
                      }

                      
          function init()
                      
          {
                          $(
          "error").style.visibility="hidden";
                      }

              
          </script>

              
          </head>
              
          <body onload="init()">
                  
          <form action="#" method="post" name="form1">
                      
          <table id="table1" border="0">
                          
          <tr>
                              
          <td>
                                  用戶名:
                              
          </td>
                              
          <td>
                                  
          <input type="text" name="username" id="username"
                                      onchange
          ="validate()" />
                              
          </td>
                              
          <td id="error">
                                  
          <font color="red">用戶名已被注冊(cè)!</font>
                              
          </td>
                          
          </tr>
                          
          <tr>
                              
          <td>
                                  密碼
          &nbsp;&nbsp;:
                              
          </td>
                              
          <td>
                                  
          <input type="text" name="username" />
                              
          </td>
                          
          </tr>
                      
          </table>
                  
          </form>
              
          </body>
          </html>


           上面已經(jīng)基本完成要實(shí)現(xiàn)的功能,下面就是布置測(cè)試:

          完成了當(dāng)用戶輸入完用戶名的時(shí)候,自動(dòng)測(cè)試用戶名是否被使用。
          若數(shù)據(jù)庫里面有相冊(cè)的用戶名提示用戶名已被注冊(cè)!

          若沒有正常執(zhí)行.



          名稱: ?4C.ESL | .↗Evon
          口號(hào): 遇到新問題?先要尋找一個(gè)方案乄而不是創(chuàng)造一個(gè)方案こ
          mail: 聯(lián)系我


          Feedback

          # re: 使用DWR開發(fā)AJAX For J2EE  回復(fù)  更多評(píng)論   

          2008-10-03 21:51 by 免費(fèi)小說
          這個(gè)不錯(cuò),試試看。

          # re: 使用DWR開發(fā)AJAX For J2EE  回復(fù)  更多評(píng)論   

          2008-10-06 17:17 by bruno
          function validate()
          {
          var name = $("username").value;
          //alert(name);
          UserDAOAjaxImpl.existUser(name,show);
          }
          這段代碼是不是有誤?
          我猜想是
          function validate()
          {
          var name = $("username").value;
          //alert(name);
          show(UserDAOAjaxImpl.existUser(name));
          }
          不知對(duì)否?

          # re: 使用DWR開發(fā)AJAX For J2EE  回復(fù)  更多評(píng)論   

          2008-10-12 21:31 by xcp
          @bruno
          樓上這位你知道回調(diào)函數(shù)嗎?建議學(xué)學(xué)!!

          function validate()
          {
          var name = $("username").value;
          //alert(name);
          UserDAOAjaxImpl.existUser(name,show);
          }
          以上代碼正確無誤!!

          # re: 使用DWR開發(fā)AJAX For J2EE  回復(fù)  更多評(píng)論   

          2008-11-11 11:23 by xiaodong
          為什么我照著你的代碼 敲完 了 沒有效果啊

          # re: 使用DWR開發(fā)AJAX For J2EE[未登錄]  回復(fù)  更多評(píng)論   

          2008-11-14 14:54 by xcp
          @xiaodong
          應(yīng)該是哪敲錯(cuò)了吧,自己再好好看看。。。

          # re: 使用DWR開發(fā)AJAX For J2EE  回復(fù)  更多評(píng)論   

          2009-03-22 14:05 by asd
          afds@xcp

          # re: 使用DWR開發(fā)AJAX For J2EE  回復(fù)  更多評(píng)論   

          2009-10-27 16:39 by 免費(fèi)小說
          應(yīng)該是哪敲錯(cuò)了吧,自己再好好看看。。。 使用DWR開發(fā)AJAX For J2EE

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 老河口市| 宁城县| 隆子县| 彩票| 五河县| 青海省| 无锡市| 霍城县| 广平县| 汝阳县| 隆回县| 汉源县| 哈巴河县| 颍上县| 泰来县| 桓台县| 肇庆市| 绥滨县| 辽阳县| 汾阳市| 广宗县| 大姚县| 聂拉木县| 建瓯市| 楚雄市| 赣州市| 澄迈县| 龙井市| 红桥区| 马山县| 高碑店市| 云和县| 澄迈县| 朝阳区| 谷城县| 会理县| 新龙县| 澄江县| 达孜县| 工布江达县| 福州市|