Listing 4: HTTPServer.java
import java.net.*;
import java.io.*;
import java.util.*;

class SendingWWW extends Thread{

Socket ClientSocket=null;             //socket returned after the connection is accept
DataOutputStream out=null;         //out stream
BufferedReader in=null;               //in stream
InputStreamReader ISR=null;

String line=null;          
String firstLine=null;

public SendingWWW(Socket s)
          {
          ClientSocket=s;
          }

private synchronized void AnalyzeFirstLine(String line)
{
StringTokenizer ST=new StringTokenizer(line," \t");
ST.nextToken();
String fileName=ST.nextToken();

//context path for the Web files
String path="C:\\jeditor\\handlers";

StringTokenizer STslash=new StringTokenizer(fileName,"/");

while(STslash.hasMoreTokens())path=path+"\\"+STslash.nextToken();

try
  {
  FileInputStream FIS=new FileInputStream(path);

  int fileLength=FIS.available(); 
  String ext=fileName.substring(fileName.length()-3,fileName.length());

  //return some MIME types
  String contenttype="text/html";

  if(ext.indexOf("tml")!=-1)contenttype="text/html";
  if(ext.indexOf("htm")!=-1)contenttype="text/html";
  if(ext.indexOf("gif")!=-1)contenttype="image/gif";
  if(ext.indexOf("jpg")!=-1)contenttype="image/jpeg";
  if(ext.indexOf("xy")!=-1)contenttype="image/xy";
  if(ext.indexOf("txt")!=-1)contenttype="text/plain";

   //write out the header response
  out.writeBytes("HTTP/1.1 200 OK\r\n");
  out.writeBytes("Content-type: "+contenttype+"\r\n");
  out.writeBytes("Content-Length: "+fileLength+"\r\n");
  out.writeBytes("\r\n");

try
  {
  sleep(200);
  }catch(InterruptedException e)
       {System.out.println(e.getMessage());}

//write out the file content
int x;
byte chunk[] = new byte[1024];

while ((x=FIS.read(chunk)) != -1)
                           {
                           out.write(chunk,0,x);
                           } 

out.flush();
}catch(FileNotFoundException e)
       {
       try{
          //the request can not be accomplished
          out.writeBytes("HTTP/1.1 ");
          out.writeBytes("404r\n"); 
          out.writeBytes("\r\n"); 
          out.flush();
          }catch(IOException ex)
               {System.out.println("Error:"+e.getMessage());}
                     
}catch(IOException e)
   {System.out.println("Error:"+e.getMessage());}
}

//open new connection
public void run()
{
try{
   System.out.println("NEW CLIENT...");
   out = new DataOutputStream(ClientSocket.getOutputStream()); 
   ISR=new InputStreamReader(ClientSocket.getInputStream());
   in=new BufferedReader(ISR);
            
   if((line=in.readLine())!=null && line.indexOf("HTTP/1.")!=-1)
         {
         firstLine=line;
         System.out.println(line);
         while((line=in.readLine())!=null && !line.equals(""))
            {       
            System.out.println(line);          
            }
         AnalyzeFirstLine(firstLine);   
         }    
    //end of connection - clean up
    System.out.println("CONNECTION OUT...");
    out.flush();
    out.close();     
    in.close(); 
    ClientSocket.close();
    }catch(IOException e)
       {
       System.out.println("Error:"+e.getMessage());   
       System.exit(1);
       } 
   }  
}

public class HTTPServer{
     public static void main(String[] args)
     {
     ServerSocket server=null;
     try{      
       server=new ServerSocket(80); 
  	  System.out.println("HTTP SERVER - WAITING CLIENTS...");
	  while(true){ 
                   Socket s=server.accept(); 
			 Thread t=new SendingWWW(s);
			 t.start(); 
			 }
	   }catch(IOException e)
             {System.out.println("Error:"+e.getMessage());}  
     }
}

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.