1.前言:本文主要是针对DWR框架的实际应用进行讲解,通过一个登陆信息实时验证来讲述DWR的使用过程。

2.在Myeclipse中建立一个Web应用项目.首先在web.xml中对dwr进行配置。配置内容如下:

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
  <init-param>
   <param-name>debug</param-name>
   <param-value>true</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>

3.新建一个Java类用来验证登陆信息,主要包括用户名,密码,用户类型,这些信息在数据库中对应于数据库news中的用户信息users表,在这里我们将users表的建表代码列出如下:

create database news

go

use news

create table users

(

        username varchar(50) default('')primary key,

        password varchar(50) default(''),

        type varchar(50)default('normal')

 Java类:

package dwr.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class Validator {
 private static String username;
 private static String password;
 private static String type;
 private Connection conn;
 private PreparedStatement ps;
 private ResultSet rs;

 public void init() {
  try {
   conn = DBConnection.getConnection();
   Debug.println(conn.toString());
  } catch (Exception e) {
   Debug.println("没有获得连接!");
   e.printStackTrace();
  }
 }

 public List<String> getAllType() {
  init();
  List<String> typelist = new ArrayList<String>();
  try {
   ps = conn.prepareStatement("select distinct(type) from loginfo");
   rs = ps.executeQuery();
   while (rs.next()) {
    typelist.add((String) rs.getString("type"));
   }
  } catch (Exception e) {
   
   e.printStackTrace();
  }
  close();
  return typelist;
 }

 public String validate(int i) {
  Debug.println("num:" + i);
  init();
  String sql1 = "select * from loginfo where type=?";
  String sql2 = "select * from loginfo where type=? and username=?";
  String sql3 = "select * from loginfo where username=? and password=? and type=?";
  try {
   if (i == 1) {
    ps = conn.prepareStatement(sql1);
    ps.setString(1, type);
    rs = ps.executeQuery();
    Debug.println(sql1);
    if (!rs.next()) {
     return "此部门没有用户!";
    }
   } else if (i == 2) {
    ps = conn.prepareStatement(sql2);
    ps.setString(1, type);
    ps.setString(2, username);
    rs = ps.executeQuery();
    Debug.println(sql2);
    if (!rs.next())
     return "用户名错误!";
   } else if (i == 3) {
    ps = conn.prepareStatement(sql3);
    ps.setString(1, username);
    ps.setString(2, password);
    ps.setString(3, type);
    Debug.println(sql3);
    rs = ps.executeQuery();
    if (!rs.next())
     return "用户密码错误!";
   }
   return null;
  } catch (Exception e) {
   Debug.println("判断时出现异常!");
   e.printStackTrace();
  } finally {
   close();
  }
  return "判断时出现了异常";
 }

 public void close() {
  try {
   if (rs != null)
    rs.close();
   if (ps != null)
    ps.close();
   if (conn != null)
    conn.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void setUsername(String username) {
  Debug.println("username:" + username);
  this.username = username;
 }

 public void setPassword(String password) {
  Debug.println("password:" + password);
  this.password = password;
 }

 public void setType(String type) {
  Debug.println("type:" + type);
  this.type = type;
 }

 public static void main(String args[]) {
  Validator v = new Validator();
  v.setUsername("jiangbin");
  v.setPassword("jiangbin");
  v.setType("管理员");
  if (v.validate(3) == null)
   Debug.println("找到了用户!");
 }
}

其中引用的数据库池边类为:

package dwr.test;

import java.sql.Connection;

import javax.sql.DataSource;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;

public class DBConnection {
 private static DataSource dataSource;

 public static Connection getConnection() throws Exception {
  if (dataSource == null) {
   BasicDataSource bds = new BasicDataSource();
   bds
     .setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
   bds
     .setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news");
   bds.setUsername("sa");
   bds.setPassword("");
   bds.setMaxIdle(2);
   bds.setMaxActive(20);
   bds.setDefaultAutoCommit(true);
   dataSource = bds;
  }
  return dataSource.getConnection();
 }
}

其中引用的Debug类为:

/*
 * Debug.java
 */

/*
 *  Copyright (c) 2001 by Florian Bomers <florian@bome.com>
 *
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Library General Public License as published
 *   by the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU Library General Public License for more details.
 *
 *   You should have received a copy of the GNU Library General Public
 *   License along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

package dwr.test;

public class Debug {

 public static boolean ERROR = true;
 public static boolean DEBUG = true;
 public static boolean TRACE = true;
 public static boolean TRACE_READWRITE = true;
 public static boolean TRACE_INOUT = false;
 public static boolean SHOW_ALL_EXCEPTIONS = true;

 // for net.Server
 public static boolean SLOW_NET_UPLOAD = true;
 public static boolean SLOW_NET_DOWNLOAD = true;

 // show the time of a debug message
 private static final boolean SHOW_TIMES = true;
 private static long START_TIME = System.currentTimeMillis();

 public static synchronized void println(String sMessage) {
  if (TRACE) {
   if (SHOW_TIMES) {
    sMessage = "" + (System.currentTimeMillis() - START_TIME)
      + ": " + sMessage;
   }
   System.out.println(sMessage);
  }
 }

 public static void println(Object obj, String sMessage) {
  if (TRACE) {
   String cn = obj.getClass().getName();
   int i = cn.lastIndexOf('.');
   if (i >= 0 && i < cn.length() - 1) {
    cn = cn.substring(i + 1);
   }
   println(cn + ": " + sMessage);
  }
 }

 public static synchronized void println(Throwable t) {
  if (TRACE) {
   t.printStackTrace();
  }
 }

 public static synchronized void printStackTrace() {
  if (TRACE) {
   Thread.dumpStack();
  }
 }
}
4.创建dwr.xml文件将Java验证类与页面脚本对象进行关连,dwr.xml文件与web.xml文件于同级目录下:

<?xml version="1.0" encoding="GB18030"?>
<dwr>
  <allow>
    <create creator="new" javascript="validator">
      <param name="class" value="dwr.test.Validator"/>
    </create>
  </allow>
</dwr>

5.建立登录页面index.jsp,其页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<html>
 <head>
  <title>Log page</title>
  <script type='text/javascript' src='./dwr/interface/validator.js'></script>
  <script type='text/javascript' src='./dwr/engine.js'></script>
  <script type='text/javascript' src='./dwr/util.js'></script>
  <script type="text/javascript" src="./js/log.js"></script>
 </head>

 <body onload="addUserType();">
  <font color="red" size="4"><div id="isUser"></div>
  </font>
  <hr>
  <form action="success.jsp">
   <TABLE>
    <TR>
     <TD colspan="3" bgcolor="#6699FF">
      登录
     </TD>
    </TR>
    <TR>
     <TD>
      用户类型
     </TD>
     <TD>
      <select id="type" onblur="reply('1');">
      </select>
     </TD>
     <TD>
      <div id='typeText'></div>
     </TD>
    </TR>
    <TR>
     <TD>
      用户名
     </TD>
     <TD>
      <input type="text" name="username" onblur="reply('2');" />
     </TD>
     <TD>
      <div id='usernameText'></div>
     </TD>
    </TR>
    <TR>
     <TD>
      密码
     </TD>
     <TD>
      <input type="password" name="password" onblur="reply('3');" />
     </TD>
     <TD>
      <div id='passwordText'></div>
     </TD>
    </TR>
    <TR>
     <TD colspan="3">
      <input type="button" value="提交" onclick="check();" />
      <input type="reset" value="重置" />
     </TD>
    </TR>
   </TABLE>
  </form>
 </body>
</html>
6.页面中引用的log.js文件如下:


function callback1(str) {
 DWRUtil.setValue("isUser", str);
}
function callback2(str) {
 DWRUtil.setValue("isUser", str);
}
function callback3(str) {
 DWRUtil.setValue("isUser", str);
}
function callback4(str) {
 if (str == null) {
  location.href = "success.jsp";
 } else {
  DWRUtil.setValue("isUser", "\错\误\:\您\输\入\的\用\户\信\息\不\存\在!");
 }
}
function reply(num) {
 var type = DWRUtil.getValue("type");
 if (type == "\请\选\择") {
  DWRUtil.setValue("isUser", "\请\选\择\用\户\类\型!");
  return;
 }
 var username = DWRUtil.getValue("username");
 var password = DWRUtil.getValue("password");
 validator.setType(type);
 validator.setUsername(username);
 validator.setPassword(password);
 if (num == "1") {
  validator.validate(1, callback1);
 }
 if (num == "2") {
  validator.validate(2, callback2);
 }
 if (num == "3") {
  validator.validate(3, callback3);
 }
 if (num == "4") {
  validator.validate(3, callback4);
 }
}
function addUserType() {
 validator.getAllType(allType);
}
function allType(typeList) {
 var obj_Type = document.getElementById("type");
 DWRUtil.removeAllOptions(obj_Type);
 DWRUtil.addOptions(obj_Type, ["\请\选\择"]);
 DWRUtil.addOptions(obj_Type, typeList);
}
function check() {
 reply(4);
}

将项目布署到tomcat上就可以了,注意在构建路径上引用dwr,jar包。

posted on 2013-04-12 11:03  elleniou  阅读(421)  评论(0编辑  收藏  举报