由于老师布置作业的需要,在添加管理员的时候,要实现验证添加的管理员的用户名是否在数据库中已经存在,然后再客户端给用户一个提示。我首先想到的就是利用ajax实现异步验证技术,由于利用的ssh框架,所以在这要对struts2和ajax进行整合,由于我还没把ajax的一些知识总结出来,所以在这也不提了,有关ajax的详细内容将会在以后的博客中写出来。现在我们就以我做的这个添加管理员,验证管理员的用户名是否存在来说一下这个struts2+ajax实现异步验证技术。

首先我们来看一下我们的form表单:

<td> 用户名 </td> <td> <input type="text" name="admin.username" value="" οnblur="checkusername(this,'AdminAction!exists')" /> </td> <td> <span id="namemessage" style="color: red;"></span> </td> </tr> <tr bgColor="#d6fdd0"> <td> 密码 </td> <td> <input type="password" name="admin.password" value="" /> </td> <td> <span></span> </td> </tr>

我们可以看到当我们的用户名的文本域注册了一个onblur事件,当用户名这个文本域失去焦点的时候我们就会让他去执行checkusername方法,好,下面让我们来看一下我们的js是怎么实现的ajax:

<script type="text/javascript"> var xmlHttpRequest = null; //声明一个空对象以接收XMLHttpRequest对象 function checkusername(field, url) { var uername = field.value; if (uername == "" || uername.length < 3) { document.getElementById("namemessage").innerHTML = "用户名应该不小于3位"; return; } else { if (window.ActiveXObject) // IE浏览器 { xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) //除IE外的其他浏览器实现 { xmlHttpRequest = new XMLHttpRequest(); } if (null != xmlHttpRequest) { //当利用get方法访问服务器端时带参数的话,直接在"AjaxServlet"后面加参数,                   下面send方法为参数null就可以,用post方法这必须在把参数加在send参数内,如下 xmlHttpRequest.open("get", url+"?admin.username="+uername, true); //关联好ajax的回调函数 xmlHttpRequest.onreadystatechange = ajaxCallback; //真正向服务器端发送数据 // 使用post方式提交,必须要加上如下一行,get方法就不必加此句 xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttpRequest.send(null); } } } function ajaxCallback() { //ajax一次请求会改变四次状态,所以我们在第四次(即一次请求结束)进行处理就OK, if (xmlHttpRequest.readyState == 4) { //请求成功 if (xmlHttpRequest.status == 200) { var responseText = xmlHttpRequest.responseText; document.getElementById("namemessage").innerHTML = responseText; } } } </script>

通过上面的注释我想大家应该能看懂一些内容吧,我们首先去验证填写的内容是否为空,如果为空就给用户以提示。如果不为空的话就去判断一下当前的浏览器,然后根据浏览器去设置xmlHttpRequest对象,xmlHttpRequest对象是什么东西呢?XMLHttpRequest 对象用于在后台与服务器交换数据的对象,他主要的作用:

· 在不重新加载页面的情况下更新网页

· 在页面已加载后从服务器请求数据

· 在页面已加载后从服务器接收数据

· 在后台向服务器发送数据

XMLHttpRequest是Ajax最核心的对象,它有以下几个重要的方法或属性:
    ●open():建立到服务器的新请求。

●send():向服务器发送请求。

●abort():退出当前请求。

●readyState:提供当前 HTML 的就绪状态。

●responseText:服务器返回的请求响应文本。

其中XMLHttpRequest 对象的 open() 方法有以下五个参数:

●request-type:发送请求的类型。典型的值是 GET 或 POST,但也可以发送 HEAD 请求。

●url:要连接的 URL。

●asynch:如果希望使用异步连接则为true,否则为 false。该参数是可选的,默认为 true。

●username:如果需要身份验证,则可以在此指定用户名。该可选参数没有默认值。

●password:如果需要身份验证,则可以在此指定口令。该可选参数没有默认值。

通常使用其中的前三个参数。事实上,即使需要异步连接,也应该指定第三个参数为 “true”。这是默认值,但坚持明确指定请求是异步的还是同步的更容易理解。

得到XMLHttpRequest 对象之后,我们就利用这个对象去后台执行我们的请求,在执行我们请求的时候一定要注意关联好我们的回调函数:xmlHttpRequest.onreadystatechange = ajaxCallback;这里的回调函数的名字可以随便起,并不是固定死的。我们可以看到我们上面的程序请求是发送给了AdminAction中的exists方法了,好,下面我们去action方法里面去看一下:

public String exists() throws Exception{ System.out.println(admin==null); boolean boo=dao.exists(admin.getUsername());   //获取原始的PrintWriter对象,以便输出响应结果,而不用跳转到某个试图             HttpServletResponse response = ServletActionContext.getResponse();             //设置字符集             response.setCharacterEncoding("UTF-8");             PrintWriter out = response.getWriter();     if(boo){                 //直接输入响应的内容             out.println("*用户名已存在*");             /**格式化输出时间**/            out.flush();             out.close();     } out.println("*用户名可用*");  return null; }

熟悉ajax的同学看到这段代码应该很清楚了吧。这里主要是利用了PrintWriter 来把我们的后台信息输出到我们的前台,这里我 就不详细解释了。好了,写到这,我们这个利用struts2+ajax实现的我们的异步验证。下面就是具体的实现效果:

转载于:https://blog.51cto.com/javacsh/1129074

Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...相关推荐

  1. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  2. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  3. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice

    在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...

  4. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  5. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  6. Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

    在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况.有时候也需要导出pdf或者CSV报表.其实原理都差不多.刚开始本来不打算也这篇博客介绍这个的.感觉这篇博客和前面的博客有点雷同.原理基本都 ...

  7. Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...

    在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生 ...

  8. Java程序员从笨鸟到菜鸟之(序言)+全部链接

    http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...

  9. Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...

  10. java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...

    [新朋友]点击标题下面(↑)蓝色字"Java那些事"关注 [老朋友]点击右上角,转发或分享本页面内容 这是我以前写的<java程序员由笨鸟到菜鸟>系列博客,每天更新一篇 ...

最新文章

  1. UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe6 in position 0: ordinal not in range(128)
  2. 查询数据库占用空间大小
  3. 匹配中文字符的正则表达式: [/u4e00-/u9fa5]
  4. micropython解释器原理_了解一下 MicroPython 的项目整体架构
  5. 前端学习(580):打开开发者工具
  6. 选择Windows CE wince嵌入式操作系统 的十大理由
  7. python 文件复制中出现 Python3之由通用字符名称“\u202A”表示的字符不能在当前代码页中表示出来
  8. Whidbey——C#前瞻
  9. [转帖]方正数码发布基于龙芯3A3000系列整机
  10. Oracle数据库存储number类型数据
  11. 如何将IE浏览器设置为默认浏览器
  12. JavaScript经典效果集[蓝色理想]
  13. iOS UIScrollView 无法滚动 没有弹簧效果解决方案
  14. python pd Series 添加行_pd.Series的基本操作
  15. Altium Designer绘制电路原理图——PCB图
  16. Pandas详解十之Dropna滤除缺失数据
  17. 公众号学生成绩管理查询系统
  18. 小米回应年底裁员:事情确实有,规模没那么大;华为关闭其在俄罗斯的企业事业部|极客头条...
  19. h5+js判断网速连接最快的服务器
  20. Linux系统克隆-Mondo Rescue制作U盘启动及系统恢复

热门文章

  1. OpenCV使用功能匹配模板的实例(附完整代码)
  2. OpenCV用代码解释单应性的基本概念
  3. Qt动画框架Animation Framework
  4. Qt Creator使用命令行选项
  5. C++旋转二维MxN矩阵的算法(附完整源码)
  6. QT的QLibrary类的使用
  7. oracle数据库计数器,DM 达梦数据库 表的 行计数器(COUNTER)属性
  8. linux存储库rep 61082,安装informatic过程中的错误
  9. 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)
  10. overridePendingTransition的简介