Implement a web server HTTP protocol with Java

zhaozj2021-02-11  205

Implement web server with Java

Xu Hui, Guangxi Financial College

I. The role of the HTTP protocol The principle of the HTTP protocol includes four steps: 1. Connection: The web browser establishes a connection to the web server. 2. Request: The web browser submits a request to the web server via Socket. 3. Answer: After the web browser submits the request, transfer to the web server via HTTP. After the web server receives the request, 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. 4. Relationship connection: After the response is completed, the web browser must be disconnected to ensure that other web browsers can connect with the web server. Second, using Java to implement the web server programming According to the principle of the above HTTP protocol, the method of implementing the web server program for GET request is as follows: 1. Create 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 to obtain the socket; 3. Create input stream INSTREAM associated with socket, Stream OutStream; format: GET path / file name HTTP / 1.0; 4. Read the request information submitted by the client from the input stream INSTREAM associated with the socket, requesting the format of the information: GET path / file name HTTP / 1.0 ; 5. Get the request type from the request information. If the request type is GET, get the HTML file name accessed from the request information. When there is no html file name, then index.htm1 is used 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 server via Socket, then close the file, otherwise send an error Information gives a 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.

//Webserver.java writes web server import java.io. *; import java.Net. *; Import java.util.date; public class webserver {public static void main (string args [= 1) {int i = 1 , Port = 8080; Serversocket Server = null; socketclient = null; try {server = new serversocket (port); system.out.println ("Web Server IS Listening on Port" Server.getlocalPort ()); for (;;) {Client = server.accept (); // Accept the connection of the client New Connection Thread (Client, i) .Start (); i ;}} catch (exception e) {system.out.println (e);} }}} / * Connnection Thread class completes communication with a web browser * / Class Connection Thread Extends Thread {socket client; // Connect the web browser's socket word int counter; // counter PUBLIC Connection Thread (socketcl, INT C) {Client = CL; counter = C;} PUBLIC VOID RUN () // Wire body {Try {string deskip = client.getinetaddress (). TOSTRING (); // client IP address INT DESTPORT = client.getPort (); // client port number System.out.println ( "Connecction" counter ": connected to" destIP "on port" destport "."); PrintStream outstream = new printStream (client.getOoutputStream ()); DataInputStreaminstream new DataInputStream (clien T.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 (filename); if (file.exists ()) {// If the file exists, give the file to the web browser system.out.println (FileName "Requested."); Outstream.Println ("http / 1.0200 OK "); OutStream.println (" MIME_VERSION: 1.0 "); OutStream.println (" Content_Type: Text / HTM1); int Len = (int) file.length (); Outstream.println ("Content_length:" LEN) OutStream.println (""); sendfile (outstream, file); // Send file outstream.flush ();} else {// file String notfound = " not found </ Title> </ head> <body> <hl> error404-file notfound </ hl> </ body> </ html> "; outstream.println (" http /1.0 404 no found "); outstream.println "Content_Type: Text / HTML"); OutStream.println ("Content_length:" NOTFOUND.LENGTH () 2); outstream.println (""); outstream.println (notfound); Outstream.flush ();}} long m1 = 1; While (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 (String Index) Outofboundsexception e) {system.out.println ("Exception:" E);} if (F.Equals (")) f =" index.html ";</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-3546.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="3546" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.052</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = '42QIDfjAKthQfPron8QPGdiX_2FsO2c7WG8b6FW6yR2QQ_2Focnc2dvyOuwwz3NLUAgT8XAYh69elta1bc1j'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>