下面介绍JSP前台表单内容通过Ajax异步提交到后台Servlet进行校验(校验方式多种,包括提取数据库信息,校验用户名是否重复等),异步在JSP表单页面显示校验结果信息的基本过程。
一、说明:
1.由于本文只限于介绍JSP+Servlet+Ajax运用的基本流程,重点不在于后台数据库的访问和校验内容,因此省略Servlet对数据库的访问。
二、基本流程:
1. JSP页面login.jsp提供一个表单“form”,表单中有两个“text”类型的输入框,其中我们将用第一个输入框来做实验。
在第一个输入框中(输入用户名),通过onblur=validate();,当用户光标离开输入框时,触发JS函数validate() ,函数validate()在Ajax.js文件中声明。
- <%@page contentType="text/html" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <script type="javascript" src="Ajax.js"></script>
- </head>
- <body>
- <h1>Test Ajax</h1><p>
- <form action="" method="get" name="form">
- <br>
- 输入用户名:
- <input type="text" size="10" maxlength="8" id="userName" name="name" onblur="validate()">
- <span id="info"></span>
- <br>
- 输入商品名:
- <input type="text" size="10" maxlength="8" >
- </form>
- </body>
- </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")来获取。
- var url = "validate.do?id=" + escape(idField.value);
2.1.3、 通过if()语句以兼容IE,Firefox等多个浏览器版本的方式创建一个XMLHttpRequest对象。
- if(window.XMLHttpRequest) {
- //IE7, Firefox, Opera支持
- req = new XMLHttpRequest();
- }else if(window.ActiveXObject) {
- //IE5,IE6支持
- req = new ActiveXObject("Microsoft.XMLHTTP");
- }
2.1.4、调用XMLHttpRequest对象函数open()准备向servlet发送请求(此时只是“准备发送”,并没有发送)
- req.open("GET", url, true);
2.1.5、 调用XMLHttpRequest对象函数send(param)向servlet发送请求。param参数的值null(关于send()方法使用请另外查阅)
- req.send(null);
2.1.6、调用一个触发事件onreadystatechange,每当 readyState 改变时,onreadystatechange 函数就会被执行。readyState有5个可能值:0:请求未初始化(在调用open()之前);1:请求已经提出(调用send()之前);2:请求已经发送(这里通常可以从响应得到内容头部);3:请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应);4:请求已经完成(可以访问服务器响应并使用它)
- req.onreadystatechange = callback;
2.2、function callback()要点:
2.2.1 XMLHttpRequest.status = 200表示服务器已经成功响应。
通过XMLHttpRequest.responseText获取servlet端的getPrintWriter().write()输出的响应。得到的值是 一个String类型数据。
- var check = req.responseText;
2.3、通过show()函数输出结果到标签标记的位置。
完整的Ajax.js文件:
- var req;
- function validate() {
- //获取表单提交的内容
- var idField = document.getElementById("userName");
- //访问validate.do这个servlet,同时把获取的表单内容idField加入url字符串,以便传递给validate.do
- var url = "validate.do?id=" + escape(idField.value);
- //创建一个XMLHttpRequest对象req
- if(window.XMLHttpRequest) {
- //IE7, Firefox, Opera支持
- req = new XMLHttpRequest();
- }else if(window.ActiveXObject) {
- //IE5,IE6支持
- req = new ActiveXObject("Microsoft.XMLHTTP");
- }
- /*
- open(String method,String url, boolean )函数有3个参数
- method参数指定向servlet发送请求所使用的方法,有GET,POST等
- boolean值指定是否异步,true为使用,false为不使用。
- 我们使用异步才能体会到Ajax强大的异步功能。
- */
- req.open("GET", url, true);
- //onreadystatechange属性存有处理服务器响应的函数,有5个取值分别代表不同状态
- req.onreadystatechange = callback;
- //send函数发送请求
- req.send(null);
- }
- function callback() {
- if(req.readyState == 4 && req.status == 200) {
- var check = req.responseText;
- show (check);
- }
- }
- function show(str) {
- if(str == "OK") {
- var show = "<font color='green'>恭喜!!用户名可用!</font>";
- document.getElementById("info").innerHTML = show;
- }
- else if( str == "NO") {
- var show = "<font color='red'>对不起,用户名不可用!!请重新输入!</font>";
- document.getElementById("info").innerHTML = show;
- }
- }
三、servlet处理:
重点1:通过以下几行代码设置浏览器不进行Ajax处理页面的缓存(如果出现缓存,将导致一些不可预知的麻烦)
- response.setContentType("text/html");
- response.setHeader("Cache-Control", "no-store");
- response.setHeader("Pragma", "no-cache");
- response.setDateHeader("Expires", 0);
重点2:通过request.getParameter()来获取Ajax传递的参数。
- String name = request.getParameter("id");
重点3:通过response.getWriter().write()向Ajax输出参数,在Ajax一端通过var check = XMLHttpRequest.responseText获取参数值。
- if(name.equals("1")) {
- out.write("OK");
- }
- else {
- out.write("NO");
- }
完整的servlet代码:
- package com.model;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class DoAjaxServlet extends HttpServlet {
- protected void processRequest(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter out = response.getWriter();
- try {
- response.setContentType("text/html");
- response.setHeader("Cache-Control", "no-store");
- response.setHeader("Pragma", "no-cache");
- response.setDateHeader("Expires", 0);
- String name = request.getParameter("id");
- if(name.equals("1")) {
- out.write("OK");
- }
- else {
- out.write("NO");
- }
- } finally {
- out.close();
- }
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- processRequest(request, response);
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- processRequest(request, response);
- }
- @Override
- public String getServletInfo() {
- return "Short description";
- }
- }
最后,记得在web.xml配置文件中配置这个servlet:
- <servlet>
- <servlet-name>DoAjaxServlet</servlet-name>
- <servlet-class>com.model.DoAjaxServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>DoAjaxServlet</servlet-name>
- <url-pattern>/validate.do</url-pattern>
- </servlet-mapping>
相关推荐
**JSP+Ajax实例演示详解** 在Web开发中,JSP(JavaServer Pages)和Ajax(Asynchronous JavaScript and XML)是两种常见的技术,它们结合使用能够实现动态、交互性强的网页应用。本实例演示将深入讲解如何利用JSP和...
**JSP+Ajax 经典开发实例** 在Web开发领域,JSP(JavaServer Pages)与Ajax(Asynchronous JavaScript and XML)的结合是构建动态、交互性网页的强大工具。本经典实例深入探讨了如何利用这两种技术来提升用户体验,...
**JSP+Ajax实例2** 可能涵盖的专题可能包括: 1. 数据验证:在用户输入数据后,使用Ajax向服务器发送请求验证数据的有效性,如邮箱格式检查。 2. 动态加载内容:当用户滚动页面时,通过Ajax请求加载更多内容,如无限...
《JSP+Ajax网站开发典型实例》是针对Web开发领域的一种技术组合的实践教程,主要讲解如何使用JavaServer Pages(JSP)与Asynchronous JavaScript and XML(Ajax)来构建动态、交互性强的Web应用程序。本实例集的第一...
总的来说,"JSP+Ajax无刷新树型菜单数据库版"是一个结合了前后端技术的实例,展示了如何利用JSP构建用户界面,通过Ajax实现动态数据加载,同时利用SQL管理数据库,从而提供了一个高效、交互性强的树型菜单系统。...
【标题】"java+jsp+ajax+jst+jquery实例"涉及了Web开发中的多个关键技术和实践,主要关注Java后端、JSP(Java Server Pages)前端、Ajax(Asynchronous JavaScript and XML)、JST(JavaScript Templates)以及...
**JSP+Ajax 进度条** 在Web开发中,为用户提供实时的进度反馈是非常重要的,尤其是在执行耗时操作如文件上传、数据处理等场景。JSP(JavaServer Pages)和Ajax(Asynchronous JavaScript and XML)结合使用可以实现...
【基于jsp+servlet+Ajax异步登陆模拟web项目】是一个典型的Web开发实例,它整合了三种核心技术:JavaServer Pages(JSP)、Servlet以及Asynchronous JavaScript and XML(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与JavaServer Pages (JSP) 结合,创建高效动态的Web应用。 1. **Ajax基础** Ajax的核心是JavaScript对象XMLHttpRequest,它允许JavaScript在...
标题"jsp+ajax自动刷新实例.zip"揭示了这是一个关于使用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(Ajax)技术实现页面自动刷新的实例项目。这里的关键词是“jsp”和“ajax”,它们是Web开发中的...
JSP+AJax网站实例 提供给JSP初学者 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计...
【jsp+Ajax开发实例详解】 在Web开发领域,JSP(JavaServer Pages)与Ajax(Asynchronous JavaScript and XML)的结合应用广泛,尤其在构建动态交互的网页时,它们能够提供卓越的用户体验。Ajax允许在不刷新整个...
在IT领域,构建Web应用程序是常见的任务之一,而本示例提供了一个基于JSP、JavaBean、Servlet、Ajax以及Mysql的完整应用实例,主要涵盖了数据的增删查改(CRUD)操作,并且利用Ajax实现了异步的验证码验证功能。...
【标题】"jsp+servlet+ajax+easyui学生管理系统"是一个典型的Web应用程序开发实例,它结合了多种技术来实现一个高效、用户友好的学生管理平台。这个项目对于初学者来说是一个很好的起点,可以帮助他们理解如何在实际...
《JSP+Ajax网站开发典型实例》第二部分的压缩包包含了一系列有关Web应用程序开发的实践教程,主要聚焦于使用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(Ajax)技术。这一组合在现代Web应用中广泛...
在“jsp+ajax自动刷新实例”中,`autoRefresh.jsp` 可能是一个包含AJAX调用的JSP页面,它负责定期向服务器发送请求以获取更新。这个请求通常由JavaScript定时器触发,如`setInterval()`函数。 ```javascript // 每...
JSP+Ajax网站开发典型实例1.rar
综上所述,"servlet+jsp+javaBean+Ajax网上购书管理系统"是一个典型的Web应用实例,结合了多种Java技术,为用户提供了一套完整的网上购书流程。通过深入理解这些技术及其相互作用,开发者可以更好地构建和维护类似的...