您的位置:首页 > Web前端 > JavaScript

前台页面通过JS调用Servlet访问到后台类

2012-04-18 20:32 513 查看
分类: AJAX知识2011-03-03
09:32 916人阅读 评论(1) 收藏 举报

1.在页面中导入必要的JS

<script src="<c:url value="/resources/js/buffalo.js"/>" type="text/javascript"></script>

<script src="<c:url value="/resources/js/xmlcallback.js"/>" type="text/javascript"></script>

2. buffalo.js 可以上网下载

xmlcallback.js如下:

[java] view
plaincopy

function getDomDocumentPrefix() {

if (getDomDocumentPrefix.prefix)

return getDomDocumentPrefix.prefix;

var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];

var o;

for (var i = 0; i < prefixes.length; i++) {

try {

// try to create the objects

o = new ActiveXObject(prefixes[i] + ".DomDocument");

return getDomDocumentPrefix.prefix = prefixes[i];

}

catch (ex) {};

}

throw new Error("Could not find an installed XML parser");

}

function getXmlHttpPrefix() {

if (getXmlHttpPrefix.prefix)

return getXmlHttpPrefix.prefix;

var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];

var o;

for (var i = 0; i < prefixes.length; i++) {

try {

// try to create the objects

o = new ActiveXObject(prefixes[i] + ".XmlHttp");

return getXmlHttpPrefix.prefix = prefixes[i];

}

catch (ex) {};

}

throw new Error("Could not find an installed XMLHttp object");

}

function XmlHttp() {}

XmlHttp.httpPool = [];

XmlHttp.httpMaxSize = 3;

XmlHttp.poolGetHttp = function() {

if (XmlHttp.httpPool.length > 0) {

return XmlHttp.httpPool.pop();

}

return XmlHttp.create();

}

XmlHttp.poolReturnHttp = function(http) {

if (XmlHttp.httpPool.size > XmlHttp.httpMaxSize) {

delete http;

}

XmlHttp.httpPool.push(http);

}

XmlHttp.create = function () {

try {

// NS & MOZ

if (window.XMLHttpRequest) {

var req = new XMLHttpRequest();

// some versions of Moz do not support the readyState property

// and the onreadystate event so we patch it!

if (req.readyState == null) {

req.readyState = 1;

req.addEventListener("load", function () {

req.readyState = 4;

if (typeof req.onreadystatechange == "function")

req.onreadystatechange();

}, false);

}

return req;

}

// IE

if (window.ActiveXObject) {

return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");

}

}

catch (ex) {}

// Fail

throw new Error("Your browser does not support XmlHttp objects");

};

function XmlDocument() {}

XmlDocument.create = function () {

try {

if (document.implementation && document.implementation.createDocument) {

var doc = document.implementation.createDocument("", "", null);

if (doc.readyState == null) {

doc.readyState = 1;

doc.addEventListener("load", function () {

doc.readyState = 4;

if (typeof doc.onreadystatechange == "function")

doc.onreadystatechange();

}, false);

}

return doc;

}

if (window.ActiveXObject)

return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");

}

catch (ex) {}

throw new Error("Your browser does not support XmlDocument objects");

};

if (window.DOMParser &&

window.XMLSerializer &&

window.Node && Node.prototype && Node.prototype.__defineGetter__) {

Document.prototype.loadXML = function (s) {

var doc2 = (new DOMParser()).parseFromString(s, "text/xml");

while (this.hasChildNodes())

this.removeChild(this.lastChild);

for (var i = 0; i < doc2.childNodes.length; i++) {

this.appendChild(this.importNode(doc2.childNodes[i], true));

}

};

Document.prototype.__defineGetter__("xml", function () {

return (new XMLSerializer()).serializeToString(this);

});

}

/*

* xmlHttp Pool

*

* userage: var xmlhttpObj = XmlHttpPool.pick()

*/

var XmlHttpPoolArr = new Array();

var XmlHttpPoolSize = 100;

var XHPCurrentAvailableID = 0;

function XmlHttpPool() {}

XmlHttpPool.pick = function() {

var pos = XHPCurrentAvailableID;

XmlHttpPoolArr[pos] = XmlHttp.create();

XHPCurrentAvailableID >= (XmlHttpPoolSize-1) ? 0 : XHPCurrentAvailableID++

return XmlHttpPoolArr[pos];

}

function rpcCall(url, method, data, callback, asyn) {

var xmlhttp = XmlHttp.create();

xmlhttp.open(method, url, asyn);

xmlhttp.send(data);

if (!asyn) { // if not asyn

callback(xmlhttp.responseText);

} else {

xmlhttp.onreadystatechange = function() {

if (xmlhttp.readyState == 4) {

callback(xmlhttp.responseText);

}

}

}

}

3. 调用的Servlet如下,同时,需要在web.xml中配置对应的参数

<!-- 这边是对ajax对应的服务service进行的配置 -->

<servlet>

<servlet-name>ajax</servlet-name>

<servlet-class>com.longtop.common.BurlapServlet</servlet-class>

</servlet>

<!-- 这边是对ajax对应的服务service进行的配置 -->

<servlet-mapping>

<servlet-name>ajax</servlet-name>

<url-pattern>/ajax</url-pattern>

</servlet-mapping>

[java] view
plaincopy

package com.longtop.common;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;

import com.caucho.burlap.io.BurlapInput;

import com.caucho.burlap.io.BurlapOutput;

import com.caucho.burlap.server.BurlapSkeleton;

/**

* 通过 ajax,在页面回显数据

*/

public class BurlapServlet extends HttpServlet{

private static final long serialVersionUID = -5162149775110419399L;

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

//防止 websphere 5.1 下乱码,对jboss没影响

response.setContentType("text/xml; charset=UTF-8");

String serviceBeanId = "sid";

String serviceName = request.getParameter(serviceBeanId);

Object serviceInstance = ContextUtil.getBean(serviceName);

BurlapSkeleton skeleton = new BurlapSkeleton(serviceInstance);

InputStream is = request.getInputStream();

OutputStream os = response.getOutputStream();

BurlapInput in = new BurlapInput(is);

BurlapOutput out = new BurlapOutput(os) {

public void startReply() throws IOException {

print("<?xml version=/"1.0/" encoding=/"utf-8/"?><burlap:reply xmlns:burlap=/"http://www.amowa.net/buffalo//">");

}

};

try {

skeleton.invoke(in, out);

} catch (Throwable e) {

// ProLogService.error(this.getClass(), e.getMessage(), e);

}

}

}

4. 最后在页面中按照如下代码直接调用就好了!(注:comService必须是在Spring中注册好的!)

[java] view
plaincopy

//调用spring中的实例来操作

var buffalo = new Buffalo('<c:url value="/ajax"/>', true);

buffalo.remoteCall("comService.getTestStr",

["linwei"],

function(reply){

var result = reply.getResult();

alert("result is " + result);

);

/article/9022868.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: