实现简单的web服务器

只支持静态网页传输
关闭命令 http://localhost:8080/SHUTDOWN
新建静态资源在webroot目录下,通过 http://localhost:8080/****访问

 三个类
HttpServer
Request
Response

 
//HttpServer
package   org . com . tomcat . chapter1 ;
import   java . io . File ;
import   java . io . IOException ;
import   java . io . InputStream ;
import   java . io . OutputStream ;
import   java . net . InetAddress ;
import   java . net . ServerSocket ;
import   java . net . Socket ;
public   class   HttpServer  {
    
     public   static   final   String   WEB_ROOT   =  
               System . getProperty ( "user.dir" ) + File . separator + "webroot" ;
         
     private   static   final   String   SHUTDOWN_COMMAND   =   "/SHUTDOWN" ;
    
     private   boolean   shutdown   =   false ;
    
     /**
      *  @param  args
      */
     public   static   void   main ( String  []  args ){
          HttpServer   server   =   new   HttpServer ();
          System . out . println ( "System.getProperty('user.dir'):" + System . getProperty ( "user.dir" ));
          System . out . println ( "File.separator:" + File . separator );
          System . out . println ( "WEB_ROOT:" + WEB_ROOT );       
          server . await ();
    }
     public   void   await () {
          ServerSocket   serverSocket   =   null ;
          int   port   =   8080 ;
          try
         {
               serverSocket   =   new   ServerSocket ( port , 1 , InetAddress . getByName ( "127.0.0.1" ));
         }
          catch ( IOException   e )
         {
               e . printStackTrace ();
               System . exit ( 1 );
         }
          //
          while ( ! shutdown )
         {
               Socket   socket   =   null ;
               InputStream   input   =   null  ;
               OutputStream   output   =   null ;
              
               try
              {
                    socket   =   serverSocket . accept ();
                    input   =   socket . getInputStream ();
                    output   =   socket . getOutputStream ();
                   
                    Request   request   =   new   Request ( input );
                    request . parse ();
                   
                    Response   response   =   new   Response ( output );
                    response . setRequest ( request );
                    response . sendStaticResource ();
                   
                    socket . close ();
                   
                    shutdown   =   request . getUri (). equals ( SHUTDOWN_COMMAND );
                    System . out . println ( request . getUri ());
              }
               catch ( Exception   e )
              {
                    e . printStackTrace ();
                    continue ;
              }
         }
    }
}
//Request
package   org . com . tomcat . chapter1 ;
import   java . io . IOException ;
import   java . io . InputStream ;
public   class   Request  {
     private   InputStream   input ;
     private   String   uri ;
    
     public   Request ( InputStream   input )
    {
          this . input   =   input ;
    }
    
     public   void   parse ()
    {
          StringBuffer   reqeust   =   new   StringBuffer ();
          int   i ;
          byte []  buffer   =   new   byte [ 2048 ];
          try
         {
               i   =   input . read ( buffer );
         }
          catch ( IOException   e )
         {
               e . printStackTrace ();
               i   =   -1 ;
         }
          for ( int   j = 0 ; j < i ; ++ j )
         {
               reqeust . append (( char ) buffer [ j ]);
         }
          System . out . print ( reqeust . toString ());
          uri   =   parseUri ( reqeust . toString ());
    }
    
     //request
     private   String   parseUri ( String   requestString )
    {
          int   index1 , index2 ;
          index1   =   requestString . indexOf ( ' ' );
          if ( index1   !=   -1 )
         {
               index2   =   requestString . indexOf ( ' ' index1 +1 );
               if ( index2   >   index1 )
              {
                    return   requestString . substring ( index1 +1 , index2 );
              }
         }
          return   "parseFail" ;
    }
    
     public   String   getUri ()
    {
          return   uri ;
    }
}
//Response
package   org . com . tomcat . chapter1 ;
import   java . io . File ;
import   java . io . FileInputStream ;
import   java . io . IOException ;
import   java . io . OutputStream ;
public   class   Response  {
     private   static   final   int   BUFFER_SIZE   =   1024 ;
     Request   request ;
     OutputStream   output ;
    
     public   Response ( OutputStream   output )
    {
          this . output   =   output ;
    }
    
     public   void    setRequest ( Request   request )
    {
          this . request   =   request ;
    }
     //
     public   void   sendStaticResource ()  throws   IOException
    {
          byte []  bytes   =   new   byte [ BUFFER_SIZE ];
          FileInputStream   fis   =   null ;
          try
         {
               File   file   =   new   File ( HttpServer . WEB_ROOT , request . getUri ());
               if ( file . exists ())
              {
                    fis   =   new   FileInputStream ( file );
                    int   ch   =   fis . read ( bytes , 0 , BUFFER_SIZE );
                    if ( ch != -1 )
                 {
                         String   head   =   "HTTP/1.1 200 OK\r\n"   +
                                   "Content-Type: text/html\r\n"   +
                                   "\r\n" ;
                         output . write ( head . getBytes ());
                   }
                    while ( ch != -1 )
                   {
                         output . write ( bytes , 0 , ch );
                         ch   =   fis . read ( bytes 0 BUFFER_SIZE );
                   }
              }
               else
              {
                    String   errorMessage   =   "HTTP/1.1 404 File Not Found\r\n" +
                                             "Content-Type:text/html\r\n" +
                                             "Content-Length:23\r\n" +
                                             "\r\n" +
                                             "<h1>File Not Found</h1>" ;
                    output . write ( errorMessage . getBytes ());
              }
         }
          catch ( Exception   e )
         {
               System . out . println ( e . toString ());
         }
          finally
         {
               if ( fis != null )
              {
                    fis . close ();
              }
         }
    }
}
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值