欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS & JAVA通过流的方式传递文件或字符

程序员文章站 2022-06-10 17:30:35
...
首先是前端

JS代码 类似如下
function callByXMLHttpRequest(url) {
	    if (window.XMLHttpRequest){ 
	      req = new XMLHttpRequest(); 
	    } 
	    else if (window.ActiveXObject){ 
	      req = new ActiveXObject("Microsoft.XMLHTTP");
	    }
	    req.open("Post",url,true); 
	    req.onreadystatechange = callback; 
	    
	    var xmlStr = 
	    	"<xml></xml>";
	    req.send(xmlStr);
}

function callback(data) {
		if(data.currentTarget.readyState == "4") {
			if(data.currentTarget.status == "200") {
				resolveXML($.parseXML(data.currentTarget.responseText));
			} else {
				alert("网络不稳定,请稍后再试!");
			}
		}
	}


这里面使用了XMLHttpRequest
会通过异步方式向后台请求request,回调函数内,通过data获取的具体参数,可以查看W3CSchool里面介绍的,回调相应的状态判断等等
http://www.w3school.com.cn/xml/xml_http.asp

如果想传递文件,则在req.send中传递文件的指向,具体要参看HTML5中的FormData了

而后台Java接受代码如下
public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {

        // 将解析结果存储在HashMap中  
        Map<String, String> map = new HashMap<String, String>();

        // 从request中取得输入流  
        InputStream inputStream = request.getInputStream();
        // 读取输入流  
        SAXReader reader = new SAXReader();
        Document document = reader.read(inputStream);
        // 得到xml根元素  
        Element root = document.getRootElement();
        // 得到根元素的所有子节点  
        List<Element> elementList = root.elements();

        // 遍历所有子节点  
        for (Element e : elementList) {
            map.put(e.getName(), e.getText());
        }

        // 释放资源  
        inputStream.close();
        inputStream = null;

        return map;
    }

获取XML并通过流解析