java 调用wss使用什么框架

JavaScript09

java 调用wss使用什么框架,第1张

在js中调用WSS提供的要领是一个会经常运用到的东西,为一个js调用WSS的通用代码,直接拿过来用就可以。

核心部分跟Ajax的核心代码基本相同,都是先构造一个XMLHttpRequest或者ActiveXObject对象,然后就是XML的发送和接收。

SPAPI_Core 

function SPAPI_Core() 

{

        this.createXMLHttpRequest = function()

        {

                 if (typeof XMLHttpRequest != "undefined")

                 {

                          return new XMLHttpRequest()

                 }

                 else if (typeof ActiveXObject != "undefined")

                 {

                          return new ActiveXObject("Microsoft.XMLHTTP")

                 }

                 else

                 {

                           throw new Error("XMLHttpRequest not supported")

                  }

         }

         this.executeRequest = function(serviceUrl, action, packet, params)

         {

                 var oXMLHttpRequest = this.createXMLHttpRequest()

                 var result = null

                 var resultName

                 

                 oXMLHttpRequest.open("POST", serviceUrl, false)

                 oXMLHttpRequest.setRequestHeader("Content-Type", "text/xml charset=utf-8")

                 oXMLHttpRequest.setRequestHeader("SOAPAction", action)

                 if (params != null)

                 {       

                           for (var i=0 i < params.length i++)

                           {

                                       packet = packet.replace('{' + i.toString() + '}', (params[i] == null ? '' : params[i]))

                                       }

                   }

                   oXMLHttpRequest.send(packet)

                   resultName = action.substring(action.lastIndexOf('/') + 1) + 'Result'

'Result'

                   var resBatch

                   var status

                   var statusText

                   status = oXMLHttpRequest.status

                   statusText = oXMLHttpRequest.statusText

                   if (status == 200)

                   {

                            // Check for SharePoint error code

                            resBatch = oXMLHttpRequest.responseXML.getElementsByTagName(resultName)

                            var codeEl = oXMLHttpRequest.responseXML.getElementsByTagName('ErrorCode')

                            if (codeEl != null && codeEl.length > 0)

                            {

                                      var spStatus = parseInt(codeEl[0].childNodes[0].nodeValue)

                                      if (spStatus != 0)

                                      {

                                                status = 0-spStatus // Note we make this -ve to prevent confusion with the HTTP code

                                                var messageEl = oXMLHttpRequest.responseXML.getElementsByTagName('ErrorText')

                                                if (messageEl != null && messageEl.length >= 0)

                                                {

                                                         statusText = messageEl[0].childNodes[0].nodeValue

                                                 }

                                         }

                              }

                     }

                     result = {

                     status : status,

                     statusText : statusText,

                     responseXML : oXMLHttpRequest.responseXML,

                     responseText : oXMLHttpRequest.responseText,

                     resultNode : (resBatch == null resBatch.length == 0 ? null : resBatch[0])

                     }

                     return result

          } 

}

然后就是写WSS中各个要领的调用接口,WSS中提供的要领特别多,这里就不一一列举了,有需要可以追问。

在Web项目中,有时需要通过协议调取来自其他环境的数据。HTTPS是一种应用于安全数据传输的网络协议。我们都知道Ajax可以异步请求数据,但单单通过ajax无法实现跨域。采用一些其他方式需要根据不同的浏览器做相应处理,火狐,谷歌等和IE需要各自做相应判断,所以这种通过浏览器来解析数据虽然省略了数据的解压缩等处理,但是在有安全认证等情况下做跨域处理确比较困难。比如:IE的请求Header无法更改。这时通过Node请求并解析数据就显得比较简单了。如下是nodejs中通过https请求数据的全过程:varhttps=require('https')varzlib=require('zlib')varpost_data="………………"//请求数据varreqdata=JSON.stringify(post_data)varoptions={ hostname:'10.225.***.***', port:'8443', path:'/data/table/list', method:'POST', rejectUnauthorized:false, requestCert:true, auth:'admin:123456************', headers:{'username':'admin','password':'123456************','Cookie':'locale=zh_CN','X-BuildTime':'2015-01-0120:04:11','Autologin':'4','Accept-Encoding':'gzip,deflate','X-Timeout':'3600000','Content-Type':'Application/json',"Content-Length":reqdata.length }}varreq=https.request(options,function(res){})req.write(reqdata)req.on('response',function(response){ switch(response.headers['content-encoding']){case'gzip': varbody='' vargunzip=zlib.createGunzip() response.pipe(gunzip) gunzip.on('data',function(data){body+=data }) gunzip.on('end',function(){varreturndatatojson=JSON.parse(body) req.end() }) gunzip.on('error',function(e){console.log('error'+e.toString()) req.end() }) break case'deflate': varoutput=fs.createWriteStream("d:temp.txt") response.pipe(zlib.createInflate()).pipe(output) req.end() break default:req.end() break }})req.on('error',function(e){ console.log(newError('problemwithrequest:'+e.message)) req.end() setTimeout(cb,10)})注:options,需要有请求数据的长度,options需要加上'Accept-Encoding':'gzip,deflate',返回的数据需要判断是哪种压缩方式,然后解压缩获取到数据。gunzip的end事件里的returndatatojson即是获取的数据。

要用websocket来搞定。不用websocket就要用ajax轮询来实现,比较耗资源。

nodejs简单的websocket 服务端实现

// 在安装了nodejs的情况,用npm install ws

const ws = require('ws')

const wss = new ws.Server({port: 8080})

let users = 0

wss.on('connection', function(ws) {

ws.on('message', function(message) {

// message的内容客户端发送过来

if (message === '进入') {

// 进入成功的时候,操作代码

users = ++users

console.log('正在浏览....', '在线用户数量:', users)

}

})

ws.on('close', function(close) {

try{

// 退出的时候,操作代码

users = --users

console.log('已经离开')

}catch(e){

}

})

ws.on('error', function() {})

})

客户端(浏览器):

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<script>

var ws = new WebSocket("ws://localhost:8080")

ws.onopen = function(e) {

console.log(e)

ws.send('进入')

}

ws.onclose = function(e) {

ws.send('离开了!!!!')

}

</script>

</head>

<body>

</body>

</html>