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());}
}
}
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.
|