//通过类装载器装载XML资源
InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("test.xml")
byte[] xml=StreamTool.read(inputStream)
String path="http://172.22.35.112:8080/videonews/GetXmlInfo"
URL url=new URL(path)
HttpURLConnection conn=(HttpURLConnection) url.openConnection()
conn.setRequestMethod("POST")
conn.setConnectTimeout(5000)
conn.setDoOutput(true)
//设置HTTP请求碰悔的头字段
conn.setRequestProperty("Content-Type", "text/xmlcharset=UTF-8")//内容类桥闹型
conn.setRequestProperty("Content-Length", String.valueOf(xml.length)) //实体内容的长度
conn.getOutputStream().write(xml) //通过输出流把数据写到服务笑消正器
if(conn.getResponseCode()==200){
System.out.println("发送成功!")
}else{
System.out.println("发送失败!")
}
}
服务器端:
byte[] xml=StreamTool.read(request.getInputStream()) //获得输出流
System.out.println(new String(xml,"UTF-8"))
当send方法成功后才可调用该方法。如果服务器返回的文档类型为"text/xml", 则这句话xmlhttp.getResponseHeader("Content-Type")将返回字符串"text/xml"。 可以使用getAllResponseHeaders方法获取完整的http头信息。Xmlhttp是一种浏览器对象, 可用于模拟http的GET和POST请求。配合JavaScript可以实现页面数据在无刷新下的定时数据更
新,如果应用在聊天室、文字直播上可以取得较好的视觉效果。
IE中的 XmlHttp对象
在IE中XmlHttp被实现为ActiveX对象,通常使用
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
来创建一个对象,然后使用该对象的open方法来发出一个Http请求。
xmlhttp.open("GET", fragment_url)
这时候浏览器已经发出了模答迹Http请求,我们需要注册一个匿名函数给XmlHttp对象的onreadystatechange方法,这样当请求旦并返回
时,xmlhttp就会自动调用我们注册的这个函数,下边是一个实际的例子。
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 &&xmlhttp.status == 200)
{
element.innerHTML = xmlhttp.responseText
}
}
因为我们不需要再发送任何信息,所以用下边的语句结束
xmlhttp.send(null)
我们将上边的过程封装为一个函数,下边是这个函数的完整代码:
function loadFragmentInToElement(fragment_url, element_id)
{
var element = document.getElementById(element_id)
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
xmlhttp.open("GET", fragment_url)
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 &&xmlhttp.status == 200)
{
element.innerHTML = xmlhttp.responseText
}
}
xmlhttp.send(null)
PHPMORE VOL5 24/26
}
函数的调用方法如下所示:
loadFragmentInToElement( , DynamicContent_id )
有了上边的代码, 再配合JavaScript的定时函数, 我们就可以实现定时的无刷新数据更新了, 下边这个函数每隔5秒对element_id
的数据进行一次更新。
function refresh( element_id )
{
loadFragmentInToElement( show.php , + element_id )
setTimeout( "refresh(ts)" , 5000 )
}
在 IE上使用XmlHttp要注意的问题
特别要注意的是由于IE的Cache的关系,我们看见的XmlHttp并不总举陪是最新读取的那一个,为了让IE不启用Cache,我们发送给
IE一个特殊的Header,用PHP实现如下:
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" )
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" )
header( "Cache-Control: no-cache, must-revalidate" )
header( "Pragma: no-cache" )
XmlHttp对象在Gecko上的实现
Gecko上的XmlHttp和IE上略有不同,它并不需要通过ActiveX来创建。另外回调函数必须在open方法之前注册,而IE并不要
求,这是一个很需要注意的问题。
使用JavaScript实现XmlHttp的跨浏览器应用
为了能在多种浏览器上有一个统一的实现, 我们可以用JavaScript来对不同浏览器的差异进行封装。 这里我们采用Andrew Gregory
的实现。首先我们要引用Andrew Gregory的一个名为xmlhttprequest.js的Js脚本。
然后在创建XmlHttp对象时统一使用new XMLHttpRequest()就可以了; 其它的方法不用改变。 这个Js脚本运行我们在IE、 Gecko
(Mozilla/FireFox) 和Opera的特定版本使用XmlHttp。下边是调整后的loadFragmentInToElement函数, 这个函数在IE6
和FireFox1.0pre上运行通过。
xmlhttprequest.js文件和具体的使用例子可以在我写的一个DEMO中找到。
XmlHttp中的中文乱码问题
在默认情况下,XmlHttp都是使用Utf-8字符集,而我们使用的多是GB2312字符集,这就要求我们进行GB2312到Utf-8的转码。
PHP提供了一个可选的专码模块,可以实现多种字符集之间的相互转化。加载这个专码模块的方法如下:
打开 PHP 配置文件 php.ini,将 extension=php_mbstring.dll(*nix 是 php_mbstring.so) 前的分号去掉。重新启动
Apache以后,这个模块就可以使用了。如果有错误出现,请检查扩展目录的路径设置是否正确。
加载这个模块以后,我们就可以使用mb_convert_encoding函数来转码了:
$utf8_string = mb_convert_encoding( $gb_string , UTF-8 , GB2312 )
将转码后的字符输出就可以看见正确显示的中文
我是做网站建设和asp.net程序培训的
桂林网站建设:
简单描述如果在javascript下使用XMLHTTP对象.
MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。
1.创建XMLHTTP对象:
(1)var xmlhttp = new ActiveXObject("Microsoft")
(2)var xmlhttp = new ActiveXObject("MSXML1")
(3)var xmlhttp = new ActiveXObject("MSXML2")
(4)var xmlhttp = new ActiveXObject("MSXML3")
2.初始化:
xmlhttp.open(http-method, url, async, userID, password)
其中前三个参数是必须的.
http-method: POST OR GET
url: 请求的地址,不带查询参数
async: boolean的值,说明请求是否为异步的.如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他 *** 作
3.设置HTTP头
xmlhttp.set(headName, headValue)
如:
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
可以不设置HTTP头.
4.发送请求
xmlhttp.send(XML-DATA)
XML-DATA可以是任意类型的值.一般用于发送查询参数,如xmlhttp.send("type=1&color=2")
5.检查状态
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息
6.客户机处理响应
可通过XMLHTTP对象的三个属性来获得响应:
(1)responseTxt:将返回消息作为文本字符串;
(2)responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
(3)responseStream:将返回消息视为Stream对象。
如:var xmlfile=xmlhttp.responseXML.documentElement
我是做网站建设和asp.net程序培训的
桂林网站建设:
现在sql2005可以直接接受xml数据,只要你逻辑层,把旅逗表示层数据构造好xml文件,直接提交纯兆到相应的xml字段就可以using System
using System.Collections.Generic
using System.IO
using System.Text
using System.Net
using System.Web
namespace Deerchao.Utility
{
public class HttpClient
{
#region fields
private bool keepContext
private string defaultLanguage = "zh-CN"
private Encoding defaultEncoding = Encoding.UTF8
private string accept = "*/*"
private string userAgent = "Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.2SV1.NET CLR 1.1.4322.NET CLR 2.0.50727)"
private HttpVerb verb = HttpVerb.GET
private HttpClientContext context
private readonly List<HttpUploadingFile>files = new List<HttpUploadingFile>做镇租()
private readonly Dictionary<string, string>postingData = new Dictionary<string, string>()
private string url
private WebHeaderCollection responseHeaders
private int startPoint
private int endPoint
#endregion
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)