Java Servlet Ajax发送Get和Post请求并通过onreadystatechange响应

本文详细介绍了Ajax的概念、用途、内部原理及使用方法,包括GET和POST两种请求方式。Ajax允许网页在不刷新整个页面的情况下与服务器交换数据,提升了用户体验。文中通过实例展示了创建XMLHttpRequest对象、发送请求以及获取响应数据的步骤,并提供了相应的JavaScript代码示例。

1. Ajax是什么

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术 , 它并不是一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成:

  1. 使用CSS和XHTML来表示。
  2. 使用DOM模型来交互和动态显示。
  3. 使用XMLHttpRequest来和服务器进行异步通信。
  4. 使用javascript来绑定和调用。

在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目前几乎所有的主流浏览器都支持它。

2. 有什么用?

传统的网页,如果需要更新内容,必须加载整个网页。 如果只需要对网页上的某个内容进行局部刷新, 那么就需要使用到Ajax了。 它可以让我们无需重新加载全部网页内容,即可完成对某个部分的内容执行刷新 。

最典型的的例子, 莫过于大家在注册网站的时候, 输入的用户名,会自动的提示我们,该用户已被注册。

3. 内部原理

诚如我们前面所说的, Ajax 并不是一项新技术。而是包装了现有的技术,然后使用他们来完成工作而已。

那么现在给大家举个例子, 还是以咱们的判断用户名是否已被注册为例。

传统方式:

  1. 输入用户名,
  2. 点击一个按钮,校验。
  3. 把数据提交给服务器
  4. 服务器在后台帮助我们完成校验,并且反馈信息。
  5. 我们在浏览器上提示用户,给出结果

Ajax方式:

ajax方式与前面的方式其实从要做的事情来说,是一样的。 ajax也没有牛到,不用去访问服务器就知道你的用户名是否已被占用。那么它是如何工作的呢?

  1. 通过JS 获取咱们的输入框文本内容 document.getElementById(“username”).value

  2. 通过XmlHttpRequest 去执行请求。 XmlHttpRequest 其实就是 XML + http + Request 的组合。

  3. 请求结束后,收到结果, 再使用 js 去完成提示。

  4. 可以在顺便配合 css 样式来增加提示效果。

4. 怎么使用?

4.1 数据请求 Get

4.1.1 创建对象 Get

function  ajaxFunction(){
	var xmlHttp;
	try{ // Firefox, Opera 8.0+, Safari
	    	xmlHttp=new XMLHttpRequest();
	 }
	catch (e){
	 try{// Internet Explorer
	     	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
	 }
	 catch (e){
	    try{
	       		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	 	}
	    catch (e){}
	}
 }

	return xmlHttp;
 }

4.1.2 发送请求 Get

// 执行get请求
function get(){
	
	// 1.创建xmlhttprequest对象
	var request = ajaxFunction();
	
	// 2.发送请求
	/*	
		参数一: 请求类型  GET or  POST
		参数二: 请求的路径
		参数三: 是否异步, true  or false
	*/
	//request.open("GET","/Ajax/DemoServlet01",true);
	request.open("GET","/Ajax/DemoServlet01?name=aa&age=18",true);
	request.send();
}

4.1.3 发送请求的同时获取数据 Get

// 发送请求的同时获取数据
function get2(){
	
	// 1.创建xmlhttprequest对象
	var request = ajaxFunction();
	
	// 2.发送请求
	/*	
		参数一: 请求类型  GET or  POST
		参数二: 请求的路径
		参数三: 是否异步, true  or false
	*/
	//request.open("GET","/Ajax/DemoServlet01",true);
	request.open("GET","/Ajax/DemoServlet01?name=aa&age=18",true);
	
	// 3.获取响应数据,注册监听的意思。
	// 一会准备的状态发生了改变,那么就执行 = 号右边的方法
	request.onreadystatechange = function(){
		
		//前半段表示 已经能够正常处理。  再判断状态码是否是200
		if(request.readyState == 4 && request.status == 200){
			// 收到数据,进行处理(这里弹出响应的信息)
			alert(request.responseText);
		}
	}
	
	request.send();
}

4.1.4 例子 Get

DemoServlet01.java:

package com.tx.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class DemoServlet01 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println("收到了一个请求..." +name+"="+age);
		
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("收到了请求...");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

demo01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<script type="text/javascript">

	function  ajaxFunction(){
		var xmlHttp;
		try{ // Firefox, Opera 8.0+, Safari
		    	xmlHttp=new XMLHttpRequest();
		 }
		catch (e){
		 try{// Internet Explorer
		     	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		 }
		 catch (e){
		    try{
		       		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		 	}
		    catch (e){}
		}
	 }

		return xmlHttp;
	 }
	
	// 执行get请求
	function get(){
		
		// 1.创建xmlhttprequest对象
		var request = ajaxFunction();
		
		// 2.发送请求
		/*	
			参数一: 请求类型  GET or  POST
			参数二: 请求的路径
			参数三: 是否异步, true  or false
		*/
		//request.open("GET","/Ajax/DemoServlet01",true);
		request.open("GET","/Ajax/DemoServlet01?name=aa&age=18",true);
		request.send();
	}
	
	// 发送请求的同时获取数据
	function get2(){
		
		// 1.创建xmlhttprequest对象
		var request = ajaxFunction();
		
		// 2.发送请求
		/*	
			参数一: 请求类型  GET or  POST
			参数二: 请求的路径
			参数三: 是否异步, true  or false
		*/
		//request.open("GET","/Ajax/DemoServlet01",true);
		request.open("GET","/Ajax/DemoServlet01?name=aa&age=18",true);
		
		// 3.获取响应数据,注册监听的意思。
		// 一会准备的状态发生了改变,那么就执行 = 号右边的方法
		request.onreadystatechange = function(){
			
			//前半段表示 已经能够正常处理。  再判断状态码是否是200
			if(request.readyState == 4 && request.status == 200){
				// 收到数据,进行处理(这里弹出响应的信息)
				alert(request.responseText);
			}
		}
		
		request.send();
	}

</script>

</head>
<body>

	<h3><a href="" onclick="get()">使用Ajax方式发送Get请求</a></h3>
	<h3><a href="" onclick="get2()">使用Ajax方式发送Get请求,并响应</a></h3>

</body>
</html>

在这里插入图片描述

4.2 数据请求 Post

4.2.1 创建对象 Post

	// 1. 创建对象
	function  ajaxFunction(){
		var xmlHttp;
		try{ // Firefox, Opera 8.0+, Safari
		    	xmlHttp=new XMLHttpRequest();
		 }
		catch (e){
		 try{// Internet Explorer
		     	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		 }
		 catch (e){
		    try{
		       		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		 	}
		    catch (e){}
		}
	 }

		return xmlHttp;
	 }

4.2.2 发送请求 Post

	// 2. 发送Post请求
	function post() {
		//1. 创建对象
		var request = ajaxFunction();
		
		//2. 发送请求
		request.open( "POST", "/Ajax/DemoServlet01", true );
		
		// 不带数据
		// request.send(); 
		
 		//如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
		request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		
		//带数据过去  , 在send方法里面写表单数据。 
		request.send("name=tx&age=19"); 
	}

4.2.3 发送请求并接收响应 Post

	// 2. 发送Post请求并获取响应数据
	function post2() {
		//1. 创建对象
		var request = ajaxFunction();
		
		//2. 发送请求
		request.open( "POST", "/Ajax/DemoServlet01", true );
		
		//想获取服务器传送过来的数据, 加一个状态的监听。 
 		request.onreadystatechange=function(){
			if(request.readyState==4 && request.status == 200){
				alert("post:"+request.responseText);
			}
		} 
		
		//如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
		request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		
		//带数据过去  , 在send方法里面写表单数据。 
		request.send("name=tx&age=19");
	}

4.2.4 示例 Post

在这里插入图片描述
DemoServlet01.java

package com.tx.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class DemoServlet01 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println("收到了一个请求..." +name+"="+age);
		
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("收到了请求...");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("来了一个Post请求,走get代码...");
		doGet(request, response);
	}

}

demo02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<script type="text/javascript">

	// 1. 创建对象
	function  ajaxFunction(){
		var xmlHttp;
		try{ // Firefox, Opera 8.0+, Safari
		    	xmlHttp=new XMLHttpRequest();
		 }
		catch (e){
		 try{// Internet Explorer
		     	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		 }
		 catch (e){
		    try{
		       		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		 	}
		    catch (e){}
		}
	 }

		return xmlHttp;
	 }
	
	// 2. 发送Post请求
	function post() {
		//1. 创建对象
		var request = ajaxFunction();
		
		//2. 发送请求
		request.open( "POST", "/Ajax/DemoServlet01", true );
		
		// 不带数据
		// request.send(); 
		
 		//如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
		request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		
		//带数据过去  , 在send方法里面写表单数据。 
		request.send("name=tx&age=19"); 
	}
	
	// 2. 发送Post请求并获取响应数据
	function post2() {
		//1. 创建对象
		var request = ajaxFunction();
		
		//2. 发送请求
		request.open( "POST", "/Ajax/DemoServlet01", true );
		
		//想获取服务器传送过来的数据, 加一个状态的监听。 
 		request.onreadystatechange=function(){
			if(request.readyState==4 && request.status == 200){
				alert("post:"+request.responseText);
			}
		} 
		
		//如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
		request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		
		//带数据过去  , 在send方法里面写表单数据。 
		request.send("name=tx&age=19");
	}


</script>

</head>
<body>

	<h3><a href="" onclick="post()">使用Ajax方式发送Post请求</a></h3>
	<h3><a href="" onclick="post2()">使用Ajax方式发送Post请求,并响应</a></h3>

</body>
</html>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值