The principle of the role of the HTTP protocol
WWW is an application system as a transmission medium in an Internet, and the most basic transmission unit on the WWW online is a web page. WWW's work is based on client / server computing models, composed of a web browser (client) and web server (server), and the hypertext transfer protocol (HTTP) is communicated between the two. The HTTP protocol is based on protocols above the TCP / IP protocol, which is an application layer protocol between web browses and web servers, which is a general, stateless, object-oriented protocol. The principle of the HTTP protocol includes four steps: (1) Connection: The web browser establishes a connection to the web server, open a virtual file called Socket (socket), and the establishment of this file is successfully established. (2) Request: The web browser submits a request to the web server via Socket. The request of HTTP is generally the GET or POST command (POST is used for the transfer of the FORM parameter). The format of the GET command is: GET path / file name HTTP / 1.0 file name points to the file accessed, and HTTP / 1.0 pointed out the HTTP version used by the web browser. (3) Available: After the web browser submits the request, transfer to the web server via the HTTP protocol. After the web server is connected, transaction processing, the processing result is sent back to the web browser via HTTP, so that the requested page is displayed on the web browser. Example: Assume that the client has established a connection with www.mycompany.com:8080/mydir/index.html, it will send a get command: get /mydir/index.html http / 1.0. The host named WWW.MYCOMPANY.COM Search subdirectory MyDir file index.html from its documentation space. If you find this file, the web server transmits the content to the corresponding web browser. In order to inform the web browser, the web server first transmits some HTTP header information, then transmits the specific content (ie HTTP body information), and HTTP header information and HTTP body information are separated from one space. Common HTTP headers are: 1 HTTP 1.0 200 OK This is the first line of the web server response, lists the HTTP version number and response code that the server is running. The code "200 ok" indicates the completion of the request. 2 MIME_VERSION: 1.0 It indicates the version of the MIME type. 3 Content_Type: Type This header information is very important, it indicates the MIME type of HTTP information. Such as: content_type: text / html indicates that the transferred data is an HTML document. 4 Content_length: The length value indicates the length of the HTTP body information (bytes). (4) Turning the connection: When the response is completed, the web browser and the web server must be disconnected to ensure that other web browsers can connect with the web server.
Second, Java implementation of web server function programming
According to the principle of the above HTTP protocol, the method of implementing the web server program for GET requests is as follows: (1) Creating a ServerSocket class object, listening to port 8080. This is to distinguish between the standard TCP / IP port 80 of HTTP; (2) Waiting, accept the client to connect to the port 8080, get the socket associated with the client; (3) Creating the input stream associated with the socket word Instream and output flow outstream; (4) Read the request information submitted by a line client from the input stream INSTREAM associated with the socket, the format of the request information is: GET path / filename http / 1.0 (5) gets from the request information Request type. If the request type is GET, get the HTML file name accessed from the request information. When there is no HTML file name, use index.html as a file name; (6) If the HTML file exists, open the HTML file, transfer the http header information and the HTML file content to the web browser via the Socket, and then close the file. Otherwise send an error message to the web browser; (7) Close the socket word connected to the corresponding web browser. The following program is written in accordance with the above method, which enables multi-threaded web servers to ensure that multiple clients can connect to the web server. Procedure 1: WebServer.java file // WebServer.java Written Web Server IMPORT JAVA.IO. *; Import Java.net. *; Public Class Webserver {Public Static Void Main (String Args []) {INT i = 1 , Port = 8080; Serversocket Server = null; socket client = null; try {server = new serversocket (port); system.out.println ("Web Server is listening on port" server.getlocalport ()); for ;) {Client = server.Accept (); // Accept the client's connection request New connectionthread (Client, i) .Start (); i ;}} catch (exception e) {system.out.println (e); }}}
/ * ConnnectionThread class does communicate with a Web browser * / class ConnectionThread extends Thread {Socket client; // socket connected Web browser word int counter; // counter public ConnectionThread (Socket cl, int c) {client = cl Counter = C;} PUBLIC VOID RUN () // Wire body {Try {string destip = client.getinetaddress (). ToString (); // client IP address int destport = client.getport (); // client port number System.out.println ( "Connection" counter ": connected to" destIP "on port" destport "."); PrintStream outstream = new PrintStream (client.getOutputStream ()); DataInputStream instream = new DataInputStream ( Client.getInputStream ()); string inline = instream.readline (); // reads the request information submitted by the web browser system.out.println ("received:" inline); if (getRequest (inline) {/ / If it is a GET request string filename = getFileName (inline); file file = new file (file "; if (file.exists ()) {// If the file exists, send the file to the web browser system.out.println (FileName "Requested."); Outstream.println ("HTTP / 1.0 200 OK"); Outstream.println ("MIME_V Ersion: 1.0 "); OutStream.println (" Content_Type: Text / HTML); int Len = (int) file.length (); outstream.println ("Content_length:" LEN); Outstream.println ("") Sendfile (outstream, file); // Send file outstream.flush ();} else {// file String notfound = "
Content_type: text / html "); OutStream.println (" Content_length: " NOTFOUND.LENGTH () 2); Outstream.println (" "); Outstream.Println (notfound); outstream.flush ();} ring M1 = 1; While (m1 <11100000) {m1 ;} // delay client.close ();} catch (ioException e) {system.out.println ("Exception:" e);}} / * Get The request type is "get" * / boolean getRequest (String s) {if (s.Length ()> 0) {if (s.substring (0, 3) .EqualsignoreCase ("get") Return True;} return False;}
/ * Get the file name to be accessed * / string getFileName (String s) {string f = s.substring (s.indexof ('') 1); f = f.substring (0, f.indexof ('') ); Try {if (f.Charat (0) == '/') f = f.substring (1);} catch (stringIndexoutofboundsexception e) {system.out.println ("Exception:" e);} if (F. Equals (")) f =" index.html "; returnif;}
/ * Send the specified file to the web browser * / void sendfile (PrintStream outs, file file) {Try {DataInputStream IN = New DataInputStream (New fileInputStream (file); int Len = (int) file.length (); byte Buf [] = new byte [len]; in.readfully (buf); Outs.write (buf, 0, len); outs.flush (); in.close ();} catch (exception e) {system.out .println ("ERROR RETRIEVING FILE."); System.exit (1);}}}
The ConnectionThread thread subclass in the program is used to analyze a request submitted by a web browser and pass the response information back to the web browser. Among them, the getRequest () method is used to detect whether the customer's request is "get"; the getFileName (s) method is to obtain the HTML file name to be accessed from the customer request information S; sendFile () method to pass the specified file content via Socket Give a web browser. Modifications to the getRequest () method of the above program and related parts can also be processed.
Third, run an example
In order to test the correctness of the program, the compiled webserver.class, connectionthread.class, and the following index.html file are placed in the same directory of a host of the network (such as the host NT40SRV C: / jweb directory). Program 2: Index.html file
HEAD>
August 28, 1998
Body>
Html>
First, use the java command on this host to run WebServer.class:
C: / jweb> Java Web Server
Then enter the browser software at the client, and enter the URL address to which the Webserver program is at the URL (eg
HTTP: // NT40SRV: 8080 / index.html), the specified HTML document is displayed in the browser window.
Note that the port number 8080 cannot be default, such as default, run the normal web server.
Explanation, no network conditions can be tested on a single machine installed in Windows 95, the method is used to replace the domain name part of the URL address with localhost or 127.0.0.1, ie the URL address is
Http: // localhost: 8080.