*设为首页
*加入收藏
热门关键字: JAVA
>>当前位置:Java大本营>Web Service>文章内容
如何编写轻量级WebService服务器
作者: 发布时间:2007-12-19 11:16:09

目的:通过示例代码和其它样例文件,你将了解[1]如何解析和生成soap信息[2]简单的http server端编程

阅读对象:
    java程序员

环境:
[1]IBM JAVA JDK(From WebSphere6.1安装包)
[2]MyEclipse5.1.x


内容:
    java源代码(含大量注解)和xml样例文件。

注意:
    NHttpServer.java文件,根据
    http://svn.apache.org/repos/asf/jakarta/httpcomponents/httpcore/tags/4.0-alpha6/module-nio/src/examples/org/apache/http/examples/nio/NHttpServer.java
    文件修改而来。

必须信赖包:
    [1]saaj.jar(可以使用Axis1.4发行包中的saaj.jar)
    [2]httpcore-4.0-alpha6.jar、httpcore-nio-4.0-alpha6.jar等包来自http://jakarta.apache.org/httpcomponents/
   
正文:
第一部份:NHttpServer.java源文件清单
---------------------------------------------------------------------------------------------------------------------------
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.URLDecoder;
import java.util.Iterator;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.stream.StreamSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.MethodNotSupportedException;
import org.apache.http.entity.ContentProducer;
import org.apache.http.entity.EntityTemplate;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
import org.apache.http.impl.DefaultHttpResponseFactory;
import org.apache.http.impl.nio.DefaultServerIOEventDispatch;
import org.apache.http.impl.nio.reactor.DefaultListeningIOReactor;
import org.apache.http.nio.NHttpConnection;
import org.apache.http.nio.protocol.BufferingHttpServiceHandler;
import org.apache.http.nio.protocol.EventListener;
import org.apache.http.nio.reactor.IOEventDispatch;
import org.apache.http.nio.reactor.ListeningIOReactor;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpProcessor;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestHandler;
import org.apache.http.protocol.HttpRequestHandlerRegistry;
import org.apache.http.protocol.ResponseConnControl;
import org.apache.http.protocol.ResponseContent;
import org.apache.http.protocol.ResponseDate;
import org.apache.http.protocol.ResponseServer;
import org.apache.http.util.EntityUtils;

public class NHttpServer {

    public static void main(String[] args) throws Exception {
     Log log=LogFactory.getLog("NHttpServer");
     
     //设置Http服务器根目录.begin
     args=new String[1];
     args[0]="WebRoot";
//     设置Http服务器根目录.end
     
        if (args.length < 1) {
            log.error("Please specify document root directory");
            System.exit(1);
        }
       
        /**
         * 设置Http Server参数
         */
        HttpParams params = new BasicHttpParams(null);
        params
            .setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 30*60*1000)
            .setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 * 1024)
            .setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false)
            .setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
            .setParameter(CoreProtocolPNames.ORIGIN_SERVER, "Jakarta-HttpComponents-NIO/1.1");

        /**
         * Httpproc拦截器
         */
        BasicHttpProcessor httpproc = new BasicHttpProcessor();
        httpproc.addInterceptor(new ResponseDate());
        httpproc.addInterceptor(new ResponseServer());
        httpproc.addInterceptor(new ResponseContent());
        httpproc.addInterceptor(new ResponseConnControl());
       
        BufferingHttpServiceHandler handler = new BufferingHttpServiceHandler(
                httpproc,
                new DefaultHttpResponseFactory(),
                new DefaultConnectionReuseStrategy(),
                params);
       
        // Set up request handlers
        HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
        reqistry.register("*", new HttpFileHandler(args[0]));
       
        handler.setHandlerResolver(reqistry);
       
        // Provide an event logger
        handler.setEventListener(new EventLogger());
       
        IOEventDispatch ioEventDispatch = new DefaultServerIOEventDispatch(handler, params);
        ListeningIOReactor ioReactor = new DefaultListeningIOReactor(2, params);
        try {
            ioReactor.listen(new InetSocketAddress(8080));
            ioReactor.execute(ioEventDispatch);

共3页: 上一页 1 [2] [3] 下一页

·中文编码问题全面分析 (01-27)
·java web开发中的listener和filter (01-27)
·JAVA的由来 (01-27)
·一个Java Bean转换为HashMap及ArrayLis(01-27)
·探索下载引擎盈利模式 (01-27)
·web3.0感想 (01-23)
·工作流与PetriNet两种节点的新诠释 (01-21)
·过滤器(filter)在web 中的应用 (01-21)
·eclipse开发Web项目时虚拟目录的妙用 (01-21)
·Log4j入门(01-20)
·Weblogic保留jsp编译后的java文件 (01-20)
·Weblogic web service dynamic client (01-19)
复制地址发给您的好友: [推荐文章] [返回顶部] [关闭窗口]
版权所有 Java大本营 1999-2007 转载请注明出处