Ajax(Asynchronous Javascript and XML),异步的Javascript与XML,强调异步。
所谓异步,就是前一个操作还没完成,就可以进行下一个操作,提高用户体验,页面可以局部刷新,减少网络传输流量
1、Ajax中的一个重要对象是XMLHttpRequest。
2、使用Ajax准备向服务器端发送请求:xmlHttpRequest.open("GET","AjaxServlet",true);
一个Ajax使用实例:
<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"UTF-8"%>
<%
String path &#61; request.getContextPath();
String basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";
%>
">
调用的Servlet&#xff1a;
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 AjaxServlet extends HttpServlet
{
&#64;Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
PrintWriter out &#61; resp.getWriter();
System.out.println("doGet invoke");
out.println("hello world");
out.flush();
}
}
对于上面的程序&#xff0c;如果在firefox中进行测试&#xff0c;点击一次按钮&#xff0c;就会在MyEclipse控制台打印一次doGet invoke&#xff0c;但是如果使用IE浏览器&#xff0c;则只是在第一次点击按钮时打印doGet invoke&#xff0c;此后再按就没有打印信息了。
上述原因是因为IE缓存的问题&#xff0c;将Servlet进行修改如下&#xff1a;
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 AjaxServlet extends HttpServlet
{
&#64;Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
PrintWriter out &#61; resp.getWriter();
try
{
Thread.sleep(5000);
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("doGet invoke");
resp.setHeader("pragma", "no-cache");
resp.setHeader("cache-control", "no-cache");
out.println("hello world");
out.flush();
}
}
IE每次点击按钮都打印。
3、带参数的ajax实例 分别使用GET和POST进行传递&#xff1a;
页面ajax.jsp
<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"UTF-8"%>
<%
String path &#61; request.getContextPath();
String basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";
%>
">
接收请求的Servlet&#xff1a;
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 AjaxServlet extends HttpServlet
{
&#64;Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
process(req, resp);
}
private void process(HttpServletRequest req, HttpServletResponse resp)
throws IOException
{
String v1 &#61; req.getParameter("v1");
String v2 &#61; req.getParameter("v2");
System.out.println("v1&#61;" &#43; v1 &#43; " v2&#61;" &#43; v2);
String v3 &#61; String.valueOf(Integer.valueOf(v1) &#43; Integer.valueOf(v2));
PrintWriter out &#61; resp.getWriter();
/*
try
{
Thread.sleep(5000);
}
catch(Exception e)
{
e.printStackTrace();
}
*/
System.out.println("doGet invoke");
resp.setHeader("pragma", "no-cache");
resp.setHeader("cache-control", "no-cache");
out.println(v3);
out.flush();
}
&#64;Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
System.out.println("doPost invoke");
this.process(req, resp);
}
}