搞了慢慢两天,终于弄明白了怎么在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. CSS3无前缀脚本prefixfree.js与Animatable使用

    现代浏览器基本支持CSS3,但是一些旧版本的浏览器还是需要添加前缀的.像box-shadow, border-radius这类属性,目前较新版本的浏览器都是不需要前缀的(包括IE9),但是,有些CSS ...

  2. C#整理6——数组的应用

    数组的应用:(一).冒泡排序.1.冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数.2.趟数=n-1:次数=n-趟数.3.里层循环使用if比较相临的两个数的大小,进行数值交换. 作业:1. ...

  3. VS2012 黑色护眼主题

    在黑色主题基础上,更改了字体 Ms Comic Sans 字号也增大了 附件中有两个 一个是原版主题下载自https://studiostyl.es/ 第二个是如下改完后的主题 vssettings. ...

  4. Oracle的关于建表,约束,查询等的练习

    从建立一个简单表,到实现一些复杂查询的例子, DROP TABLE grade;DROP TABLE item;DROP TABLE sporter;CREATE TABLE sporter( spo ...

  5. c# 另存为excel

    去网上找了一下  看了一个比较简单的新建excel然后另存为. 要引用Microsoft.Office.Interop.Excel命名空间,如果没有的话 ,百度比我懂. 直接付代码: Microsof ...

  6. 用GoEasy推送实现Java实时推送

    前段时间客户有个需求他希望他在后台管理页面发布一个消息,所有用这个系统的用户无论在哪个页面都能及时收到他发布的信息,以前对于类似需求在少量 页面接收的前提下,我一般采用ajax定时去服务器pull信息 ...

  7. Inno Setup教程

    一.简介 Inno Setup是一款免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务.该软件用Delp ...

  8. Fedora 开启 ssh

    Fedora 17 已经安装好openssh server了 不用再装 不过默认无开启 首先su root1.开启ssh服务# systemctl start sshd.service 2.随系统一起 ...

  9. log4net自定义扩展及配置说明

    log4net文件保存配置我就不说太多了,网上一大把的,数据库配置其实网上也有,只是我第一次按照网上的配置没有跑通,我就说下数据库配置需要注意的地方吧. 下面是一个log4net的数据库代码配置 pu ...

  10. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...