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(32) unique not null,
password VARCHAR(32) not 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;
}

}
<?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>
package org.topCSA.dwr;

public interface UserDAO
{
public boolean existUser(String username);
}
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);
}
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>
密碼 :
</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í)行.
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ì)配置).
表信息:






Hibernate映射:
hibernate.cfg.xml文件



























User實(shí)體類:

































































User.hbm.xml映射文件





















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







形成UserDAOImpl:



































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







形成一個(gè)UserDAOAjaxImpl類:














配置dwr.xml文件(它的作用就是將服務(wù)端方法轉(zhuǎn)換成javascript代碼):












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























前臺(tái)頁面register.jsp:




































































上面已經(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)系我