Ajax
AJAX代表异步JavaScript和XML。AJAX是一种借助XML,HTML,CSS和Java Script创建更好,更快,更交互的Web应用程序的新技术。
- Ajax使用XHTML作为内容,CSS使用文档对象模型和JavaScript进行动态内容显示。
- 传统的Web应用程序使用同步请求向服务器和从服务器发送信息。用户填写表单,点击提交,然后从服务器获取包含新信息的新页面。
- 使用AJAX,当点击提交时,JavaScript将向服务器发出请求,响应结果并更新当前屏幕从最纯粹的意义上讲,用户永远不会知道任何东西传输到服务器。
- XML通常用作接收服务器数据的格式,但可以使用任何格式(包括JSON和纯文本等)。
- AJAX是一种独立于Web服务器软件的Web浏览器技术。
- 当客户端程序在后台请求来自服务器的信息时,用户可以继续使用该应用程序。
- 直观和自然的用户交互。单击不是必需的,鼠标移动是一个足够的事件触发器。
- 数据驱动而不是页面驱动。
富Internet应用技术
到目前为止,AJAX是最可行的富Internet应用程序(RIA)技术。 它正在获得巨大的行业动力,并且正在出现一些工具包和框架。 但与此同时,AJAX具有浏览器不兼容性,它受JavaScript支持,难以维护和调试。
AJAX基于开放标准
AJAX基于以下开放标准 -
- 使用HTML和层叠样式表(CSS)的基于浏览器的演示文稿。
- 数据以XML格式存储并从服务器获取。
- 在浏览器中使用XMLHttpRequest对象获取幕后数据。
- JavaScript让一切都有可能。
XMLHttpRequest对象用于客户端和服务器之间的异步通信。
它执行以下操作:
- 从客户端发送数据到服务器后台。
- 从服务器接收数据。
- 更新网页而不需要重新加载页面。
XMLHttpRequest对象的属性
XMLHttpRequest对象的常见属性如下:
onReadyStateChange- 只要readystate属性发生变化,就会调用它。它不能与同步请求一起使用。readyState- 表示请求的状态。范围值从0到4。0- 未打开,未调用open()。1- 已打开,调用open()但不调用send()。2- 标头已接收, 调用send(),并且标题和状态可用。3- 已加载正在下载数据。responseText保存数据。4- 完成,操作完全完成。
reponseText- 以文本形式返回响应。responseXML- 以XML形式返回响应。
XMLHttpRequest对象的方法
XMLHttpRequest对象的重要方法如下:
| 方法 | 描述 |
|---|---|
void open(method, URL) |
打开指定get或post方法和url的请求。 |
void open(method, URL, async) |
与上面相同,但指定异步或不。 |
void open(method, URL, async, username, password) |
与上面相同,但指定用户名和密码。 |
void send() |
发送获取请求。 |
void send(string) |
发送邮件请求。 |
setRequestHeader(header,value) |
它添加了请求标头。 |
AJAX使用XMLHttpRequest对象与服务器通信。我们尝试通过下面显示的图像来了解ajax的流程或ajax的工作原理。

正如在上面的示例中所看到的,XMLHttpRequest对象起着重要作用。
- 用户从UI发送请求,javascript调用转到
XMLHttpRequest对象。 - HTTP请求由
XMLHttpRequest对象发送到服务器。 - 服务器使用JSP,PHP,Servlet,ASP.net等与数据库交互。
- 检索数据。
- 服务器将XML数据或JSON数据发送到
XMLHttpRequest回调函数。 - HTML和CSS数据显示在浏览器上。
Ajax Java示例
要创建ajax示例,需要使用服务器端语言,例如:Servlet,JSP,PHP,ASP.Net等。这里使用JSP来生成服务器端代码。
在这个例子中,只是打印给定数字的表。
使用jsp创建ajax示例的步骤
需要按照以下步骤操作:
- 加载
org.json.jar文件。 - 创建输入页面以接收文本或数字。
- 创建服务器端页面以处理请求。
- 在
web.xml文件中提供条目。
第1步:加载org.json.jar文件
下载此示例,在WEB-INF/lib目录中包含了org.json.jar文件。
第2步:创建输入页面以接收文本或数字
在此页面中,我们创建了一个从用户获取输入的表单。当用户单击showTable按钮时,将调用sendInfo()函数。在这个函数中编写了所有的ajax代码。
只要准备好状态更改,我们就调用了getInfo()函数。它通过innerHTML属性动态地将返回的数据写入网页。
文件:table1.html
<html>
<head>
<script>
var request;
function sendInfo() {
var v = document.vinform.t1.value;
var url = "index.jsp?val=" + v;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
try {
request.onreadystatechange = getInfo;
request.open("GET", url, true);
request.send();
}
catch (e) {
alert("Unable to connect to server");
}
}
function getInfo() {
if (request.readyState == 4) {
var val = request.responseText;
document.getElementById('amit').innerHTML = val;
}
}
</script>
</head>
<body>
<marquee>
<h1>This is an example of ajax</h1>
</marquee>
<form name="vinform">
<input type="text" name="t1">
<input type="button" value="ShowTable" onClick="sendInfo()">
</form>
<span id="amit"> </span>
</body>
</html>
第3步:创建服务器端页面以处理请求
在这个jsp页面中,我们打印给定数字的表格。
文件:index.jsp
<%
int n=Integer.parseInt(request.getParameter("val"));
for(int i=1;i<=10;i++)
out.print(i*n+"<br>");
%>
文件:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>table1.html</welcome-file>
</welcome-file-list>
</web-app>
输出结果如下 -

Ajax Java数据库示例
在此示例中,我们使用Ajax与数据库进行交互。无需太多的代码。仅在服务器端页面中写入数据库逻辑。
在这个例子中,在index.jsp文件中编写了服务器端代码。
通过jsp使用数据库创建ajax示例的步骤
需要按照以下步骤操作:
- 加载
org.json.jar文件 - 创建输入页面以接收文本或数字
- 创建服务器端页面以处理请求
第1步:加载org.json.jar文件
下载此示例,在WEB-INF/lib目录中放入org.json.jar文件。
第2步:创建输入页面以接收文本或数字
在此页面中,我们创建了一个从用户获取输入的表单。当用户按任意键时,调用sendInfo()函数。在这个函数中编写了所有的ajax代码。
只要准备好状态更改,就调用了getInfo()函数。它通过innerHTML属性动态地将返回的数据写入网页。
文件:table1.html
<html>
<head>
<script>
var request;
function sendInfo() {
var v = document.vinform.t1.value;
var url = "index.jsp?val=" + v;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
try {
request.onreadystatechange = getInfo;
request.open("GET", url, true);
request.send();
} catch (e) { alert("Unable to connect to server"); }
}
function getInfo() {
if (request.readyState == 4) {
var val = request.responseText;
document.getElementById('amit').innerHTML = val;
}
}
</script>
</head>
<body>
<marquee>
<h1>This is an example of ajax</h1>
</marquee>
<form name="vinform">
Enter id:<input type="text" name="t1" onkeyup="sendInfo()">
</form>
<span id="amit"> </span>
</body>
</html>
第3步:创建服务器端页面以处理请求
在这个jsp页面中,我们打印给定id的员工的编号和姓名。
文件:index.jsp
<%@ page import="java.sql.*"%>
<%
String s=request.getParameter("val");
if(s==null || s.trim().equals("")){
out.print("Please enter id");
}else{
int id=Integer.parseInt(s);
out.print(id);
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mdb","root","root");
PreparedStatement ps=con.prepareStatement("select * from emp where id=?");
ps.setInt(1,id);
ResultSet rs=ps.executeQuery();
while(rs.next()){
out.print(rs.getInt(1)+" "+rs.getString(2));
}
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
%>
执行上面项目示例代码,得到类似以下结果 -


Java AJAX电子邮件检验示例
我们可以在Java中创建一个AJAX示例,用于检查数据库中是否存在给定的电子邮件ID。
使用Java中的AJAX创建电子邮件查找器示例的步骤
需要按照以下步骤操作:
- 在数据库中创建表
- 加载org.json.jar文件
- 创建输入表单
- 创建服务器端页面以使用名称搜索员工
在此页面中,我们创建了一个表单,该表单用于获取输入以查找电子邮件。当单击检查可用性按钮时,它会告知电子邮件ID是否可用。
文件:index.html
<!DOCTYPE html>
<html>
<head>
<title>Email Finder Example</title>
<script>
var request;
function sendInfo() {
var email = document.vinform.email.value;
var url = "emailfinder.jsp?email=" + email;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
try {
request.onreadystatechange = getInfo;
request.open("GET", url, true);
request.send();
} catch (e) { alert("Unable to connect to server"); }
}
function getInfo() {
if (request.readyState == 4) {
var val = request.responseText;
document.getElementById('mylocation').innerHTML = val;
}
}
</script>
</head>
<body>
<marquee>
<h1>AJAX Email Checker Example</h1>
</marquee>
<form name="vinform">
<input type="email" name="email" placeholder="enter email" />
<input type="button" onclick="sendInfo()" value="Check Availability" />
<span id="mylocation"></span>
</form>
</body>
</html>
创建服务器端页面以处理请求
在这个jsp页面中,编写数据库代码来搜索电子邮件。
<%@ page import="java.sql.*" %>
<%
String email=request.getParameter("email");
if(email.contains("@")&&email.contains(".")){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
PreparedStatement ps=con.prepareStatement("select * from user100 where email=?");
ps.setString(1,email);
ResultSet rs=ps.executeQuery();
if(rs.next()){
out.print("Unavailable! <img src='unchecked.gif'/>");
}else{
out.print("Available! <img src='checked.gif'/>");
}
}catch(Exception e){
out.print(e);
}
}else{
out.print("Invalid email!");
}
%>
AJAX+Java评论表单示例
在这个例子中,我们创建一个发表评论的表单。表单数据保存在数据库中,所有发布的注释列表显示在注释表单下方。
使用Java中的AJAX创建注释表单示例的步骤
需要按照以下步骤操作:
- 在数据库中创建表
- 加载org.json.jar文件
- 创建评论表单
- 创建服务器端页面以保存表单数据并列出所有发布的评论
创建评论表单
在此页面中,我们创建了一个从用户获取输入的表单。当用户单击“发表评论”按钮时,将调用postComment()函数。在这个函数中编写了所有的ajax代码。
文件:index.html
<!DOCTYPE html>
<html>
<head>
<script>
var request;
function postComment() {
var comment = document.commentform.comment.value;
var email = document.commentform.email.value;
var url = "index.jsp?comment=" + comment + "&email=" + email;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
try {
request.onreadystatechange = function () {
if (request.readyState == 4) {
var val = request.responseText;
document.getElementById('mylocation').innerHTML = val;
}
}//end of function
request.open("GET", url, true);
request.send();
} catch (e) { alert("Unable to connect to server"); }
}
</script>
</head>
<body>
<h1>Comment Form</h1>
<form name="commentform">
Enter Comment:<br />
<textarea name="comment" style="width:300px;height:100px" required>
</textarea><br />
Enter Email:<br />
<input type="text" name="email" required /><br /><br />
<input type="button" value="Post Comment" onclick="postComment()">
</form>
<span id="mylocation"></span>
</body>
</html>
创建服务器端页面以处理请求
在这个jsp页面中,编写数据库代码以保存注释并打印所有注释。
<!DOCTYPE html>
<html>
<head>
<style>
div.box {
margin: 2px;
border: 1px solid pink;
padding: 10px;
background-color: #e3e3e3
}
</style>
</head>
<body>
<%@ page import="java.sql.*" %>
<%
String comment=request.getParameter("comment");
String email=request.getParameter("email");
if(comment==null||email==null||comment.trim().equals("")||email.trim().equals("")){
out.print("<p>Please write comment</p>");
}else{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
PreparedStatement ps=con.prepareStatement("insert into usercomment(comment1,email) values(?,?)");
ps.setString(1,comment);
ps.setString(2,email);
int i=ps.executeUpdate();
PreparedStatement ps2=con.prepareStatement("select * from usercomment order by id desc");
ResultSet rs=ps2.executeQuery();
out.print("<hr/><h2>Comments:</h2>");
while(rs.next()){
out.print("<div class='box'>");
out.print("<p>"+rs.getString(2)+"</p>");
out.print("<p><strong>By: "+rs.getString(3)+"</strong></p>");
out.print("</div>");
}
con.close();
}catch(Exception e){out.print(e);}
}//end of else
%>
</body>
</html>


浙公网安备 33010602011771号