เว็บเซิร์ฟเวอร์เรียกอีกอย่างว่าเซิร์ฟเวอร์ Hypertext Transfer Protocol พวกเขาใช้ HTTP เพื่อสื่อสารกับลูกค้าของพวกเขา เว็บเซิร์ฟเวอร์ที่ใช้ Java จะใช้สองคลาสสำคัญ
คลาส java.net.socket และคลาส java.net.serversocket และสื่อสารตามการส่งข้อความ HTTP
เว็บเซิร์ฟเวอร์ง่าย ๆ นี้จะมีสามคลาสต่อไปนี้:
*httpserver
*ขอ
*การตอบสนอง
รายการของแอปพลิเคชันในคลาส HTTPSERVER วิธีการ main() สร้างอินสแตนซ์ HTTPSERVER จากนั้นเรียกใช้วิธีการรอคอย () ตามชื่อแนะนำวิธี await() จะรอคำขอ HTTP ในพอร์ตที่ระบุประมวลผลแล้วส่งข้อความตอบกลับกลับไปยังไคลเอนต์ มันจะยังคงรอจนกว่าจะได้รับคำสั่งปิด
แอปพลิเคชันจะส่งคำขอสำหรับทรัพยากรคงที่ที่อยู่ในไดเรกทอรีที่ระบุเช่นไฟล์และรูปภาพ HTML และยังสามารถแสดงการร้องขอ HTTP ที่เข้ามาในคอนโซล แต่ไม่ส่งข้อมูลส่วนหัวใด ๆ ไปยังเบราว์เซอร์เช่นวันที่หรือคุกกี้ ฯลฯ
ขอ:
แพ็คเกจ cn.com.server; นำเข้า java.io.inputstream; คำขอคลาสสาธารณะ {อินพุตส่วนตัวอินพุต; สตริงส่วนตัว uri คำขอสาธารณะ (อินพุตอินพุต) {this.input = อินพุต;} โมฆะสาธารณะ parse () {// อ่านชุดอักขระจากซ็อกเก็ตสตริง {i = input.read (บัฟเฟอร์);} catch (Exception e) {E.printStackTrace (); i = -1;} สำหรับ (int j = 0; j <i; j ++) {request.append ((char) buffer [j]);} system.out.ut.print RequestString) {int index1, index2; index1 = requestString.indexof (""); ถ้า (index1! =-1) {index2 = requestString.indexof ("", index1+1); if (index2> index1) คลาสคำขอแสดงถึงคำขอ HTTP วัตถุ InputStream สามารถส่งผ่านเพื่อสร้างวัตถุคำขอ วิธี read() ในวัตถุอินพุตสตรีมสามารถเรียกใช้เพื่ออ่านข้อมูลต้นฉบับของคำขอ HTTP
เมธอด parse() ในซอร์สโค้ดด้านบนใช้เพื่อแยกวิเคราะห์ข้อมูลต้นฉบับของคำขอ HTTP วิธี Parse () จะเรียกวิธีการส่วนตัว parseUrI() เพื่อแยกวิเคราะห์ HTTP ที่ร้องขอ URI นอกจากนี้ยังมีงานไม่มากนัก วิธี parseUri() เก็บ uri ในตัวแปร uri และการเรียกวิธีการสาธารณะ getUri() จะส่งคืน URI ที่ร้องขอ
การตอบสนอง:
แพ็คเกจ cn.com.server; นำเข้า java.io.file; นำเข้า java.io.fileinputstream นำเข้า java.io.ioException; นำเข้า java.io.OutputStream;/** * http การตอบสนอง = สถานะ-บรรทัด * * (ทั่วไป สถานะรหัส SP วลี CRLF * */การตอบสนองระดับสาธารณะ {ส่วนตัวคงที่ int buffer_size = 1024; คำขอคำขอ; เอาท์พุทเอาท์พุท; BYTE [buffer_size]; fileInputStream fis = null; ลอง {ไฟล์ไฟล์ = ไฟล์ใหม่ (httpserver.web_root, request.geturi ()); ถ้า (file.exists ()) {fis = ใหม่ fileInputStream (ไฟล์); int ch = fis.Read 0, buffer_size); ch = fis.read (bytes, 0, buffer_size);}} else {// ไฟล์ไม่พบสตริง errormessage = "http/1.1 404 ไฟล์ไม่พบ/r/n"+ "ประเภทเนื้อหา: text/html/r/n"+ " พบ </h1> "; output.write (errormessage.getBytes ());}} catch (ข้อยกเว้น e) {system.out.println (e.toString ());} ในที่สุด {ถ้า (fis! = null) {fis.close ();}}}}} วัตถุตอบสนองถูกสร้างขึ้นในวิธี await() ของคลาส Httpserver โดยผ่านเอาท์พุทสตรีมที่ได้รับในซ็อกเก็ต
คลาสการตอบสนองมีสองวิธีสาธารณะ: setRequest() และ sendStaticResource() เมธอด setRequest() จะได้รับวัตถุคำขอเป็นพารามิเตอร์ เมธอด sendStaticResource() ใช้เพื่อส่งทรัพยากรคงที่ไปยังเบราว์เซอร์เช่นไฟล์ HTML
httpserver:
แพ็คเกจ cn.com.server; นำเข้า java.io.file; นำเข้า java.io.inputstream นำเข้า java.io.OutputStream; นำเข้า java.net.inetaddress; นำเข้า Java.net.serversocket; นำเข้า Java.net.socket * สำหรับแพ็คเกจนี้ Web_root เป็นไดเรกทอรี "webroot" ภายใต้ * ไดเรกทอรีการทำงาน * * ไดเรกทอรีการทำงานคือตำแหน่งในระบบไฟล์ * จากที่คำสั่ง Java ถูกเรียกใช้ */สตริงสุดท้ายคงที่ web_root = system.getProperty ("user.dir")+file.Sparator+"webroot"; สตริงคงสุดท้ายส่วนตัว shutdown_command = "/shutdown"; การปิดบูลีนส่วนตัว = เท็จ Await () {Serversocket Serversocket = null; int port = 8080; ลอง {serversocket = ใหม่ serversocket (พอร์ต, 1, inetaddress.getByName ("127.0.0.1")); input = null; outputStream output = null; ลอง {socket = serversocket.accept (); input = socket.getInputStream (); output = socket.getOutputStream (); // สร้างการร้องขอวัตถุคำขอ การตอบสนอง (เอาท์พุท); Response.SetRequest (คำขอ); Response.SendStaticResource ();} catch (Exception e) {E.printStackTrace (); ดำเนินการต่อ;}}}} คลาสนี้แสดงถึงเว็บเซิร์ฟเวอร์ที่สามารถจัดการคำขอสำหรับทรัพยากรคงที่ของไดเรกทอรีที่ระบุรวมถึงไดเรกทอรีที่ระบุโดยตัวแปรคงที่สาธารณะสุดท้าย Web_root และไดเรกทอรีย่อยทั้งหมด
ตอนนี้สร้างหน้า html ใน webroot, ชื่อ index.html, ซอร์สโค้ดมีดังนี้:
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> แทรกชื่อที่นี่ </title> </head> <body> <h1> Hello World! </h1> </body> </html>
ตอนนี้เริ่มเว็บเซิร์ฟเวอร์และขอหน้า index.html คงที่
เอาต์พุตของคอนโซลที่เกี่ยวข้อง:
ด้วยวิธีนี้เซิร์ฟเวอร์ HTTP ที่เรียบง่ายจะเสร็จสิ้น
ข้างต้นคือทั้งหมดที่เกี่ยวกับการใช้งานการวิเคราะห์อินสแตนซ์ของเว็บเซิร์ฟเวอร์อย่างง่ายฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!