웹 서버를 하이퍼 텍스트 전송 프로토콜 서버라고도합니다. 그들은 HTTP를 사용하여 고객과 의사 소통합니다. Java 기반 웹 서버는 두 가지 중요한 클래스를 사용합니다.
java.net.socket class 및 java.net.serversocket class 및 http 메시지를 기반으로 통신합니다.
이 간단한 웹 서버에는 다음 세 가지 클래스가 있습니다.
*httpserver
*요구
*응답
httpserver 클래스에서 응용 프로그램의 항목 main() 메소드는 httpserver 인스턴스를 생성 한 다음 () 메소드를 호출합니다. 이름에서 알 수 있듯이 await() 메소드는 지정된 포트의 HTTP 요청을 기다린 다음 처리 한 다음 클라이언트에게 응답 메시지를 다시 보냅니다. 종료 명령이 수신 될 때까지 기다릴 것입니다.
응용 프로그램은 HTML 파일 및 이미지와 같은 지정된 디렉토리에 위치한 정적 리소스에 대한 요청 만 보내며, 들어오는 HTTP 요청 바이트 스트림을 콘솔에 표시 할 수도 있지만 날짜 또는 쿠키 등과 같은 브라우저에 헤더 정보를 보내지 않습니다.
요구:
package cn.com.server; import java.io.inputStream; public class 요청 {private inputStream input; private string uri; public request (isputstream input) {this.input = input;} public void parse () {// socket stringbuffer 요청 = new StringBuffer (2048); {i = input.read (buffer);} catch (예외 e) {e.printstacktrace (); i = -1;} for (int j = 0; j <i; j ++) {request.append ((char) buffer [j]);} system.out.print (request.toString ()); uri = parseuri (requestring ()); requestString) {int index1, index2; index1 = requestString.indexof ( ""); if (index1! = -1) {index2 = retureString.indexof ( "", index1+1); if (index2> index1) {reture retureString.subString (index1+1, index2); 요청 클래스는 HTTP 요청을 나타냅니다. INPUTSTREAM 객체를 전달하여 요청 객체를 생성 할 수 있습니다. HTTP 요청의 원래 데이터를 읽으려면 입력 스트림 객체의 read() 메소드를 호출 할 수 있습니다.
위 소스 코드의 parse() 메소드는 HTTP 요청의 원래 데이터를 구문 분석하는 데 사용됩니다. Parse () 메소드는 HTTP 요청 된 URI를 구문 분석하기 위해 개인 메소드 parseUrI() 호출합니다. 이 외에도 많은 작업이 없습니다. parseUri() 메소드는 변수 URI에 URI를 저장하고 공개 메소드 getUri() 호출 요청 된 URI를 반환합니다.
응답:
패키지 cn.com.server; import java.io.file; import java.io.fileInputStream; import java.io.ioException; import java.io.outputStream;/** * http 응답 = status-line * * ((일반-헤드 | 응답-헤드 | Entity-Header) crlf) * crlf * [메시지-보드 *] 상태 코드 sp rasure-phrase crlf */public class 응답 {private static final int buffer_size = 1024; 요청 요청; 공개 응답 (outputStream 출력) {this.output = output;} public void setRequest (this.request = request;} public void sendstaticresource () throwes ioexemence bytes = new 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); "Content-Type : Text/Html/R/N"+ "내용 길이 : 23/r/n"+ "/r/n"+ "<h1> 파일 찾기 </h1>"; output.write (errormessage.getBytes ());}} catch (예외 e) {system.out.println (e.tostring ()); 마지막으로 {if (fis! = null) {fis.close ();}}}} 응답 객체는 소켓에서 얻은 출력 스트림을 전달하여 httpserver 클래스의 await() 메소드에서 생성됩니다.
응답 클래스에는 setRequest() 와 sendStaticResource() 두 가지 공개 방법이 있습니다. setRequest() 메소드는 파라미터로 요청 객체를 수신합니다. sendStaticResource() 메소드는 HTML 파일과 같은 브라우저로 정적 리소스를 보내는 데 사용됩니다.
httpserver :
패키지 cn.com.server; import java.io.file; import java.io.inputStream; import java.io.outputStream; import java.net.inetAddress; import java.net.serversocket; import java.net.socket; public httpserver {/*** web_root는 html 및 기타 파일이 어디에나 있습니다. *이 패키지의 경우 Web_Root는 작업 디렉토리의 "Webroot"디렉토리입니다. * 작업 디렉토리는 Java 명령이 호출 된 파일 시스템의 위치입니다. */public static final string web_root = system.getProperty ( "user.dir")+file.separator+"webroot"; private static final string shutdown_command = "/shutdown"; private boolean shutdown = false; public static void main (string [] arg [] argtpers server =} public void (); await (); await (); await () {serversocket serversocket = null; int port = 8080; try {serversocket = new serversocket (port, 1, inetAddress.getByName ( "127.0.0.1"));} catch (Exception e) {e.printstackTrace (); System.Exit (0); 입력 = null; outputStream output = null; try {socket = serversocket.accrect (); input = socket.getInputStream (); output = socket.getOutputStream (); // 요청 개체 생성 및 구문 분석 요청 = 새 요청 (입력); request.parse (); 응답 응답 응답 = 새 생성 응답 (output); response.setRequest (request); response.sendStaticResource ();} catch (예외 e) {e.printstacktrace (); 계속;}}}} 이 클래스는 공개 정적 변수 최종 Web_Root에서 지정된 디렉토리 및 모든 하위 디렉토리를 포함하여 지정된 디렉토리의 정적 리소스 요청을 처리 할 수있는 웹 서버를 나타냅니다.
이제 webroot에서 index.html이라는 HTML 페이지를 만듭니다. 소스 코드는 다음과 같습니다.
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> 제목 삽입 </title> </head> <hod> <h1> Hello World! </h1> </body> </html>
이제 웹 서버를 시작하고 index.html 정적 페이지를 요청하십시오.
해당 콘솔의 출력 :
이런 식으로 간단한 HTTP 서버가 수행됩니다.
위의 내용은 간단한 웹 서버 인스턴스 분석의 Java 구현에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!