`

jsp+ajax实例

阅读更多

下面介绍JSP前台表单内容通过Ajax异步提交到后台Servlet进行校验(校验方式多种,包括提取数据库信息,校验用户名是否重复等),异步在JSP表单页面显示校验结果信息的基本过程。 

一、说明: 

       1.由于本文只限于介绍JSP+Servlet+Ajax运用的基本流程,重点不在于后台数据库的访问和校验内容,因此省略Servlet对数据库的访问。 

二、基本流程: 

      1. JSP页面login.jsp提供一个表单“form”,表单中有两个“text”类型的输入框,其中我们将用第一个输入框来做实验。 

        在第一个输入框中(输入用户名),通过onblur=validate();,当用户光标离开输入框时,触发JS函数validate() ,函数validate()在Ajax.js文件中声明。

Html代码  收藏代码
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  3.     "http://www.w3.org/TR/html4/loose.dtd">  
  4.   
  5. <html>  
  6.     <head>  
  7.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  8.         <script type="javascript" src="Ajax.js"></script>        
  9.     </head>  
  10.     <body>  
  11.         <h1>Test Ajax</h1><p>  
  12.         <form action="" method="get" name="form">  
  13.             <br>  
  14.             输入用户名:  
  15.             <input type="text" size="10" maxlength="8" id="userName" name="name" onblur="validate()">  
  16.             <span id="info"></span>  
  17.             <br>  
  18.             输入商品名:  
  19.             <input type="text" size="10" maxlength="8" >  
  20.         </form>  
  21.     </body>  
  22. </html>  

 
       

2、Ajax.js文件声明了一系列函数,用于完成向表单与servlet的中接处理。 


2.1、函数validate()要点: 

        2.1.1、通过document.getElementById(String id)获取表单中有特定id值的输入框的值,即获取用户输入的用户名。 

        2.1.2、声明一个变量url,存放要访问的servlet:"validate.do?id=" + escape(idField.value),问号?后面表示在url后添加一个值,这个值在validate.do这个servlet中可以通过request.getParameter("id")来获取。

Js代码  收藏代码
  1. var url = "validate.do?id=" + escape(idField.value);  

  

       2.1.3、 通过if()语句以兼容IE,Firefox等多个浏览器版本的方式创建一个XMLHttpRequest对象。

Java代码  收藏代码
  1. if(window.XMLHttpRequest) {  
  2.     //IE7, Firefox, Opera支持  
  3.     req = new XMLHttpRequest();  
  4. }else if(window.ActiveXObject) {  
  5.     //IE5,IE6支持  
  6.     req = new ActiveXObject("Microsoft.XMLHTTP");  
  7. }  

 

       2.1.4、调用XMLHttpRequest对象函数open()准备向servlet发送请求(此时只是“准备发送”,并没有发送)

Js代码  收藏代码
  1. req.open("GET", url, true);  

  

       2.1.5、 调用XMLHttpRequest对象函数send(param)向servlet发送请求。param参数的值null(关于send()方法使用请另外查阅)

Js代码  收藏代码
  1. req.send(null);  

 


       2.1.6、调用一个触发事件onreadystatechange,每当 readyState 改变时,onreadystatechange 函数就会被执行。readyState有5个可能值:0:请求未初始化(在调用open()之前);1:请求已经提出(调用send()之前);2:请求已经发送(这里通常可以从响应得到内容头部);3:请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应);4:请求已经完成(可以访问服务器响应并使用它)

Js代码  收藏代码
  1. req.onreadystatechange = callback;  

 

2.2、function callback()要点: 

      2.2.1    XMLHttpRequest.status = 200表示服务器已经成功响应。 

                  通过XMLHttpRequest.responseText获取servlet端的getPrintWriter().write()输出的响应。得到的值是 一个String类型数据。

Js代码  收藏代码
  1. var check = req.responseText;  

 

2.3、通过show()函数输出结果到标签标记的位置。

 

完整的Ajax.js文件:

Js代码  收藏代码
  1. var req;  
  2. function validate() {  
  3.     //获取表单提交的内容  
  4.     var idField = document.getElementById("userName");  
  5.     //访问validate.do这个servlet,同时把获取的表单内容idField加入url字符串,以便传递给validate.do  
  6.     var url = "validate.do?id=" + escape(idField.value);                  
  7.     //创建一个XMLHttpRequest对象req  
  8.     if(window.XMLHttpRequest) {  
  9.         //IE7, Firefox, Opera支持  
  10.         req = new XMLHttpRequest();  
  11.     }else if(window.ActiveXObject) {  
  12.         //IE5,IE6支持  
  13.         req = new ActiveXObject("Microsoft.XMLHTTP");  
  14.     }  
  15.     /* 
  16.      open(String method,String url, boolean )函数有3个参数 
  17.      method参数指定向servlet发送请求所使用的方法,有GET,POST等 
  18.      boolean值指定是否异步,true为使用,false为不使用。 
  19.      我们使用异步才能体会到Ajax强大的异步功能。 
  20.      */  
  21.     req.open("GET", url, true);  
  22.     //onreadystatechange属性存有处理服务器响应的函数,有5个取值分别代表不同状态  
  23.     req.onreadystatechange = callback;  
  24.     //send函数发送请求  
  25.     req.send(null);                  
  26. }  
  27.   
  28. function callback() {  
  29.     if(req.readyState == 4 && req.status == 200) {  
  30.         var check = req.responseText;  
  31.         show (check);  
  32.     }  
  33. }  
  34.   
  35. function show(str) {  
  36.     if(str == "OK") {  
  37.         var show = "<font color='green'>恭喜!!用户名可用!</font>";  
  38.         document.getElementById("info").innerHTML = show;  
  39.     }  
  40.     else if( str == "NO") {  
  41.         var show = "<font color='red'>对不起,用户名不可用!!请重新输入!</font>";  
  42.         document.getElementById("info").innerHTML = show;  
  43.     }  
  44. }  

 
三、servlet处理: 

      重点1:通过以下几行代码设置浏览器不进行Ajax处理页面的缓存(如果出现缓存,将导致一些不可预知的麻烦) 

Java代码  收藏代码
  1. response.setContentType("text/html");  
  2. response.setHeader("Cache-Control""no-store");  
  3. response.setHeader("Pragma""no-cache");  
  4. response.setDateHeader("Expires"0);  

 
       重点2:通过request.getParameter()来获取Ajax传递的参数。

Java代码  收藏代码
  1. String name = request.getParameter("id");  

 

       重点3:通过response.getWriter().write()向Ajax输出参数,在Ajax一端通过var check = XMLHttpRequest.responseText获取参数值。

Java代码  收藏代码
  1. if(name.equals("1")) {  
  2.     out.write("OK");  
  3. }  
  4. else {  
  5.     out.write("NO");  
  6. }  

 
完整的servlet代码:

Java代码  收藏代码
  1. package com.model;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10.   
  11. public class DoAjaxServlet extends HttpServlet {  
  12.      
  13.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
  14.     throws ServletException, IOException {  
  15.         response.setContentType("text/html;charset=UTF-8");  
  16.         PrintWriter out = response.getWriter();  
  17.         try {  
  18.             response.setContentType("text/html");  
  19.             response.setHeader("Cache-Control""no-store");  
  20.             response.setHeader("Pragma""no-cache");  
  21.             response.setDateHeader("Expires"0);  
  22.             String name = request.getParameter("id");  
  23.             if(name.equals("1")) {  
  24.                 out.write("OK");  
  25.             }  
  26.             else {  
  27.                 out.write("NO");  
  28.             }  
  29.         } finally {   
  30.             out.close();  
  31.         }  
  32.     }   
  33.   
  34.     @Override  
  35.     protected void doGet(HttpServletRequest request, HttpServletResponse response)  
  36.     throws ServletException, IOException {  
  37.         processRequest(request, response);  
  38.     }   
  39.   
  40.     @Override  
  41.     protected void doPost(HttpServletRequest request, HttpServletResponse response)  
  42.     throws ServletException, IOException {  
  43.         processRequest(request, response);  
  44.     }  
  45.   
  46.     @Override  
  47.     public String getServletInfo() {  
  48.         return "Short description";  
  49.     }  
  50.   
  51. }  

 

最后,记得在web.xml配置文件中配置这个servlet:

Xml代码  收藏代码
  1. <servlet>  
  2.     <servlet-name>DoAjaxServlet</servlet-name>  
  3.     <servlet-class>com.model.DoAjaxServlet</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.     <servlet-name>DoAjaxServlet</servlet-name>  
  7.     <url-pattern>/validate.do</url-pattern>  
  8. </servlet-mapping>  
分享到:
评论

相关推荐

    JSP+Ajax实例演示

    **JSP+Ajax实例演示详解** 在Web开发中,JSP(JavaServer Pages)和Ajax(Asynchronous JavaScript and XML)是两种常见的技术,它们结合使用能够实现动态、交互性强的网页应用。本实例演示将深入讲解如何利用JSP和...

    JSP+Ajax经典开发实例

    **JSP+Ajax 经典开发实例** 在Web开发领域,JSP(JavaServer Pages)与Ajax(Asynchronous JavaScript and XML)的结合是构建动态、交互性网页的强大工具。本经典实例深入探讨了如何利用这两种技术来提升用户体验,...

    JSP+Ajax 经典实例2

    **JSP+Ajax实例2** 可能涵盖的专题可能包括: 1. 数据验证:在用户输入数据后,使用Ajax向服务器发送请求验证数据的有效性,如邮箱格式检查。 2. 动态加载内容:当用户滚动页面时,通过Ajax请求加载更多内容,如无限...

    JSP+Ajax网站开发典型实例_Part_1.rar

    《JSP+Ajax网站开发典型实例》是针对Web开发领域的一种技术组合的实践教程,主要讲解如何使用JavaServer Pages(JSP)与Asynchronous JavaScript and XML(Ajax)来构建动态、交互性强的Web应用程序。本实例集的第一...

    JSP+Ajax无刷新树型菜单数据库版

    总的来说,"JSP+Ajax无刷新树型菜单数据库版"是一个结合了前后端技术的实例,展示了如何利用JSP构建用户界面,通过Ajax实现动态数据加载,同时利用SQL管理数据库,从而提供了一个高效、交互性强的树型菜单系统。...

    java+jsp+ajax+jst+jquery实例

    【标题】"java+jsp+ajax+jst+jquery实例"涉及了Web开发中的多个关键技术和实践,主要关注Java后端、JSP(Java Server Pages)前端、Ajax(Asynchronous JavaScript and XML)、JST(JavaScript Templates)以及...

    JSP+Ajax 进度条

    **JSP+Ajax 进度条** 在Web开发中,为用户提供实时的进度反馈是非常重要的,尤其是在执行耗时操作如文件上传、数据处理等场景。JSP(JavaServer Pages)和Ajax(Asynchronous JavaScript and XML)结合使用可以实现...

    基于jsp+servlet+Ajax异步登陆模拟web项目

    【基于jsp+servlet+Ajax异步登陆模拟web项目】是一个典型的Web开发实例,它整合了三种核心技术:JavaServer Pages(JSP)、Servlet以及Asynchronous JavaScript and XML(Ajax)。这个项目的核心目的是实现用户登录...

    《JSP+Dreamweaver CS4+CSS+Ajax动态网站开发典型案例》源代码

    《JSP+Dreamweaver CS4+CSS+Ajax动态网站开发典型案例》光盘 完整源代码 有3个完整的jsp网站 第1章 设计Web标准网页 1.1 设个人主页 1.2 设计CSS 1.3 设计新闻查看页面 1.4 设计博客网站首页 1.5 CSS设计页面布局 ...

    Ajax网站开发典型实例JSP源码包

    在本"Ajax网站开发典型实例JSP源码包"中,我们可以深入学习如何使用Ajax与JavaServer Pages (JSP) 结合,创建高效动态的Web应用。 1. **Ajax基础** Ajax的核心是JavaScript对象XMLHttpRequest,它允许JavaScript在...

    jsp+ajax自动刷新实例.zip

    标题"jsp+ajax自动刷新实例.zip"揭示了这是一个关于使用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(Ajax)技术实现页面自动刷新的实例项目。这里的关键词是“jsp”和“ajax”,它们是Web开发中的...

    JSP+AJax网站实例

    JSP+AJax网站实例 提供给JSP初学者 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计...

    jsp+ajax开发实例

    【jsp+Ajax开发实例详解】 在Web开发领域,JSP(JavaServer Pages)与Ajax(Asynchronous JavaScript and XML)的结合应用广泛,尤其在构建动态交互的网页时,它们能够提供卓越的用户体验。Ajax允许在不刷新整个...

    基于JSP+JavaBean+Servlet+Ajax+Mysql的验证码 增删查改完整例子

    在IT领域,构建Web应用程序是常见的任务之一,而本示例提供了一个基于JSP、JavaBean、Servlet、Ajax以及Mysql的完整应用实例,主要涵盖了数据的增删查改(CRUD)操作,并且利用Ajax实现了异步的验证码验证功能。...

    jsp+servlet+ajax+easyui学生管理系统

    【标题】"jsp+servlet+ajax+easyui学生管理系统"是一个典型的Web应用程序开发实例,它结合了多种技术来实现一个高效、用户友好的学生管理平台。这个项目对于初学者来说是一个很好的起点,可以帮助他们理解如何在实际...

    JSP+Ajax网站开发典型实例_Part_2.rar

    《JSP+Ajax网站开发典型实例》第二部分的压缩包包含了一系列有关Web应用程序开发的实践教程,主要聚焦于使用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(Ajax)技术。这一组合在现代Web应用中广泛...

    jsp+ajax自动刷新实例

    在“jsp+ajax自动刷新实例”中,`autoRefresh.jsp` 可能是一个包含AJAX调用的JSP页面,它负责定期向服务器发送请求以获取更新。这个请求通常由JavaScript定时器触发,如`setInterval()`函数。 ```javascript // 每...

    JSP+Ajax网站开发典型实例1.rar

    JSP+Ajax网站开发典型实例1.rar

    servlet+jsp+javaBean+Ajax网上购书管理系统

    综上所述,"servlet+jsp+javaBean+Ajax网上购书管理系统"是一个典型的Web应用实例,结合了多种Java技术,为用户提供了一套完整的网上购书流程。通过深入理解这些技术及其相互作用,开发者可以更好地构建和维护类似的...

Global site tag (gtag.js) - Google Analytics