快速了解Ajax·全局刷新和局部刷新(Ajax)

快速了解Ajax

全局刷新和局部刷新(Ajax)

全局刷新:整个浏览器被新的数据覆盖,需要在网络中传输大量的数据。浏览器需要加载,渲染页面。相当于我们正常点击访问网站的方式。
局部刷新:在浏览器的内部,发起请求,获取数据,改变页面的部分内容。其余的页面无需加载和渲染,网络中的数据传输量少,给用户感觉好。
而我们网页的局部刷新使用的就是Ajax!

全局刷新

首先我们编辑一个小程序来更好的理解什么叫做全局刷新。
bmiindex.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    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">
<title>全局刷新</title>
</head>
<body>
	<p>全局刷新计算bmi</p>
	<form action="bmiServlet" method="get">
		姓名:<input type="text" name="name"/>
		体重(公斤):<input type="text" name="w"/>
		身高(米):<input type="text" name="h"/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

BmiPrintServlet.java

package com.test.controller;
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 BmiPrintServlet extends HttpServlet {
    
    
	public BmiPrintServlet() {
    
    
		// TODO Auto-generated constructor stub
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		//接收请求参数
				String name = req.getParameter("name");
				String height = req.getParameter("h");
				String weight = req.getParameter("w");
				
				//计算bmi bmi = 体重/身高的平方
				float h = Float.valueOf(height);
				float w = Float.valueOf(weight);
				float bmi = w / (h * h);
				//判断bmi的范围
				String msg = "";
				if(bmi <= 18.5){
    
    
					msg = "您比较瘦";
				}else if(bmi > 18.5 && bmi <= 23.9){
    
    
					msg = "你的bmi是正常的";			
				}else if(bmi > 23.9 && bmi <= 27){
    
    
					msg = "你的身体比较胖";
				}else{
    
    
					msg = "你的身体肥胖";
				}
				msg = "您好:"+name+"先生/女士,您的bmi的值是:"+bmi+","+msg;
				// 使用HttpServletResponse输出数据
				resp.setContentType("text/html;charset=utf-8");
				// 输出PrintWriter
				PrintWriter pw = resp.getWriter();
				//输出数据
				pw.println(msg);
				//清空缓存:可以加速网页加载
				pw.flush();
				//关闭pw
				pw.close();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
	}

}

web.xml

<!-- HttpServletResponse输出数据 -->
  <servlet>
  		<servlet-name>BmiPrintServlet</servlet-name>
  		<servlet-class>com.test.controller.BmiPrintServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>BmiPrintServlet</servlet-name>
  	<url-pattern>/bmiPrint</url-pattern>
  </servlet-mapping>

打开bmiindex.jsp
在这里插入图片描述
输入你的基本信息,点击提交。
在这里插入图片描述
这种提交全局刷新后显示的过程叫做全局刷新。

局部刷新(Ajax)

上边讲到了全局刷新,现在讲一下使用ajax的局部刷新。
在使用ajax进行网页局部刷新时,主要使用XMLHttpRequest异步对象完成的。
1.首先,新建jsp,使用XMLHttpRequest异步对象。
使用异步对象有以下四个步骤:

  • 创建
  • 绑定事件
  • 初始化请求
  • 发送请求
    2.然后,创建服务器的servlet,接收并处理数据,把数据输出给异步对象。
    ajaxbmiindex.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
    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">
<title>ajax局部刷新</title>
	<script type="text/javascript">
		//使用内存的异步对象,代替浏览器发送请求。异步对象使用js创建和管理的。
		function doAjax() {
     
     
			// 1.创建异步对象
			var xmlHttp = new XMLHttpRequest();
			// 2.绑定事件
			xmlHttp.onreadystatechange = function() {
     
     
				// 处理服务器返回的数据,更新当前页面
				if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
     
     
					var data = xmlHttp.responseText;
					document.getElementById("mydata").innerText = data;
				}
			}
			// 获取dom对象的value属性值
			var name  = document.getElementById("name").value;
			var w = document.getElementById("w").value;
			var h = document.getElementById("h").value;
			var param = "name="+name+"&w="+w+"&h="+h;
			// 3.初始请求数据
			xmlHttp.open("get", "bmiAjax?"+param, true);
			// 4.发起请求
			xmlHttp.send();
		}
	</script>
</head>

<body>
	姓名:<input type="text" id="name"/><br>
	体重(公斤):<input type="text" id="w"/><br>
	身高(米):<input type="text" id="h"/><br>
	<input type="button" value="计算bmi" onclick="doAjax()"/>
	<p id = "mydata"></p>

</body>
</html>

可以看到我们的提交已经不是通过form表单完成,而是使用了doAjax()这个点击事件,使用内存的异步对象,代替浏览器发送请求,而异步对象使用js创建和管理的。
注意点:var param = “name=”+name+"&w="+w+"&h="+h;此处就是在模拟get方式的数据发送格式。

BmiAjaxServlet.java

package com.test.controller;
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 BmiAjaxServlet extends HttpServlet {
    
    
	public BmiAjaxServlet() {
    
    
		// TODO Auto-generated constructor stub
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		//接收请求参数
		String name = req.getParameter("name");
		String height = req.getParameter("h");
		String weight = req.getParameter("w");
		
		//计算bmi bmi = 体重/身高的平方
		float h = Float.valueOf(height);
		float w = Float.valueOf(weight);
		float bmi = w / (h * h);
		//判断bmi的范围
		String msg = "";
		if(bmi <= 18.5){
    
    
			msg = "您比较瘦";
		}else if(bmi > 18.5 && bmi <= 23.9){
    
    
			msg = "你的bmi是正常的";			
		}else if(bmi > 23.9 && bmi <= 27){
    
    
			msg = "你的身体比较胖";
		}else{
    
    
			msg = "你的身体肥胖";
		}
		msg = "您好:"+name+"先生/女士,您的bmi的值是:"+bmi+","+msg;
		// 相应ajax的数据,使用HttpServletResponse输出数据
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter pw = resp.getWriter();
		pw.println(msg);
		pw.flush();
		pw.close();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub	
	}
}

这个servlet服务器的代码和全局刷新区别不大,最大的区别就是他是回调到发起请求的那个页面。
运行ajaxbmiindex.jsp,输入相应信息。
在这里插入图片描述
点击计算bmi。
在这里插入图片描述
回调信息直接显示在页面上,其他地方都没有改变,这就是我们使用ajax完成的局部刷新。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zjlwdqca/article/details/112612927