Ajax技术概要复习及使用Ajax调用jsp或servlet进行异步验证

在注册用户等情况下会需要Ajax进行异步验证用户是否存在,而这个验证信息在JAVA中可以放到JSP中,也可以放到servlet类中,而两者的差异就如果我们使用jsp和servlet做web应用的差异是相同的。由此也体现了jsp和servlet的关系,在《Servlet和JSP的关系以及此关系在Tomcat中的体现》有所阐述!在简单呈现和比对各自实现的代码前先对AJAX的技术知识做个复习小结!

Ajax的主干内容如下所示:

未命名图片

使用Ajax的主要过程包括1、创建XMLHttpRequest对象,2、设置回发函数,3、指定信息发送位置、提交的方式和异步与否,4、发送请求。javaScript代码如下所示:

   1:   <script type="text/javascript">
   2:          var XMLHttpRequestIns = null;
   3:          
   4:          function AjaxF() {
   5:              //创建Ajax核心对象并传递参数
   6:              CreateXMLHttpRequest();
   7:              //设置参数
   8:              XMLHttpRequestIns.onreadystatechange = handleStateChange;//设置回发函数
   9:              //获取内容的位置
  10:              XMLHttpRequestIns.open("GET", "XMLFile1.xml", true);
  11:              //发送
  12:              XMLHttpRequestIns.send(null);
  13:          }
  14:          function CreateXMLHttpRequest() {
  15:              if (window.ActiveObject) {
  16:                  XMLHttpRequestIns = new ActiveXObject("Microsoft.XMLHTTP");
  17:              }
  18:              else if(window.XMLHttpRequest )
  19:              {
  20:                  XMLHttpRequestIns = new XMLHttpRequest();
  21:              }
  22:          }
  23:          //对返回数据进行处理
  24:          function handleStateChange() {
  25:              if (XMLHttpRequestIns.readyState == 4) {
  26:   
  27:                  if (XMLHttpRequestIns.status == 200) {
  28:                      alert("服务器消息" + XMLHttpRequestIns.responseText);
  29:                  }
  30:              }
  31:          }
  32:      </script>
有了这个基础和容易在java EE中使用Ajax调用jsp或servlet进行处理,但调用两者有些细微的差异,这个差异也源自jsp和servlet的关系!代码如下:

1、html代码: 主要是在input的onblur方法中指定验证方法,此标签后的span标签用于显示Ajax验证后返回的提示信息(存在与否)

   1:                      <tr>
   2:                          <td width="22%" height="29">
   3:                              <div align="right">
   4:                                  <font color="#FF0000">*</font>用户代码:&nbsp;
   5:                              </div>
   6:                          </td>
   7:                          <td width="78%">
   8:                              <input name="userId" type="text" class="text1" id="userId"
   9:                                  size="10" maxlength="10" value="<%=userId %>" onblur 
  10:                                  ="validate(this)"/><span id="userIdspan"></span>
  11:                          </td>
  12:                      </tr>

2、javaScript代码:这的重点就是掌握Ajax中创建XMLHttpRequest类的方法,指定处理次验证过程的jsp类或servlet类(此处是jsp类,见下面validate(field)中的url变量),再有就是回调函数的指定和编写,此处使用了匿名函数,但也将编写好的回调函数放到了下面以供参考。

   1:  <script type="text/javascript">        
   2:                                 var xmlHttp;
   3:              
   4:          function createXMLHttpRequest() {
   5:              //表示当前浏览器不是ie,如firefox
   6:              if(window.XMLHttpRequest){
   7:                  xmlHttp = new XMLHttpRequest();
   8:              }else if(window.ActiveXObject){
   9:                  xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
  10:              }
  11:          }
  12:          
  13:          function validate(field) {            
  14:              if(trim(field.value).length != 0){
  15:                  //创建XMLHttpRequest
  16:                  createXMLHttpRequest();
  17:                  var url = "user_validate.jsp?userId=" + trim(field.value) + "&timestamp=" + new Date().getTime();
  18:                  //alert(url);
  19:                  xmlHttp.open("GET",url,true);
  20:                  
  21:                  //方法地址。处理完成后自动调用,回调。一定不要加括号,否则就变成调用了
  22:                  //xmlHttp.onreadystatechange = callback;
  23:                  xmlHttp.onreadystatechange = function() {    //匿名函数
  24:                          if(xmlHttp.readyState == 4){    //ajax引擎初始化成功
  25:                          if(xmlHttp.status == 200) {    //Http协议成功                    
  26:                              document.getElementById("userIdspan").innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>";
  27:                          }else {
  28:                              alert("请求失败,错误码=" + xmlHttp.status);
  29:                          }
  30:                      }
  31:                  };
  32:                  //将参数发送到ajax引擎,不是执行
  33:                  xmlHttp.send(null);
  34:              }else {
  35:                  document.getElementById("userIdspan").innerHTML = "";
  36:              }
  37:          }
  38:          
  39:          function callback(){//此处是回调函数,但在此Ajax应用中为未调用此方法,而是采用了上面的匿名函数的方法
  40:              if(xmlHttp.readyState == 4){    //ajax引擎初始化成功
  41:                  if(xmlHttp.status == 200) {    //Http协议成功                    
  42:                      document.getElementById("userIdspan").innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>";
  43:                  }else {
  44:                      alert("请求失败,错误码=" + xmlHttp.status);
  45:                  }
  46:              }
  47:          }
  48:  </script>

3、上面validate(field)方法中变量url指定的验证过程的jsp或servlet类,此处使用列举的是jsp(user_validate.jsp)。

   1:  <%@ page language="java" contentType="text/html; charset=GB18030"
   2:      pageEncoding="GB18030"%>
   3:  <%@ page import="com.bjpowernode.drp.sysmgr.manager.*" %>
   4:      <%
   5:          String userId = request.getParameter("userId");
   6:          if(UserManager.getInstance().findUserById(userId) != null) {
   7:              out.println("用户代码已经存在!");
   8:          }
   9:      %>

4、3中用到的UserManager是具体从数据库中根据userId查询user的类,此处略去!

5、至此Ajax调用jsp处理验证的编码完成,如果是调用servlet来进行验证,则上文的变量url需指向servlet类,如下所示:

   1:  var url = "../servlet/UserValidateServlet?UsertId=" + trim(field.value) + "&timestamp=" + new Date().getTime();//加个时间戳,是每次的url不同,防止缓存

6、在servlet中的验证过程比对上文中的第3步,代码如下所示:

   1:  public class UserValidateServlet extends HttpServlet {
   2:   
   3:      @Override
   4:      protected void service(HttpServletRequest request, HttpServletResponse response)
   5:              throws ServletException, IOException {
   6:          //设置contentType
   7:          response.setContentType("text/html; charset=GB18030");
   8:          
   9:          //获取代码
  10:          String userId=request.getParameter("usertId");
  11:          //执行查询,判断是否存在
  12:          if(UserManager.getInstance().findUserByUserId(userId)!=null){
  13:              //提示存在了此代码
  14:              response.getWriter().print("用户代码已经存在!");
  15:          }
  16:      }
  17:   
  18:  }

对比3和6可以发现除了指定contentType的方式不同外(jsp在@page命令中指定,servlet在response方法中指定),其他的没有区别。但要想使用此servlet来完成验证过程还需要像《Servlet和JSP的关系以及此关系在Tomcat中的体现》所提到的配置下web.xml文件。代码如下:

- <servlet>
  <servlet-name>ClientIdValidateServlet</servlet-name> 
  <servlet-class>com.bjpowernode.drp.util.servlet.ClientIdValidateServlet</servlet-class> 
  </servlet>
- <servlet-mapping>
  <servlet-name>ClientIdValidateServlet</servlet-name> 
  <url-pattern>/servlet/ClientIdValidateServlet</url-pattern> 
  </servlet-mapping>
通过上面的代码可以请到在java中使用Ajax和在一般网页中使用Ajax没有太大区别,其主要还是掌握好了
XMLHttmRequest的用法!此文也算是对jsp和servlet在Ajax应用上的对比!
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值