搞了慢慢两天,终于弄明白了怎么在Struts2框架中使用Ajax检测用户名的存在了。虽然,比起那些大牛们来,这速度确实够慢的,不过,最终弄出来还是满满的成就感啊。

闲话休提,言归正传。直接上代码:

Action:

 package com.bbs.action;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext; import com.bbs.model.*;
import com.opensymphony.xwork2.*; @SuppressWarnings("serial")
public class CheckUser extends ActionSupport {
//private String username;
public String execute() throws Exception {
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse res = ServletActionContext.getResponse();
String username = req.getParameter("username");
res.setContentType("text/html;charset=UTF-8");
String responseStr = "";
UserDAO udao = new UserMySQLDAO();
if (udao.ValiUserByName(username)) {
res.getWriter().print("exists");
} else {
responseStr = "你可以使用该用户名";
res.getWriter().print(responseStr);
}
return null;
} }

这里第一行的package是我自己定义的Action包。网上有好多例子是JavaScript与JSP通信或者Servlet通信,但是鲜有与Action传递参数的例子。但我就是想让JSP做纯粹是展现的东西,并且如果再加上Servlet话,会破坏原有的MVC清晰架构,所以在这一点上,我相信自己的坚持是对的。

至于怎么检测用户名是否在数据库中存在,这就是一个很easy的问题了,此处就不讲了,重点讲一下我是怎么架构的,其他无关紧要的细节,或者一搜就能搜到的解释,本着简明扼要的原则,一概忽略之。

JavaScript:

 var req;
var span;
function Check(field) {
span = document.getElementById("result");
if(field.value == '') {
span.style.color = "red";
span.innerHTML="用户名不能为空";
return false;
}
if(window.XMLHttpRequest) { //其他非IE浏览器支持
req = new XMLHttpRequest();
}else if(window.ActiveXObject) { //微软的IE支持
req = new ActiveXObject("Microsoft.XMLHTTP");
} req.onreadystatechange = press;
req.open("POST", "http://localhost:8080/BBS/CheckUser?username="+field.value, true);
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
req.send("");
} function press() {
if(req.readyState < 4) {
span.style.color = "blue";
span.innerHTML="正在检测";
}
if(req.readyState == 4) {
if(req.status == 200) {
if(req.responseText == "exists") {
span.style.color = "red";
span.innerHTML="用户名已经存在";
}else {
span.style.color = "green";
span.innerHTML="您可以使用该用户名";
}
}
}
}

这一段代码是用来实现Ajax用户名检测的部分。第5-9行是检测用户名为空的代码,很好理解。重点是后面的部分。首先,建立一个XMLHttpRequest对象,这是实现Ajax的核心部分,只有用它才能用来

向后台发送请求,发送请求分两步:打开连接,发送请求。

打开连接用open方法。

open方法的原型 open("method","URL",[,asyncFlag[,"userName"[,"password"]]]);

method:POST/GET。这两种方法的区别就不详细介绍了,到处都有介绍。需要注意一点是:必须要有双引号,我就因为没加引号,找了半天才找到原因,汗。

asyncFlag:true代表异步,一般情况下我们应该选择这个;false代表同步。

后面的username和password则专用于一些远程服务。

发送请求用send方法。

send(content);//content 是请求参数。一般情况下可以省略。

setRequestHeader():在发送之前要设置请求头。

onreadystatechange参数用来设置相应的回调函数。

后面的press就是那个回调函数。

关于status的各种解释此处从略。

这里的span就是用来在用户名输入框后面做语句展现的。

HTML代码:

 <input  id="regusername" type="text" name="username" size="50" maxlength="12" value=""  autocomplete="off" onblur="Check(this)"/>
<span id = "result"></span>

Action部分:

 <package name="server" namespace="/"  extends="struts-default">
<action name="CheckUser" class="com.bbs.action.CheckUser">
<result name="success">Welcome.jsp</result>
<result name="input">Register.jsp</result>
</action>
</package>

其实此处的result部分,无所谓了,因为注意一下前面的Action最后返回的是null,为什么是null呢?因为前面的JavaScript部分,有一句是利用responseText与字符串比较来产生不同的效果。

如果是success或者input的话,会直接将跳转后的页面(Welcome.jsp/Register.jsp)返回过来。此处又折腾了半天,汗。

另外虽然好多资料都讲到responseText是一个字符串,但是实际上,不能完全按照字符串的处理方法去处理他,刚开始我用equals函数,没有反应,后来改成==才能达到效果。

总之,费了九牛二虎之力终于还是搞定了,还是觉得自己很菜很菜,但是只要相信自己一定能做到,那么你就肯定能做到。遇到困难不要急躁,总会有办法的。虽然有点鸡汤,但望诸君切记。

下一步,打算实现Ajax分页。

Struts2+Ajax实现检测用户名是否唯一的更多相关文章

  1. 【05】AJAX实例-检测用户名是否存在(实例)

    AJAX实例-检测用户名是否存在   用户注册时,需要填写个人信息,其中包括用户名.当用户输入完成时,JavaScript 需要及时检测用户名是否存在,如果存在给出提示,请用户更换用户名. 当然,这个 ...

  2. ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册

    在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详细代码和所遇到的问题贴过来.在使用struts2+ajax时候,通常我们会返回json类型的数据,但是像上面 ...

  3. 利用jQuery和Ajax实现检测用户名是否已经被注册

    这是一个jQuery和Ajax的很基础的应用,是我出去面试时的一个面试题.当时脑子有点懵想了好久才知道该怎么去实现,现在回来再看了下书好好总结一下这个东西. 首先新建一个html文件,只有简单的几行代 ...

  4. Ajax检测用户名是否已经注册

    程序功能 当用户名输入完成(即用户名输入框失去焦点),利用Ajax检测用户名是否已经注册! 实现过程 利用Ajax向CheckUserServlet发送请求,判断该用户名是否可用.这里只是为了演示Aj ...

  5. asp.net ajax 检测用户名是否可用代码

    原文  asp.net ajax 检测用户名是否可用代码 .net ajax 检测用户名是否可用代码 <script type="text/网页特效" src="c ...

  6. ajax 检测用户名是否可用

    下面是一个 ajax 检测用户名是否可用的例子. django  项目中. —— views.py 里—— from django.shortcuts import render,HttpRespon ...

  7. struts2+ajax实现异步验证实现

    由于老师布置作业的需要,在添加管理员的时候,要实现验证添加的管理员的用户名是否在数据库中已经存在,然后再客户端给用户一个提示.我首先想到的就是利用ajax实现异步验证技术,由于利用的ssh框架,所以在 ...

  8. struts2+ajax实现异步验证

    由于老师布置作业的需要,在添加管理员的时候,要实现验证添加的管理员的用户名是否在数据库中已经存在,然后再客户端给用户一个提示.我首先想到的就是利用ajax实现异步验证技术,由于利用的ssh框架,所以在 ...

  9. struts2 + ajax + json的结合使用,实例讲解

    struts2用response怎么将json值返回到页面javascript解析,这里介绍一个struts2与json整合后包的用法. 1.准备工作 ①ajax使用Jquery:jquery-1.4 ...

随机推荐

  1. JS 利用CNZZ进行站长统计

    利用CNZZ对网站进行站长统计 前端页面只需要在body中添加如下代码即可: <script type="text/javascript">var cnzz_proto ...

  2. 图片占位 css

    手机端图片高度和宽度不能自动比例缩小的问题 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  3. (c#)WinForm遍历所有控件

    遍历WinForm中的所有控件,只执行一次以下语句是不行的 foreach (Control ctl in this.Controls) { } 这样只能遍历到第一层控件,子控件是遍历不到的,要想遍历 ...

  4. java总结

    JUC概况 以下是Java JUC包的主体结构: ? Atomic : AtomicInteger ? Locks : Lock, Condition, ReadWriteLock ? Collect ...

  5. zookeeper_04:curator

    定义 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量. <d ...

  6. android MVC理解

    算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...

  7. 前端开发面试题收集 JS

    前端开发面试题收集-JS篇 收集经典的前端开发面试题 setTimeout的时间定义为0有什么用? javascript引擎是单线程处理任务的,它把任务放在队列中,不会同步执行,必须在完成一个任务后才 ...

  8. HTML特殊符号编码大全

    HTML特殊字符编码:往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字.下面就是以字母或数字表示的特殊符号大全. ´ ´ © © > > µ ...

  9. python运维开发(五)----模块、生成器

    内容目录 双层装饰器 字符串格式化 生成器和迭代器 递归 模块 双层装饰器 需求场景介绍: 现有用户登录系统,普通用户能查看自己相关信息的权限,管理员用户能查看所有用户的权限,可以做两个装饰器来实现需 ...

  10. SQL Server 创建数据库快照

    创建数据库快照: 必须在create database 命令中包括源数据库的每一个数据文件,原始逻辑名,新物理名与路径, 不能指定其他属性 create database db_snapshot_na ...