<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    方槍槍的java世界

    不要因為風雨飄落就停止了你的腳步,真正的得失就在你的心中。 做喜歡做的事,不輕言放棄!

    01 一個簡單的HttpServer_SimpleHttpServer_Constant

     

    package com.tianhe.frm.http;

    public interface Constant
    {

       public static String CONTENT_LENGTH = "Content-Length:";   
    }


    package com.tianhe.frm.http;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.URLDecoder;
    import java.util.StringTokenizer;

    import org.apache.log4j.Logger;

    import com.tianhe.frm.context.GlobalConfig;
    import com.tianhe.frm.exception.OurRuntimeException;
    import com.tianhe.frm.utils.LogUtil;
    import com.tianhe.frm.utils.ObjectUtil;
    import com.tianhe.frm.utils.StringUtil;

    public class SimpleHttpServer implements Runnable
    {
        private boolean debug = false;
       
        private String charset = "gbk";
       
        private ServerSocket serverSocket;// 服務器Socket
       
        private static Processor processor = null;
       
        public SimpleHttpServer(int port, String charset, boolean debug)
        {
            this.debug = debug;
           
            if (StringUtil.isNotEmpty(charset))
            {
                this.charset = charset;
            }
           
            this.serverSocket = createServerSocket(port);
            if (this.serverSocket != null)
            {
                new Thread(this).start();
                System.out.println("SimpleHttpServer is running, port=" + port + ",charset=" + charset + ",debug=" + debug);
            }
        }
       
        private ServerSocket createServerSocket(int port)
        {
            ServerSocket ss = null;
           
            try
            {
                ss = new ServerSocket(port);
            }
            catch (IOException e)
            {
                throw new OurRuntimeException("createServerSocket failed", e);
            }
            return ss;
        }
       
        public void run()
        {
            while (true)
            {
                try
                {
                    Socket socket = serverSocket.accept();
                    new Thread(new ServerHandler(socket)).start();
                }
                catch (IOException e)
                {
                    getLog().error("SimpleHttpServer run error", e);
                }
               
            }
        }
       
        class ServerHandler implements Runnable
        {
            private Socket socket;
           
            ServerHandler(Socket socket)
            {
                this.socket = socket;
            }
           
            public void run()
            {
                try
                {
                    boolean firstFlag = false;
                    String resource = "";
                    String method = "";
                    int len = 0;
                   
                    StringBuffer sb = new StringBuffer();
                    String line;
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    while ((line = in.readLine()) != null)
                    {
                        sb.append(line).append("\n");
                       
                        if (!firstFlag)
                        {
                            resource = line.substring(line.indexOf('/') + 1, line.lastIndexOf('/') - 5);
                            resource = URLDecoder.decode(resource, charset);// 反編碼 URL
                           
                            method = new StringTokenizer(line).nextElement().toString();// 獲取請求方法, GET 或者 POST
                            firstFlag = true;
                        }
                       
                        if (line.startsWith(Constant.CONTENT_LENGTH))
                        {
                            len = Integer.valueOf(line.substring(Constant.CONTENT_LENGTH.length()));
                        }
                       
                        if (line.equals(""))
                            break;
                    }
                   
                    // 顯示 POST 表單提交的內容, 這個內容位于請求的主體部分
                    char[] reqData = null;
                    if ("POST".equalsIgnoreCase(method) && len > 0)
                    {
                        reqData = new char[len];
                        in.read(reqData);
                        sb.append(new String(reqData)).append("\n");
                    }
                   
                    String requestString = sb.toString();
                    System.out.println("-------------------------begin----------------------------");
                    System.out.println(requestString);
                    System.out.println("-------------------------end------------------------------");
                   
                    byte[] resData = processRequest(resource, reqData, charset);
                    writeResponse(resource, resData, socket);
                }
                catch (IOException e)
                {
                    throw new OurRuntimeException("ServerHandler run error", e);
                }
                finally
                {
                    closeSocket(socket);
                }
            }
        }
       
        public byte[] processRequest(String resource, char[] data, String charset)
        {
            if (processor == null)
            {
                String clazzName = GlobalConfig.getString("ProcessorImpl.CLASS_NAME", "com.tianhe.frm.http.ProcessorImpl");
                processor = (Processor)ObjectUtil.createObject(clazzName);
            }
           
            byte[] resData = processor.process(resource, data, charset);
            return resData;
        }
       
        private void writeResponse(String resource, byte[] resData, Socket socket)
        {
            try
            {
                PrintStream out = new PrintStream(socket.getOutputStream(), true);
                out.println("HTTP/1.0 200 OK");
                out.println("Content-Type:text/html;charset=" + charset);
                if (resData != null)
                {
                    out.println("Content-Length:" + resData.length);
                    out.println();
                    out.write(resData);
                }
                else
                {
                    out.println("Content-Length: 0");
                    out.println();
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
       
        void closeSocket(Socket socket)
        {
            try
            {
                if (socket != null)
                {
                    socket.close();
                }
            }
            catch (IOException ex)
            {
                ex.printStackTrace();
            }
        }
       
        private Logger getLog()
        {
            return LogUtil.getLog(getClass());
        }
       
        private static void usage()
        {
            System.out.println("Usage: java SimpleHttpServer -port 8080 -charset gbk -debug");
        }
       
        public static void main(String[] args)
        {
            try
            {
                String charset = "GBK";
                int port = 8080;
                boolean debug = false;
               
                if (args != null && args.length > 0)
                {
                    for (int i = 0; i < args.length; i++)
                    {
                       
                        if (args[i].startsWith("-port"))
                        {
                            port = Integer.valueOf(args[i + 1]);
                            i++;
                        }
                       
                        if (args[i].startsWith("-charset"))
                        {
                            charset = args[i + 1];
                            i++;
                        }
                       
                        if (args[i].startsWith("-debug"))
                        {
                            debug = true;
                            // i++;
                        }
                       
                        if (args[i].equalsIgnoreCase("-help"))
                        {
                            usage();
                            System.exit(0);
                        }
                    }
                }
               
                new SimpleHttpServer(port, charset, debug);
            }
            catch (OurRuntimeException ex)
            {
                ex.printStackTrace();
            }
           
        }
    }

    posted on 2012-07-09 22:11 做強大的自己 閱讀(227) 評論(0)  編輯  收藏 所屬分類: Socket

    主站蜘蛛池模板: 精品亚洲永久免费精品| 激情小说亚洲色图| 一日本道a高清免费播放| 日韩成人免费视频播放| www亚洲精品久久久乳| 毛片基地免费视频a| 国产亚洲精品bv在线观看| 91在线视频免费看| 亚洲中文无码永久免费| 免费特级黄毛片在线成人观看| 色在线亚洲视频www| 成人免费视频网站www| 麻豆狠色伊人亚洲综合网站 | 91人人区免费区人人| 91亚洲自偷手机在线观看| jjizz全部免费看片| 亚洲国产91在线| 免费在线观看理论片| 一区二区三区视频免费观看| 久久国产亚洲精品麻豆| 99精品一区二区免费视频| 亚洲一区二区三区免费在线观看 | 久久精品毛片免费观看| 亚洲成A人片在线播放器| 国产精品成人免费综合| 999zyz**站免费毛片| 亚洲电影在线播放| 国产一级淫片免费播放| 两性色午夜视频免费网| 亚洲精品美女在线观看| 国产大片51精品免费观看| 成人免费区一区二区三区| 亚洲人成影院77777| 免费国产怡红院在线观看| 久久精品国产免费一区| 亚洲色欲色欲www| 国产精品亚洲美女久久久| 在线看片免费人成视久网| 国产精品久久亚洲一区二区| 久久夜色精品国产嚕嚕亚洲av| 69av免费观看|