`
gaoyu
  • 浏览: 274558 次
  • 来自: 云南大理
社区版块
存档分类
最新评论

DWR框架应用

阅读更多

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);
}

分享到:
评论

相关推荐

    Ajax之dwr框架应用

    这个“Ajax之dwr框架应用”示例是一个很好的起点,帮助开发者了解如何在实际项目中应用DWR。 首先,我们来探讨DWR的基本概念。DWR允许JavaScript代码调用Java方法,就像它们是本地函数一样。这意味着可以在不刷新...

    dwr框架的使用简介

    本文通过一个具体的示例——无限级树型菜单的实现,展示了如何使用DWR框架简化AJAX应用的开发过程。该示例主要涉及以下几个步骤: 1. **服务器端Java类设计**:首先需要定义服务器端的Java类,这些类包含了将被...

    DWR框架学习demo

    **DWR(Direct Web Remoting)框架学习指南** ...通过学习和实践DWR框架,开发者可以创建更加动态、响应式的Web应用,提升用户的交互体验。理解DWR的工作原理以及如何配置和使用,对于开发人员来说是非常有价值的技能。

    AJAX 与 DWR框架

    总的来说,Ajax和DWR框架的结合使用,可以显著提升Web应用的用户体验,减少不必要的页面刷新,提高数据处理效率。同时,通过DWR与主流Java框架的集成,开发者可以更方便地在大型项目中引入Ajax技术,而不必重构大量...

    DWR框架DWR框架

    例如,在压缩包内的文件"A051]使用DWR开发AJAX+For+J2EE.wrf"可能是一个演示或者教程,详细介绍了如何使用DWR框架在J2EE环境中构建AJAX应用。这个文件可能涵盖从安装DWR,配置web.xml,编写可远程调用的Java类,到在...

    AJAX框架DWR简单应用

    在提供的“AJAX框架DWR简单应用.pdf”文件中,你可能会找到关于如何设置DWR环境、编写Java接口、配置DWR配置文件、在前端JavaScript中使用DWR,以及示例代码和实际运行效果的详细教程。这个文件是学习和理解DWR工作...

    dwr 框架

    这个例子是一个可以直接运行的DWR框架应用,无需额外部署步骤,方便快速体验和学习。 DWR的核心特性包括: 1. **双向通信**:DWR支持服务器向客户端推送数据,而不仅仅是传统的客户端发起请求、服务器响应模式。这...

    dwr框架依赖包及实例

    DWR(Direct Web Remoting...总的来说,DWR框架提供了一种高效、简便的方式来实现前端与后端的交互,极大地提高了Web应用的用户体验。通过理解这些知识点,并结合提供的实例,开发者能够快速上手并有效地利用DWR框架。

    DWR框架的应用示例

    DWR(Direct Web Remoting)框架是一个开源的Java库,它允许Web应用程序在客户端和服务器之间进行实时的、异步的通信,无需刷新整个页面...通过学习提供的"DWR框架的应用示例",新手可以快速上手并掌握DWR的核心功能。

    dwr框架需要使用的jar包

    DWR(Direct Web Remoting)框架是一...总的来说,DWR框架通过一套完善的机制,使得JavaScript能够与Java无缝对接,极大地提升了Web应用的交互性和性能。理解并熟练掌握DWR,对于开发现代、交互性强的Web应用至关重要。

    SSH与DWR框架整合

    1. **提高应用灵活性**:通过DWR框架,前端可以直接调用后端Java对象的方法,无需经过传统的表单提交过程。 2. **增强用户体验**:DWR可以实现实时数据更新和异步请求,提升用户的交互体验。 3. **简化开发流程**:...

    AJAX技术之DWR框架入门

    **AJAX技术之DWR框架入门** AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。...了解并掌握DWR框架,能帮助我们更好地构建实时、交互性强的Web应用。

    DWR框架的应用

    总结起来,DWR框架通过简化配置和提供强大的功能,使得开发者能够快速构建具有丰富交互性的Web应用。理解和配置DWR,不仅可以提升开发效率,还能为用户带来更加流畅的使用体验。通过学习和实践DWR,你将能够更好地...

    基于Ajax技术的DWR框架的研究与应用

    ### 基于Ajax技术的DWR框架的研究与应用 #### 概述 随着Web技术的不断发展,用户对于Web应用的交互性和响应速度有了更高的要求。传统的Web开发方式已难以满足这种需求,因此Ajax(Asynchronous JavaScript and XML...

    dwr框架实现无刷新分页

    **DWR(Direct Web Remoting)框架实现无刷新分页技术详解** DWR(Direct Web Remoting)是一种...通过对这些文件的分析和学习,我们可以更深入地理解DWR框架如何应用于无刷新分页技术,进一步提升Web应用的用户体验。

    dwr框架入门学习文档

    DWR 框架入门学习文档 DWR(Direct Web Remoting)是一个开放源码的使用 Apache 许可协议的解决方案,它...通过了解 DWR 框架的基本知识点和使用步骤,开发者可以更好地使用 DWR 框架,提高开发效率和应用程序的质量。

    dwr框架的应用实例

    在“dwr框架的应用实例”中,我们将探讨如何在Apache Tomcat服务器上部署并使用DWR。Tomcat是一款轻量级、开源的Java Servlet容器,它是许多Web应用的首选平台。 首先,要使用DWR,你需要在项目中添加DWR的依赖库。...

    dwr框架d ppt

    ### DWR框架详解 #### 一、为什么要使用Ajax框架? Ajax框架的核心价值在于它能够显著地提高用户界面的响应性和用户体验。传统的Web应用程序通常...对于Java开发者而言,掌握DWR框架的应用编程是非常有价值的技能。

    基于DWR框架的教学管理系统设计与实现.pdf

    3. DWR框架在教学管理系统中的应用:DWR框架可以应用于选课系统,实现学生选课的功能,减少服务器端的负载,提高用户体验。 4. ProfessionDAO对象的实现: ProfessionDAO是一个简单的无状态的类,提供了对专业内课程...

Global site tag (gtag.js) - Google Analytics