How to achieve a simple HTTP server

zhaozj2021-02-16  48

File name: myhtpservertest.java

Import java.io. *; import java.Net. *; import java.util. *;

/ ** * main * / public class myhttpsertest {

String m_szServerName; // server name String m_szVersion; // server version int m_nServerPort; // port public MyHttpServerTest (String szServerName, String szVersion, int nServerPort) {this.m_szServerName = szServerName; this.m_szVersion = szVersion; this.m_nServerPort = nServerPort } / ** * Show version information * / public void showserverinformation () {system.out.println ("Welcome to newman HTTP Server!"); System.out.Println ("Server Name: this.m_szservername) System.out.println ("Server Version:" this.m_szversion);} public void start () {this.showserverinformation ();

try {ServerSocket server = new ServerSocket (this.m_nServerPort); while (true) {Socket client = server.accept (); (new HttpClientThread (client)) run ();.}} catch (Exception e) {e.printStackTrace (); System.exit (1);}} public static void main (String args []) {MyHttpservertest Server = New MyHttpservertest ("MyHttpservertest", "1.0", 80); server.start ();}}

class HttpClientThread implements Runnable {Socket m_sClient; HTTPRequest m_Request; HttpClientThread (Socket sClient) throws IOException {this.m_sClient = sClient; this.m_Request = new HTTPRequest (this.m_sClient);} public void run () {try {System.out. Println (this.getconnectinfo ()); bufferedoutputstream out = new bufferedoutputstream (this.m_sclient .getoutputstream ()); system.Out.println (this.m_request.getlog ());

if (this.m_Request.isGetRequest ()) this.processGetRequest (this.m_Request, out); System.out.println ( "Request completed Closing connection.."); this.m_sClient .close ();} catch (IOException e ) {System.out.println ( "IOException occurred."); e.printStackTrace ();}} / ** * get Connect Info * / public String getConnectInfo () {String szClientHostName = this.m_sClient .getInetAddress () getHostName. (); String szClientAddress = this.m_sClient .getInetAddress () .getHostAddress (); int ClientPort = this.m_sClient .getPort (); String szRet = ""; szRet = "Accepted connection from" szClientHostName "(" szClientAddress " ) " " on port " clientport ". "; returnis

void processGetRequest (HTTPRequest request, BufferedOutputStream out) throws IOException {String szFileName = request.getFileName (); File file = new File (szFileName); if (file.exists ()) this.sendFile (out, file); else {/ The file does not exist system.out.println ("file" file.getcanonicalPath () "does not exist."); String notfound = " notfact </ title> </ Head> <body> <h1> " " Error 404-File Not Found </ h1> <p> " " File Name: " File " Not Found " " <br> " " <a href = index .htm> return index </a> " " </ body> </ html> ";</p> <p>File: //out.write (New String "). getBytes ()); out.write (New String (" HTTP / 1.0 200 OK / R / N "). GetBytes ()) Out.write ("Content_Length:" NOTFOUND.LENGTH () 2) .GetBytes ()); Out.write ("Content_Type: Text / HTML / R / N / R / N") .getbytes ()); out.write ("") .getBytes ()); out.write (notfound.getbytes ()); out.flush ();}} void sendfile (BufferedoutputStream out, file file) {Try {DataInputStream DIN = New DataInputStream (New FileInputStream (file)); int Len = (int) file.Length (); byte buffer [] = new byte [len]; din.readfully (buffer); DIN.CLOSE Out.write ("HTTP / 1.0 200 OK / R / N"). GetBytes ()); Out.write ("Content-Length:" Buffer.Length "/ R / N ") .getbytes ()); out.write (" Content-Type: Text / HTML / R / N / R / N "). getBytes ()); out.write (buffer); out.flush ); Out.close (); system.out.println ("File Sent:" file.getcanonicalPath ()); system.out.println ("Number of Bytes:" LEN);} Catch (Exception E) {Try {Out.write ("HTTP / 1.0 400" "No CAN DO" "/ R / N"). getBytes ()); Out.write ("Content-Type: Text / HTML / R / N / R / N ".GetBytes ());} catch (ioexception ooe) {system.out.println (" ERROR RETRIEVING " File;}}}} vector m_vlines}} m_sClient; HttpInputStream m_In; HTTPRequest (Socket client) throws IOException {this.m_sClient = client; this.m_In = new HttpInputStream (this.m_sClient.getInputStream ()); this.getRequest ();}</p> <p>public String getLog () {StringBuffer szRet = new StringBuffer (); szRet.append ( "Received the following request:" "/ n"); Enumeration enum = m_vLines.elements (); String szstr1 = ""; while (enum .hasMoreElements ()) {szstr1 = (string) enum.nexTelement (); szret.append (szstr1 "/ n");} return szstr1.toString ();} boolean isgetRequest () {if (this.m_vlines .size) )> 0) {String firstline = (string) this.m_vlines.elementat (0); if (firstline.Length ()> 0) IF (firstline.substring (0,3) .Equalsignorecase ("get") Return True Return False;} String getFileName () {if (this.m_vlines .size ()> 0) {string firstline = (string) this.m_vlines.elementat (0); string filename = firstline.substring (firstline.indexof) "" ") 1); int N = filename.indexof (" "); if (n! = - 1) filename = filename.substring (0, n); try {if (filename.Charat (0) == ' / ') Filename = filename.substring (1);} catch (StringIndexoutofboundsexception ex) {} if (filename.equals (")) filename =" index.htm "; if (filename.charAt (filename.length () -1) == '/') filename = "index.htm"; // not understand return filename;} else return "";} public HttpInputStream getInputStream () {return this .m_in;} public httprequest getRequest () throw ;; while {line = this.m_in.readline (); if (line.length ()> 0) THIS.M_IN.Addline (line); Else Break;} Return this;} / ** * Only Use to recognize methed "get"</p> <p>* / Class HttpInputStream extends FilterInputStream {HttpInputStream (InputStream in) {super (in);} public void addLine (String line) {m_vLines .addElement (line);} public String readLine () throws IOException {StringBuffer result = new StringBuffer () Boolean finished = false; boolean isenter = false; while (! Finished) {INT CH = -1; ch = read (); if (isenter) && (ch == 10)) {// if it is "/ N / R "Result.setlength (Result.Length () - 1); // Had Added" / N ", Remove It Return Result.toString ();} if (ch == 13) // if enterpener iester = True; Else iSenter = false; if (ch == - 1) // end return fruit.toString (); else result.Append ((char) ch);} returnrate.tostring ();}}}</p> <p>Please advise</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-26387.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="26387" 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.038</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 = 'e_2FCu6uJvHPD0iygrQniuV0IZlq9yc_2FFefIJ8qui5lMs4kIVdlSFij3SS7EH7YkW_2FUisLBLVzEoDNgyTT2HameQ_3D_3D'; 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>