| Blog信息 |
|
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7649287 建立时间:2006年5月29日 |

| |
|
[设计模式]简单整理一下调用接口和被调用接口的方法 软件技术
lhwork 发表于 2006/9/18 9:54:32 |
| 我们公司是做通信行业的,所以调用接口和被调接口是经常的事,所以把这方面的东西总结一下,以便自己和大家一起温习一下: 做接口这个我们这边做的比较简单,调用别人的接口主要是调用Servlet或者Action、JSP,我们这边有可能是JAVA APPLICATION 也可能是WEB程序,参数主要是XML格式的字符串。下面看一下,调用别人接口的时候用法。
URL url = new URL ("别人提供的URL地址");URLConnection connection = url.openConnection();connection.connect();StringBuffer XmlParam =new StringBuffer();XmlParam.append("<?xml version='1.0'?>\n"); XmlParam.append("<Love>\n"); XmlParam.append("<PhoneType>1</PhoneType>\n"); XmlParam.append("<Phone>12345678912</Phone>\n"); XmlParam.append("<Content>test!!</Content>\n"); XmlParam.append("</Love>\n");PrintWriter out = new PrintWriter(connection.getOutputStream());//取得输出流out.print(XmlParam.toString());//把参数打出去out.close();
InputStream urlStream = connection.getInputStream();//取得接口回传的值,定义好的协议。再对这个输入流进行处理。connection.close();connection = null;
自己定义接口被别人调用的时候,就是取得别人传过来的参数,进行解析处理,完了之后把所相应的结果传送给调用者。如果是XML格式的,可以用XML解析器进行解析,我把这个解析类放在后面。InputStream in = request.getInputStream(); //取得用户传过来的输入流XmlParser parser = new XmlParser(in); //用构造器,构造一个XML解析器,,构造器在后面有详细说明String phoneType = "";String phone = "";String content = "";String url = "";phoneType = parser.getElement("PhoneType"); //得到用户传过来的PhoneType节点的值phone = parser.getElement("Phone"); //得到用户传过来的Phone节点的值content = parser.getElement("Content"); //得到用户传过来的Content节点的值这样调用者传过来的参数就取得了。对它进行处理吧。把处理结果再传给调用者。URL url = new URL (url);URLConnection connection = url.openConnection();connection.connect();PrintWriter out = new PrintWriter(connection.getOutputStream());//取得输出流out.print(处理的结果);//把参数打出去out.close();connection.close();connection = null;
XmlParser的简单应用方法package com.xgll.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.StringTokenizer;
import org.jdom.Document;import org.jdom.Element;import org.jdom.Namespace;import org.jdom.input.SAXBuilder;import org.jdom.output.XMLOutputter;
import com.xgll.util.Log;
* <p>Title: XML文档解析器</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: c-platform </p> * @author wujiaqian * @version 1.0 */public class XmlParser{ private static String logName = "XmlParser.log"; /** * 构造器 * @param in, InputStream */ public XmlParser(InputStream in) { try { propertyCache = new HashMap(); SAXBuilder builder = new SAXBuilder(); doc = builder.build(in); } catch (Exception e) { Log.printError(e,"", "以输入流构造解析器失败", logName); } }
/** * 构造器 * @param fileName, 文件名 */ public XmlParser(String fileName) { propertyCache = new HashMap(); file = new File(fileName); try { SAXBuilder builder = new SAXBuilder(); doc = builder.build(file); } catch (Exception e) { Log.printError(e,"", "以文件构造解析器失败", logName); } }
/** * 获得节点的值 * @param name, 节点标签名 * @return String */ public String getElement(String name) { if (propertyCache.containsKey(name)) { return (String) propertyCache.get(name); } Element element = findElement(parsePropertyName(name)); if (element == null) { return null; } String value = element.getText();
if (value.equals("")) { return null; } else { value = value.trim(); propertyCache.put(name, value); return value; } }
/** * 分析节点名 * @param name, 节点名 * @return String Array */ private String[] parsePropertyName(String name) { int size = 1; for (int i = 0; i < name.length(); i++) { if (name.charAt(i) == '.') { size++; } }
String propName[] = new String[size]; StringTokenizer tokenizer = new StringTokenizer(name, "."); for (int i = 0; tokenizer.hasMoreTokens(); i++) { propName[i] = tokenizer.nextToken(); }
return propName; }
private File file;
private Document doc;
private Map propertyCache;
private static String DSMP_NAMESPACE = "http://www.monternet.com/dsmp/schemas/";} |
|
|
回复:简单整理一下调用接口和被调用接口的方法 软件技术
tuzi(游客)发表评论于2007/4/19 0:18:49 |
|
» 1 »
|