俊星的BLOG

          #

          我的DWR之簡單實現

               摘要: 1、測試類: package mydwr.test; import java.util.Date; public class Single {     public String printMsg(String msg, boolean boo...  閱讀全文

          posted @ 2009-05-24 18:04 俊星 閱讀(885) | 評論 (0)編輯 收藏

          我的簡單HTTP服務器

          在BLOGJAVA上看到一篇關于HTTP SERVER的簡單實現,博文網址為:http://www.aygfsteel.com/beansoft/archive/2007/06/25/126049.html
          關于HTTP 協議更多信息,請參考:WIKIRFC2616。下面我的實現:
          import java.io.BufferedReader;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.io.PrintStream;
          import java.io.PrintWriter;
          import java.net.ServerSocket;
          import java.net.Socket;
          import java.net.URLDecoder;

          /**
           * 簡單HTTP服務器
           * 
           * 
          @author kinkding
           
          */
          public class MyHTTPServer implements Runnable {
              ServerSocket server;
              
          int port = 80;

              
          public MyHTTPServer() throws IOException {
                  server 
          = new ServerSocket(port);
                  
          new Thread(this).start();
                  System.out.println(
          "HTTP服務器已經啟動");
              }

              
          public void run() {
                  
          while (true) {
                      
          try {
                          Socket client 
          = server.accept();
                          System.out.println(
          "接收到客戶端:" + client);
                          BufferedReader reader 
          = new BufferedReader(new InputStreamReader(client.getInputStream()));
                          System.out.println(
          "請求內容如下:\n---------------------");
                          String line 
          = reader.readLine();
                          System.out.println(line);
                          
          // 請求的資源
                          String resource = line.substring(line.indexOf("/"), line.lastIndexOf("/"- 5);
                          resource 
          = URLDecoder.decode(resource, "UTF-8");
                          
          // 請求方法:GET/POST
                          String method = line.split(" ")[0];
                          
          int length = 0;
                          
          while ((line = reader.readLine()) != null && line.length() > 0) {
                              
          if (line.startsWith("Content-Length"&& length == 0) {
                                  length 
          = Integer.parseInt(line.substring(line.indexOf(":"+ 1).trim());
                              }
                              System.out.println(line);
                          }
                          System.out.println(
          "---------------------");
                          String postData 
          = "";
                          
          if (method.equals("POST"&& length > 0) {
                              
          char cbuf[] = new char[length];
                              reader.read(cbuf, 
          0, length);
                              postData 
          = new String(cbuf);
                          }
                          
          if (resource.endsWith(".jpg")) {
                              
          this.sendFile("happyTime.jpg", client);
                              client.close();
                          } 
          else if (resource.endsWith(".do")) {
                              
          // 返回404
                              PrintWriter out = new PrintWriter(client.getOutputStream(), true);
                              out.println(
          "HTTP/1.0 404 Not found");
                              out.println();
                              out.close();
                          } 
          else {
                              PrintWriter out 
          = new PrintWriter(client.getOutputStream(), true);
                              out.println(
          "HTTP/1.0 200 OK");
                              out.println(
          "Content-Type:text/html;charset=GBK");
                              out.println();
          // HTTP協議:空行表示信息結束

                              out.println(
          "<UL>");
                              out.println(
          "<LI>Hello World");
                              out.println(
          "<LI><img src='anyJPG.jpg'/>");
                              out.println(
          "<LI>resource:" + resource);
                              out.println(
          "<LI>method:" + method);
                              out.println(
          "<LI><a href='foobar.do'>foobar.do</a>");
                              out.println(
          "</UL>");
                              
          // 測試POST
                              out.println("<form method='post' action='/'>");
                              out.println(
          "<input type='text' name='name' value=''/>");
                              out.println(
          "<input type='submit' value='POST'/>");
                              out.println(
          "POST DATA:" + postData);
                              out.println(
          "</form>");
                              
          // 測試GET
                              out.println("<form method='get' action='/'>");
                              out.println(
          "<input type='text' name='job' value=''/>");
                              out.println(
          "<input type='submit' value='GET'/>");
                              out.println(
          "</form>");

                              out.close();
                              client.close();
                          }

                      } 
          catch (Exception e) {
                          
          // TODO: handle exception
                          e.printStackTrace();
                      }
                  }
              }

              
          private void sendFile(String name, Socket client) throws IOException {
                  PrintStream out 
          = new PrintStream(client.getOutputStream(), true);
                  File fileToSend 
          = new File(name);
                  
          if (fileToSend.exists() && !fileToSend.isDirectory()) {
                      out.println(
          "HTTP/1.0 200 OK");
                      out.println(
          "Content-Type:application/binary");
                      out.println(
          "Content-Length:" + fileToSend.length());
                      out.println();

                      FileInputStream fis 
          = new FileInputStream(fileToSend);
                      
          byte buf[] = new byte[1024];
                      
          int size = 0;
                      
          while ((size = fis.read(buf)) > 0) {
                          out.write(buf, 
          0, size);
                      }
                      out.close();
                      fis.close();
                  }
              }

              
          public static void main(String[] args) {
                  
          try {
                      
          new MyHTTPServer();
                  } 
          catch (IOException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }

          }

          運行之后,控制臺的輸出類似如下:
          HTTP服務器已經啟動
          接收到客戶端:Socket
          [addr=/127.0.0.1,port=1198,localport=80]
          請求內容如下:
          ---------------------
          GET / HTTP/
          1.1
          Accept: image/gif
          , image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
          Accept-Language: zh-cn
          Accept-Encoding: gzip
          , deflate
          User-Agent: Mozilla/
          4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
          Host: localhost
          Connection: Keep-Alive
          ---------------------
          接收到客戶端:Socket
          [addr=/127.0.0.1,port=1199,localport=80]
          請求內容如下:
          ---------------------
          GET /anyJPG.jpg HTTP/
          1.1
          Accept: */*
          Referer: http://localhost/
          Accept-Language: zh-cn
          Accept-Encoding: gzip
          , deflate
          User-Agent: Mozilla/
          4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
          Host: localhost
          Connection: Keep-Alive
          ---------------------
          接收到客戶端:Socket
          [addr=/127.0.0.1,port=1218,localport=80]
          請求內容如下:
          ---------------------
          POST / HTTP/
          1.1
          Accept: image/gif
          , image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
          Referer: http://localhost/
          Accept-Language: zh-cn
          Content-Type: application/x-www-form-urlencoded
          Accept-Encoding: gzip
          , deflate
          User-Agent: Mozilla/
          4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
          Host: localhost
          Content-Length: 
          7
          Connection: Keep-Alive
          Cache-Control: no-cache
          ---------------------
          接收到客戶端:Socket
          [addr=/127.0.0.1,port=1231,localport=80]
          請求內容如下:
          ---------------------
          GET /?job
          =aaa HTTP/1.1
          Accept: image/gif
          , image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
          Referer: http://localhost/
          Accept-Language: zh-cn
          Accept-Encoding: gzip
          , deflate
          User-Agent: Mozilla/
          4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
          Host: localhost
          Connection: Keep-Alive
          ---------------------

          頁面運行效果類似如下:
           
          另,推薦一個不錯的命令行“netstat -an |find /i "listening" >good.txt”,查看當前處于監聽狀態的IP及端口,并將得到的信息重定向到good.txt中,形如:
            TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
            TCP    
          0.0.0.0:135            0.0.0.0:0              LISTENING
            TCP    
          0.0.0.0:445            0.0.0.0:0              LISTENING
            TCP    
          0.0.0.0:2366           0.0.0.0:0              LISTENING
            TCP    
          0.0.0.0:19771          0.0.0.0:0              LISTENING
            TCP    
          127.0.0.1:1031         0.0.0.0:0              LISTENING

          posted @ 2009-05-23 17:51 俊星 閱讀(518) | 評論 (0)編輯 收藏

          JAVA圖像縮放處理

               摘要: 今天在網上看到了一篇關于JAVA圖像處理的文章,博主貼出了一個處理類:特點是高品質縮小,具體代碼如下: import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; im...  閱讀全文

          posted @ 2009-05-23 13:37 俊星 閱讀(4187) | 評論 (1)編輯 收藏

          我的DWR之DefaultContainer

               摘要: DWR中采用DefaultContainer來加載默認的配置信息,下面是我的實現: import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; im...  閱讀全文

          posted @ 2009-05-20 22:45 俊星 閱讀(238) | 評論 (0)編輯 收藏

          我的DWR之ThreadLocal學習

          ThreadLocal實際是一個thread local variable(線程局部變量),其目的是為每一個使用該變量的線程都提供一個變量值的副本,更多內容可以參考該文章(http://www.cnblogs.com/zjblue/articles/495123.html),下面是我試用:
          public class ThreadTest {
              
          public static void main(String[] args) {
                  System.out.println(
          "main " + ThreadNum.getNum());
                  
          new ThreadOne().start();
                  
          new ThreadTwo().start();
              }

          }


          class ThreadOne extends Thread {
              
          public void run() {
                  System.out.println(
          "Thread1 " + ThreadNum.getNum());
              }

          }


          class ThreadTwo extends Thread {
              
          public void run() {
                  System.out.println(
          "Thread2 " + ThreadNum.getNum());
              }

          }


          class ThreadNum {
              
          private static int num = 0;
              
          private static ThreadLocal<Integer> tl = new ThreadLocal<Integer>() {
                  
          protected synchronized Integer initialValue() {
                      
          return new Integer(num++);
                  }

              }
          ;

              
          public static int getNum() {
                  
          return tl.get().intValue();
              }

          }

          輸出如下:
          main 0
          Thread1 1
          Thread2 2

          posted @ 2009-05-20 21:28 俊星 閱讀(150) | 評論 (0)編輯 收藏

          僅列出標題
          共10頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 
          主站蜘蛛池模板: 永康市| 乐清市| 泉州市| 保亭| 南投县| 武城县| 旬邑县| 三明市| 柳州市| 通辽市| 常宁市| 修武县| 宜黄县| 洪泽县| 敦化市| 河源市| 鱼台县| 张家口市| 穆棱市| 虹口区| 扎囊县| 龙海市| 陆良县| 梅河口市| 遵义市| 长乐市| 潼南县| 广灵县| 赣榆县| 宝兴县| 中超| 明溪县| 孝昌县| 浦北县| 惠水县| 遵义县| 大英县| 天津市| 清徐县| 金秀| 文山县|