预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共25页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于Mina的HttpServer以及简单的Http请求客户端目的:Java平台下的内部组件之间的通信。1.WebService由于感觉本身Java平台下的WebService标准就不够统一,相互之间的调用就会有一些问题,更不用说与.net等其他平台了。而且WebService也是对HTTP请求的一次封装,效率上肯定会有损失,所以就不考虑用WebService了。2.Socket,包括Java原生的SocketAPI和nio,本身都很好,效率也会不错,它们之间的区别大概就是资源占用上了。但是使用Socket的通信,有几个比较复杂的地方是:1)协议解析,要订协议,解析及序列化2)粘包分包的处理(这个在长连接的情况下才会出现,可以不在考虑范围内)3)资源的管理,弄不好的话会导致CPU占用较高或者内存不知不觉泄露。3.HTTP通信。由于应用是独立的,不能依托于Web容器。Java原生的HttpServerAPI好像不推荐使用(藏在好深的一个包里com.sun.net.httpserver.*)。4.话说Mina的效率很高,是基于nio的异步通信,封装简化了好多。通过比较简单的包装就可以组成一个HTTPServer(下面例子中就是按照Mina官方提供的demo,自己改动了几点形成的)。然后HTTP的Client端也随便封装下就是了。步骤1.封装HTTP请求消息类和响应消息类Java代码packagecom.ajita.httpserver;importjava.util.Map;importjava.util.Map.Entry;/***使用Mina解析出的HTTP请求对象**@authorAjita**/publicclassHttpRequestMessage{/***HTTP请求的主要属性及内容*/privateMap<String,String[]>headers=null;publicMap<String,String[]>getHeaders(){returnheaders;}publicvoidsetHeaders(Map<String,String[]>headers){this.headers=headers;}/***获取HTTP请求的Context信息*/publicStringgetContext(){String[]context=headers.get("Context");returncontext==null?"":context[0];}/***根据属性名称获得属性值数组第一个值,用于在url中传递的参数*/publicStringgetParameter(Stringname){String[]param=headers.get("@".concat(name));returnparam==null?"":param[0];}/***根据属性名称获得属性值,用于在url中传递的参数*/publicString[]getParameters(Stringname){String[]param=headers.get("@".concat(name));returnparam==null?newString[]{}:param;}/***根据属性名称获得属性值,用于请求的特征参数*/publicString[]getHeader(Stringname){returnheaders.get(name);}@OverridepublicStringtoString(){StringBuilderstr=newStringBuilder();for(Entry<String,String[]>e:headers.entrySet()){str.append(e.getKey()+":"+arrayToString(e.getValue(),',')+"\n");}returnstr.toString();}/***静态方法,用来把一个字符串数组拼接成一个字符串**@params要拼接的字符串数组*@paramsep数据元素之间的烦恼歌负*@return拼接成的字符串*/publicstaticStringarrayToString(String[]s,charsep){if(s==null||s.length==0){return"";}StringBufferbuf=newStringBuffer();if(s!=null){for(inti=0;i<s.length;i++){if(i>0){buf.append(sep);}buf.append(s[i]);}}returnbuf.toString();}}packagecom.ajita.ht