001 package com.croftsoft.core.net.http;
002
003 import java.io.*;
004 import java.net.*;
005 import java.util.*;
006
007 /*********************************************************************
008 * Nasty quick hack of a web server.
009 *
010 * <P>
011 *
012 * @author
013 * <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A>
014 * @version
015 * 1999-12-24
016 *********************************************************************/
017
018 public class WebServer implements Runnable {
019 //////////////////////////////////////////////////////////////////////
020 //////////////////////////////////////////////////////////////////////
021
022 private static final String CRLF = "\r\n";
023
024 private static final String SERVER = "FileServer/1.0";
025
026
027 private final String root;
028
029 private final int port;
030
031 private boolean running;
032
033 private ServerSocket serverSocket;
034
035 //////////////////////////////////////////////////////////////////////
036 //////////////////////////////////////////////////////////////////////
037
038 public static void main ( String [ ] args )
039 //////////////////////////////////////////////////////////////////////
040 {
041 String root = "./";
042
043 int port = 80;
044
045 new Thread ( new WebServer ( root, port ) ).start ( );
046 }
047
048 public void shutdown ( )
049 //////////////////////////////////////////////////////////////////////
050 {
051 running = false;
052
053 try { serverSocket.close ( ); } catch ( Exception e ) { }
054 }
055
056 public WebServer ( String root, int port )
057 //////////////////////////////////////////////////////////////////////
058 {
059 this.root = root;
060
061 this.port = port;
062 }
063
064 public void run ( )
065 //////////////////////////////////////////////////////////////////////
066 {
067 try
068 {
069 serverSocket = new ServerSocket ( port );
070
071 running = true;
072
073 while ( running )
074 {
075 Socket clientSocket = serverSocket.accept ( );
076
077 System.out.println ( clientSocket.getInetAddress ( ) );
078
079 BufferedReader in = new BufferedReader (
080 new InputStreamReader ( clientSocket.getInputStream ( ) ) );
081
082 String line = in.readLine ( );
083
084 StringTokenizer tokenizer = new StringTokenizer ( line );
085
086 tokenizer.nextToken ( );
087
088 String filename = tokenizer.nextToken ( );
089
090 System.out.println ( filename );
091
092 while ( ( line = in.readLine ( ) ) != null )
093 System.out.println ( line );
094
095 System.out.println ( "Done reading" );
096
097 PrintWriter out = new PrintWriter (
098 new BufferedWriter ( new OutputStreamWriter (
099 clientSocket.getOutputStream ( ) ) ) );
100
101 File file = new File ( root + filename );
102
103 if ( !file.exists ( ) )
104 {
105 System.out.println ( "File does not exist." );
106 out.print ( "HTTP/1.0 404 Not Found" + CRLF );
107 out.print ( "Date: Mon, 09 Mar 1998 01:13:44 GMT" + CRLF );
108 out.print ( "Server: " + SERVER + CRLF );
109 out.print ( "Content-type: text/html" + CRLF );
110 out.print ( CRLF );
111 out.println ( "<HEAD><TITLE>404 Not Found</TITLE></HEAD>" );
112 out.println ( "<BODY><H1>404 Not Found</H1>" );
113 out.println ( "File \"" + filename + "\" was not found.<P>" );
114 out.println ( "</BODY></HTML>" );
115 }
116 else
117 {
118 out.print ( "HTTP/1.0 200 Document follows" + CRLF );
119 out.print ( "Date: Mon, 09 Mar 1998 00:42:07 GMT" + CRLF );
120 out.print ( "Server: " + SERVER + CRLF );
121 out.print ( "Content-type: text/plain" + CRLF );
122 out.print ( "Last-modified: Sun, 08 Mar 1998 23:41:34 GMT" + CRLF );
123 // file.lastModified ( )
124 out.print ( "Content-length: " + file.length ( ) + CRLF );
125 out.print ( CRLF );
126
127 BufferedInputStream in_file
128 = new BufferedInputStream ( new FileInputStream ( file ) );
129
130 int c;
131
132 while ( ( c = in_file.read ( ) ) != -1 )
133 {
134 out.write ( c );
135 }
136
137 in_file.close ( );
138 }
139
140 out.flush ( );
141
142 clientSocket.close ( );
143 }
144 }
145 catch ( Exception ex )
146 {
147 ex.printStackTrace ( );
148 }
149
150 try
151 {
152 serverSocket.close ( );
153 }
154 catch ( Exception e )
155 {
156 }
157 }
158
159 //////////////////////////////////////////////////////////////////////
160 //////////////////////////////////////////////////////////////////////
161 }