Веб -серверы также называются серверами протокола передачи гипертекста. Они используют HTTP для общения со своими клиентами. Веб-серверы на основе Java будут использовать два важных класса.
java.net.socket Class и класс java.net.serversocket и общаться на основе отправки HTTP -сообщений.
Этот простой веб -сервер будет иметь следующие три класса:
*Httpserver
*Запрос
*Ответ
Запись приложения в классе httpserver, метод main() создает экземпляр Httpserver, а затем вызывает его метод wait (). Как следует из названия, метод await() будет ждать HTTP -запрос на указанном порту, обработайте его, а затем отправит ответное сообщение обратно клиенту. Он останется ждать, пока команда выключения не будет получена.
Приложение отправляет только запросы на статические ресурсы, расположенные в указанном каталоге, таких как HTML -файлы и изображения, а также может отобразить входящий поток байта HTTP -запроса в консоли, но не отправляет никакой информации заголовка в браузер, такой как даты или куки, и т. Д.
Запрос:
пакет cn.com.server; импортировать java.io.inputstream; открытый запрос класса {private inputstream input; private String uri; public refse (inputstream input) {this.input = input;} public void parse () {// Читать набор символов из строки сокета stringbuffer = new Stringbuffer (2048); int i; byte [] buffer = stringbuffer = newte [2048); int i; byte [] buffer = newte = newte [2048); {i = input.read (buffer);} catch (exception e) {e.printstacktrace (); i = -1;} для (int j = 0; j <i; j ++) {request.append ((char) buffer [j]);} system.out.print (request.tostring (); uri = parseuri (request. requestString) {int index1, index2; index1 = requestString.indexof ("); if (index1! =-1) {index2 = requestString.indexof (" ", index1+1); if (index2> index1) {return requestString.substring (index1+1, index2); this.uri;}} Класс запроса представляет HTTP -запрос. Объект InputStream может быть передан для создания объекта запроса. Метод read() в объекте InputStream может быть вызван для чтения исходных данных HTTP -запроса.
Метод parse() в вышеуказанном исходном коде используется для анализа исходных данных HTTP -запроса. Метод Parse () будет вызовом частного метода parseUrI() для анализа запрошенного HTTP URI. Кроме того, работы не так много. Метод parseUri() хранит URI в переменной URI, и вызов публичному методу getUri() вернет запрошенный URI.
Ответ:
Пакет cn.com.server; импорт java.io.file; import java.io.fileinputstream; импорт java.io.ioexception; import java.io.outputstream;/** * http response = status-line * * ((общий заголовок | response-header spation-crlf). Dase-phrase crlf * */public class response {private static final int buffer_size = 1024; запрос запроса; outputStream output; public response (outputStream output) {this.output = output;} public void setRequest (запрос запроса) {this.request = request;} public void sendStaticReource () throws ioexcept byte [buffer_size]; fileInputStream fis = null; try {file file = new File (httpserver.web_root, request.geturi ()); if (file.exists ()) {fis = new FileInputStream (file); int ch = fis.read (bytes, 0, buffer_size); Buffer_size); ch = fis.read (bytes, 0, buffer_size);}} else {// Файл не найден string errormessage = "http/1.1 404 Файл не найден/r/n" "+" content-type: text/html/r/n "+" Содержимое: 23/r/n "+"/r/n "+" <h1> не "<h1> не" <H.+ "<H.+" <H.+ "<H.+" <H.+ "<H.+" <Html/r/n ". Найдено </h1> "; output.write (errormessage.getbytes ());}} catch (exception e) {system.out.println (e.tostring ());} наконец {if (fis! = Null) {fis.close ();}}}}}}}}}}}}}}}}}}}}}}}}}}} Объект ответа создается в методе await() класса httpserver путем передачи выходного потока, полученного в сокете.
Класс ответов имеет два публичных метода: setRequest() и sendStaticResource() . Метод setRequest() получит объект запроса в качестве параметра. Метод sendStaticResource() используется для отправки статического ресурса в браузер, такой как HTML -файл.
Httpserver:
пакет cn.com.server; импорт java.io.file; импорт java.io.inputStream; импортировать java.io.outputstream; import java.net.inetadress; импорт java.net.serversocket; импорт java.net.socket; public class httpserver {/***** * Для этого пакета Web_ROOT является каталогом "WebRoot" под * рабочим каталогом. * Рабочий каталог - это место в файловой системе *, откуда была вызвана команда Java. */public static final String web_root = System.getProperty ("user.dir")+file.separator+"webroot"; private static final string uptowd_command = "/shutdown"; private boolean shutdown = false; public static void main (string [] args) {httpserver server = new httpserver (); await () {serversocket serversocket = null; int port = 8080; try {serversocket = new serversocket (порт, 1, inetaddress.getbyname ("127.0.0.1"));} catch (Exception e) {e.printstacktrace (); System.Exit (0); input = null; outputStream output = null; try {socket = serversockectocket.accept (); input = socket.getInputStream (); output = socket.getOutputStream (); // Создать объект запроса и запрос parse = new Request (input); request.parse (); // Создание ответа ответа = new outport (output); (Exception e) {e.printstackTrace (); продолжение;}}}} Этот класс представляет собой веб -сервер, который может обрабатывать запросы на статические ресурсы указанного каталога, включая каталоги, указанные в общедоступной статической переменной Final 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 -сервер готов.
Выше приведено все о реализации Java простого анализа экземпляров веб -сервера, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!