﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Nothing is impossible for a willing heart-文章分类-ajax</title><link>http://www.blogjava.net/freedream/category/15854.html</link><description>I belive I can</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 02:05:34 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 02:05:34 GMT</pubDate><ttl>60</ttl><item><title>AJAX+Servlet实现客户端无刷新请求服务器实践</title><link>http://www.blogjava.net/freedream/articles/76566.html</link><dc:creator>JAVA_UFO</dc:creator><author>JAVA_UFO</author><pubDate>Sat, 21 Oct 2006 10:57:00 GMT</pubDate><guid>http://www.blogjava.net/freedream/articles/76566.html</guid><wfw:comment>http://www.blogjava.net/freedream/comments/76566.html</wfw:comment><comments>http://www.blogjava.net/freedream/articles/76566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freedream/comments/commentRss/76566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freedream/services/trackbacks/76566.html</trackback:ping><description><![CDATA[
		<center>
				<b>
						<font size="3">AJAX+Servlet实现客户端无刷新请求服务器实践</font>
				</b>
				<br />www.yjyunda.com/art  2005-12-22  星语文章</center>
		<p>
		</p>
		<br />
		<font class="b1">最近需要做一个在网页中要不断检测服务器端数据程序,当然最简单的方法是在html页面头部加以下标签<br />&lt;META http-equiv=V="REFRESH" content="5;URL=本页面url"&gt; <br />实现将网页设成每隔5秒钟将自身页面刷新一次;从而检测或加载服务器端数据.<br />但该方法有一个不雅的问题是,页面要不停地闪烁刷新,而且在每次刷新时都会发出windows点击链接的声音.如果时间久了,没有人能忍受的了吧.<br />　　现在找到了AJAX(异步 JavaScript 和 XML)这个技术,他可以帮我们解决客户端无需提交页面即可发送对服务器的请求,这些均通过客户端javascript实现,以下为实现代码:<br />第一部分:<br />&lt;body onload="checknew()"&gt;<br />页面加载时即开始调用脚本checknew.<br />第二部分:页面脚本<br />//页面声明对象var http_request; <br />function checknew()<br />{<br />http_request = false;<br />//下面需要建立一个XMLHttpRequest对象,用它进行服务器请求,针对不同浏览器建立方法不同 if (window.XMLHttpRequest) <br />{ // Mozilla, Safari,...<br />http_request = new XMLHttpRequest();<br />if (http_request.overrideMimeType) <br />{<br />http_request.overrideMimeType('text/xml');<br />}<br />} <br />else if (window.ActiveXObject) <br />{ // IE<br />try {<br />http_request = new ActiveXObject("Msxml2.XMLHTTP");<br />}<br />catch (e)<br />{<br />try <br />{<br />http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />} <br />catch (e) {}<br />}<br />}</font>
		<font class="b1">if (!http_request) {<br />alert('出现错误,不能建立一个XMLHTTP实例!');<br />return false;<br />}<br />//funccallback为请求返回后要调用的javascript方法<br />http_request.onreadystatechange = funccallback;<br />//该请求用get方式发送至url为/servlet/CheckServlet的Servlet,url可以带参数或数据方式同一般url传值,Servlet请看后面代码<br />http_request.open('GET',url, true);<br />http_request.send(null);<br />//如果要使用HTTP POST方式,必须要对 XMLHttpRequest 对象设置一个 Content-Type 头，使用以下语句(url中也可包含参数)： <br />//http_request.open('POST',url, true);<br />//http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); <br />//http_request.send("这里为传的参数");<br />//每隔5秒循环一次服务器请求 setTimeout('checknew()',5000);<br />}<br />//请求返回后调用方法<br />function funccallback() <br />{<br />//检测请求状态http_request.readyState有以下几种状态 0 (未初始化) 1 (正在装载) 2 (装载完毕) 3 (交互中) 4 (完成) <br />if (http_request.readyState == 4) <br />{<br />//XMLHttpRequest的status属性被测试用来确定请求是否成功完成。当处理简单的GET与POST请求，你可以认为只要不是200（OK）的状态就表示发生了错误。<br />if (http_request.status == 200) <br />{<br />//http_request.responseText为服务器返回的文本内容,可自行做各种处理<br />alert(http_request.responseText);<br />} <br />else <br />{<br />alert('对不起,请求出现错误!');<br />}<br />}<br />}<br />//第三部分 ,java Servlet的代码:<br />首先在web.xml中配置web Servlet,如下:<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;CheckServlet&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;com.view.CheckServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;CheckServlet&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/CheckServlet&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />下面为Servlet实例:<br />package com.view;<br />//导入包略去,可在ide中自动导入(以下代码包含部分ide自动生成代码,可略去)<br />public class CheckServlet extends HttpServlet<br />{<br />public void destroy()<br />{<br />super.destroy(); <br />// Just puts "destroy" string in log<br />// Put your code here<br />}<br />public void doGet(HttpServletRequest request, HttpServletResponse response)<br />throws ServletException, IOException<br />{<br />//用get方式发送请求,因此在此处理,<br />response.setContentType("text/xml");<br />response.setHeader("Cache-Control", "no-cache");<br />String ids="hello,China!";<br />//将ids返回给客户端<br />response.getWriter().write(ids);<br />}<br />public void doPost(HttpServletRequest request, HttpServletResponse response)<br />throws ServletException, IOException<br />{<br />//如果用post方式请求,则在此处理<br />}<br />public void init() throws ServletException<br />{<br />// Put your code here<br />}</font>
<img src ="http://www.blogjava.net/freedream/aggbug/76566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freedream/" target="_blank">JAVA_UFO</a> 2006-10-21 18:57 <a href="http://www.blogjava.net/freedream/articles/76566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>