jsp ajax实例讲解

article/2025/10/6 6:16:53

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

一、说明: 

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

二、基本流程: 

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

        在第一个输入框中(输入用户名),通过οnblur=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>  

 


http://chatgpt.dhexx.cn/article/EjhoqkBM.shtml

相关文章

jqueryajax实例

运用ajax结合dom写的小实例&#xff0c;其中记录了过程中遇到的问题和解决方法 任务要求&#xff1a; 模拟“请求用户列表”&#xff0c;向后台请求&#xff0c;后台会去数据库中将你的用户列表全部查出来&#xff0c;返回很多条记录&#xff0c;现在将记录显示在页面上用表格打…

Ajax简介和实例

目录 什么是 AJAX &#xff1f; AJAX实例 ajax-get无参 ajax-get有参 对象和查询字符串的互转 ajax-post ajax-post 表单 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 什么是 AJAX &#xff1f; 菜鸟教程是这样介绍的&#xff1a…

Ajax实例讲解与技术原理

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 摘要&#xff1a;AJAX即“Asynchronous Javascript And XML”&#xff08;异步JavaScript和XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。AJAX 是一种用于创建快速动态网页的…

jQuery的Ajax实例(附完整代码)

目录 写在前边什么是AjaxAjax基本结构实例实例1实例2 小结 写在前边 作为一个前端刚入门没多久的小白&#xff0c;想在这里分享一下我的学习内容&#xff0c;就算是学习笔记了。因为前端的大部分学习都是通过网站上的教程&#xff0c;所以遇到不懂得问题&#xff0c;也只有求助…

Ajax技术 实例篇

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;本篇文章通过HtmlAjaxnode技术实现一个简单的Ajax请求案例&#xff0c;为加强对Ajax技术的了解和实操经验 实现效果 这是请求前的前端页面&#xff0c;点击两个Button按钮分别发起不…

Ajax-Ajax基础实例

实例一&#xff1a;点击一个按钮&#xff0c;然后将信息显示到指定的div内。 1、创建一个JAVA web工程&#xff0c;命名为AjaxTest。在webRoot创建一个HTML页面&#xff0c;命名为FirstTest.html&#xff0c;FirstTest.html代码如下&#xff1a; <html><head><t…

Ajax最实用的小例子集合

今天我为大家带来了几个非常实用的ajax小例子&#xff0c;都是在工程中经常用到的实用的例子。适合有基础的同学&#xff0c;废话也不多说了&#xff0c;看代码 哦&#xff0c;对了&#xff0c;所有的例子都是用servletjsp实现的 至于三大框架的&#xff0c;我相信&#xff0c;…

Java 网络编程(大全)

前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 一、1网络通信的基本模式分为两种 1.CS模式&#xff08;Client---客户端&#xff0c;Server---服务端&#xff09; 客户端是需要程序员去开发的&#xff0c;例如日常使用的各种的APP&#xff0c…

java游戏编程:三路兵线,BOSS走位,代码和视频

一、基本功能&#xff1a; 坦克大战&#xff1a;三路兵线的走&#xff0c;停&#xff0c;走&#xff0c;停。四个版本的飞机大战&#xff1a;多种运动方式。都有代码和视频下载地址。 二、后续改进&#xff1a; 走&#xff0c;停发起攻击&#xff0c;走&#xff0c;停发起攻击…

Java实现石头剪刀布游戏

思路&#xff1a;采取5局3胜制&#xff1b;用两个变量a、b标记&#xff0c;若&#xff0c;第一局电脑胜&#xff0c;则b加1&#xff0c;反之亦然。其中用到int randomNumber new Random().nextInt(4) 随机生成04的一个数&#xff0c;通过生成的数索引数组中的内容&#xff0c;…

Java实现猜数游戏

1 问题 编写一个Java程序&#xff0c;实现以下功能&#xff1a; 2 方法 首先导入java.util包下的Random&#xff0c;让程序随便分配给用户一个数。 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。 利用Random().nextInt()生成一个随机的i…

Java小游戏:飞翔的小鸟 【附源码和素材】

目录 一、项目分析 二、项目展示 1.开始状态 2.运行状态 3.结束状态 三、实现代码 1.游戏启动类 2.地面类 3.小鸟类 4.柱子类 四、代码资源 一、项目分析 创建一个窗口和画板&#xff0c;把画板放到窗口上&#xff0c;在画板上绘画图片 &#xff08;2&#xff09;让小鸟…

Java——猜数字游戏

目录 &#x1f351;前置知识 &#x1f351;题目要求 &#x1f351;代码实现 &#x1f351;测试 &#x1f351;前置知识 既然是猜数字那么就要生成一个随机数 在Java中要生成一个指定范围之内的随机数字有两种方法&#xff1a;一种是调用 Math 类的 random() 方法&…

Java简单实现猜拳游戏

前言 Random类的简单使用 .nextInt()方法&#xff0c;返回伪随机的&#xff0c;均匀分布 int值介于0&#xff08;含&#xff09;和指定值&#xff08;不包括&#xff09;&#xff0c;从该随机数生成器的序列绘制。 public class Demo_02 {//出拳游戏:1表示石头,2表示剪刀,3表…

java实现猜拳游戏

剪刀、石头、布又称“猜丁壳”&#xff0c;古老而简单&#xff0c;这个游戏的主要目的是为了解决争议&#xff0c;因为三者相互制约&#xff0c;因此不论平局几次&#xff0c;总会有胜负的时候。 游戏规则中&#xff0c;石头克剪刀&#xff0c;剪刀克布&#xff0c;布克石头。…

Java游戏编程前篇 修改eclipse背景颜色

最近准备开始研究java游戏设计了。&#xff08;不是安卓的游戏设计&#xff0c;关于安卓的游戏设计&#xff0c;我打算学完java之后直接学cocos2dx&#xff0c;学习java的原因是因为在公司里接触到了eclipse&#xff0c;所以打算顺便将java也啃下来&#xff0c;以后说不定哪天就…

java游戏开发入门(一) - HelloWorld

java游戏开发入门&#xff08;一&#xff09;- HelloWorld 前言开发环境启程 Hello WorldMaven启动类 HelloWorldApp创建一个600 x 600&#xff0c;标题为"Hello world"的窗体main运行效果完整代码 完整项目 前言 开发一款游戏&#xff0c;我相信很多人在学习开发之前…

JAVA编程实现猜数游戏

1.该程序就是随机生成一个1-100的整数让玩家进行游戏&#xff0c;不限次数&#xff0c;直到玩家猜对为止。 2.使用while循环语句实现功能 3.代码展示 import java.util.Random; import java.util.Scanner;public class S11 {public static void main(String[] args) {Random…

Java游戏框架编写

自己抽空编写的一个2D游戏框架(也可以说是工具类集吧)&#xff0c;在此记录一下&#xff0c;开发完了顺便写了一个案例判断框架的可用性 项目地址&#xff1a;https://gitee.com/shaokang123/spring-game-starter 框架特点 支持直接使用Tiled设计地图&#xff0c;以name为beanN…

Java游戏编程——愤怒的小鸟(一)

Java游戏编程——愤怒的小鸟&#xff08;一&#xff09; 前言&#xff1a;最近在b站up主尚学堂杨老师&#xff08;b站链接&#xff09;学习了我做的第一个游戏项目&#xff0c;所以在csdn进行总结&#xff0c;便于今后查看。 本部分主要是将游戏的背景绘制出来 先上一张效果…