Java Web——Ajax的理解与第一个实例

简介: Java Web——Ajax的理解与第一个实例

文章目录:


1.什么是Ajax

1.1 全局刷新

1.2 局部刷新 

2.AJAX - 创建 XMLHttpRequest 异步请求对象 

XMLHttpRequest 对象

3.AJAX - 向服务器发送请求请求 

异步 - True False

4.AJAX - 服务器 响应 

服务器响应

5.AJAX - onreadystatechange 事件

onreadystatechange 事件

6.AJAX的第一个例子(接收参数并计算bmi指数)

6.1 pom.xml中加入相关依赖

6.2 写一个Servlet接收并处理请求

6.3 web.xml中注册这个Servlet

6.4 index.jsp中写一个Ajax处理页面

6.5 在火狐中查看一下输出结果

1.什么是Ajax


AJAX = Asynchronous JavaScript and XML(异步的 JavaScript XML)。

AJAX不是新的编程语言,而是一种使用现有标准的新方法。

AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

AJAX不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

AJAX = 异步 JavaScript XML

AJAX是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

AJAX的工作原理如下图:👇👇👇


1.1 全局刷新

登录请求处理:index.jsp 发起登录请求--------LoginServlet--------result.jsp

发起请求 request 阶段:浏览器现在内存中是 index 页面的内容和数据

服务器端应答结果阶段:sevlet 返回后把数据全部覆盖掉原来 index 页面内容, result.jsp 覆盖了全部的浏览器内存数据。整个浏览器数据全部被刷新。重新在浏览器窗口显示数据,样式,标签等 

全局刷新原理:
1)
必须由浏览器亲自向服务端发送请求协议包。

2) 这个行为导致服务端直接将【响应包】发送到浏览器内存中

3) 这个行为导致浏览器内存中原有内容被覆盖掉

4) 这个行为导致浏览器在展示数据时候,只有响应数据可以展示 


1.2 局部刷新 

AJAX实现局部刷新的一种技术。浏览器在展示数据时,此时在窗口既可以看到本次的响应数据,同时又可以看到浏览器内存中原有数据。局部刷新原理:

1)不能由浏览器发送请求给服务端

2)浏览器委托浏览器内存中一个脚本对象代替浏览器发送请求.
3)
这个行为导致导致服务端直接将【响应包】发送脚本对象内存中
4)
这个行为导致脚本对象内容被覆盖掉,但是此时浏览器内存中绝大部分内容没有收到任何影响.
5)
这个行为导致浏览器在展示数据时候,同时展示原有数据和响应数据

2.AJAX - 创建 XMLHttpRequest 异步请求对象


XMLHttpRequest 对象

在局部刷新,需要创建一个对象,代替浏览器发起请求的行为,这个对象存在内存中。代替浏览器发起请求并接收响应数据。这个对象叫做异步请求对象。全局刷新是同步行为,局部刷新是异步行为[浏览器数据没有全部更新]

这个异步对象用于在后台与服务器交换数据。XMLHttpRequest 就是我们说的异步对象。

XMLHttpRequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

XMLHttpRequest对象能够:
在不重新加载页面的情况下更新网页
在页面已加载后向服务器请求数据
在页面已加载后从服务器接收数据

创建 XMLHttpRequest 对象的语法(xhr):

var xmlhttp=new XMLHttpRequest();

AJAX中的核心对象就是 XMLHttpRequest

3.AJAX - 向服务器发送请求请求


如需将请求发送到服务器,我们使用 XMLHttpRequest对象的 open() send() 方法:

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

方法

描述

open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

·        method:请求的类型;GET POST

·        url:文件在服务器上的位置

·        asynctrue(异步)或 false(同步)

send(string)

将请求发送到服务器。

·        string:仅用于 POST 请求


异步 - True False

AJAX指的是异步 JavaScript XMLAsynchronous JavaScript and XML)。

XMLHttpRequest对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true

xmlhttp.open("GET","ajax_test.html",true);

对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

通过 AJAXJavaScript 无需等待服务器的响应,而是:

·       在等待服务器响应时执行其他脚本

·       当响应就绪后对响应进行处理

4.AJAX - 服务器 响应


服务器响应

如需获得来自服务器的响应,请使用 XMLHttpRequest对象的 responseText responseXML 属性。


属性

描述

responseText

获得字符串形式的响应数据。

responseXML

获得 XML 形式的响应数据。

5.AJAX - onreadystatechange 事件


onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触 onreadystatechange 事件。此事件可以指定一个处理函数 function。通过判断 XMLHttpReqeust 对象的状态,获取服务端返回的数据。

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

属性

描述

onreadystatechange

存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

readyState

存有 XMLHttpRequest 的状态。从 0 4 发生变化。

·        0: 请求未初始化,创建异步请求对象 var xmlHttp = new XMLHttpRequest()

·        1: 服务器连接已建立,xmlHttp.open(请求方式,请求地址,true)

·        2: 请求已接收,xmlHttp.send()

·        3: 请求处理中,从服务端返回数据。XMLHttpRequest 内部处理

·        4: 请求已完成,且响应已就绪,此时才可以读取数据

status

200: "OK"
404:
未找到页面

onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

readyState 等于 4 且状态为 200 时,表示响应已就绪。

6.AJAX的第一个例子(接收参数并计算bmi指数)


6.1 pom.xml中加入相关依赖

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

6.2 写一个Servlet接收并处理请求

package com.songzihao.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 *
 */
public class BmiServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("===接收了ajax的请求===");
        //接收请求参数
        String strName=request.getParameter("name");
        String strW=request.getParameter("w");
        String strH=request.getParameter("h");
        //String转为Float
        Float w=Float.valueOf(strW);
        Float h=Float.valueOf(strH);
        //计算bmi
        Float bmi=w/(h*h);
        String info="";
        if (bmi<18.5) {
            info="比较瘦";
        }else if (bmi>=18.5 && bmi<24) {
            info="正常范围";
        }else {
            info="比较胖";
        }
        info=strName + "先生|女士,您的bmi是[" + bmi + "]," + info;
        //使用HttpServletResponse对象输出数据,响应请求
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw=response.getWriter();
        pw.println(info);
        pw.flush();//清空缓存
        pw.close();//关闭
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}


6.3 web.xml中注册这个Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>BmiServlet</servlet-name>
        <servlet-class>com.songzihao.controller.BmiServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BmiServlet</servlet-name>
        <url-pattern>/bmiServlet</url-pattern>
    </servlet-mapping>
</web-app>

6.4 index.jsp中写一个Ajax处理页面

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>使用ajax计算bmi</title>
    <script type="text/javascript">
        function doAjax() {
            alert("button click");
            //使用XMLHttpRequest做ajax局部刷新
            //1.创建异步对象
            var xhr=new XMLHttpRequest();
            //2.绑定事件
            xhr.onreadystatechange = function () {
                console.log("===onreadystatechange===,属性readyState=" + xhr.readyState + ",status=" + xhr.status);
                if (xhr.readyState==4 && xhr.status==200) {
                    //开发人员处理服务器返回的数据,更新dom对象
                    var data=xhr.responseText;
                    document.getElementById("mydiv").innerHTML=data;
                }
            }
            //3.初始请求的参数
            var pname=document.getElementById("name").value;
            var pw=document.getElementById("w").value;
            var ph=document.getElementById("h").value;
            var param="bmiServlet?name=" + pname + "&w=" + pw + "&h=" + ph;
            xhr.open("get",param,true);
            //4.发起请求
            xhr.send();
        }
    </script>
</head>
<body>
    <div align="center">
        <p>ajax请求和form无关,有无form都可以</p>
        <table>
            <tr>
                <td>姓名:</td>
                <td><input type="text" id="name"></td>
            </tr>
            <tr>
                <td>体重:</td>
                <td><input type="text" id="w"></td>
            </tr>
            <tr>
                <td>身高:</td>
                <td><input type="text" id="h"></td>
            </tr>
            <tr>
                <td>操作:</td>
                <td><input type="button" value="ajax请求" onclick="doAjax()"></td>
            </tr>
        </table>
        <br/><br/>
        <div id="mydiv">
            等待更新数据
        </div>
    </div>
</body>
</html>


6.5 在火狐中查看一下输出结果


相关文章
|
2月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
361 1
|
2月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
323 0
|
3月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
483 64
|
2月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
112 0
|
3月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
304 1
|
4月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
220 0
|
4月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
562 0
|
4月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
323 0
|
5月前
|
存储 算法 Java
【Java实例-智慧牌局】Java实现赌桌上的21点
游戏规则:游戏开始时,玩家和庄家各获得两张牌,玩家可以看到自己手中的两张牌以及庄家的一张明牌。玩家需要根据手中的牌面总和,选择“要牌”(Hit)以获取更多牌,或“停牌”(Stand)停止要牌。如果玩家的牌面总和超过21点,即为爆牌,玩家立即输掉游戏。若玩家选择停牌,庄家则开始行动,其策略是当牌面总和小于17点时必须继续要牌。若庄家牌面总和超过21点,则庄家爆牌,玩家获胜。若双方均未爆牌,最终比较牌面总和,更接近21点的一方获胜;若牌面总和相同,则游戏以平局结束。
87 0
|
5月前
|
Java 开发者
【Java实例-英雄对战】Java战斗之旅,既分胜负也决生死
游戏规则:在“英雄对战”中,玩家和敌人轮流选择行动,目标是在对方生命值归零前将其击败。游戏开始时,玩家和敌人都有100生命值。每回合,玩家可以选择“攻击”,“追击”,“闪避反击”这三种行动之一。
75 0
下一篇
oss云网关配置