Os servidores da Web também são chamados de servidores de protocolo de transferência de hipertexto. Eles usam o HTTP para se comunicar com seus clientes. Os servidores da Web baseados em Java usarão duas classes importantes.
Java.net.socket Class e Java.net.erversocket Class e comunique -se com base no envio de mensagens HTTP.
Este servidor web simples terá as três classes a seguir:
*HttpServer
*Solicitar
*Resposta
A entrada do aplicativo na classe HttpServer, main() cria uma instância HTTPServer e, em seguida, chama seu método Await (). Como o nome sugere, await() aguardará a solicitação HTTP na porta especificada, a processará e enviará uma mensagem de resposta de volta ao cliente. Ele permanecerá esperando até que o comando de desligamento seja recebido.
O aplicativo envia apenas solicitações de recursos estáticos localizados no diretório especificado, como arquivos e imagens HTML, e também pode exibir o fluxo de byte de solicitação HTTP recebida para o console, mas não envia nenhuma informação do cabeçalho ao navegador, como datas ou cookies, etc.
Solicitar:
pacote cn.com.server; importar java.io.inputStream; public class Request {Inserir inputStream input; private string uri; solicitação pública (entrada inputStream) {this.input = input;} public void parse () {// leia um conjunto de caracteres do soquete strockbuffer = new stringbuffer (20); {i = input.read (buffer);} catch (Exceção e) {e.printStackTrace (); i = -1;} para (int j = 0; j <i; j ++) {request.Append (() buffer [j]);} System.out.print (request.ToString ()); uri = parTeri; parTIs; requeststring) {int index1, index2; index1 = requestString.indexof (""); if (index1! =-1) {index2 = requeststring.indexof ("", index1+1); if (index2> index1) {return} {Return NULL; A classe de solicitação representa uma solicitação HTTP. O objeto InputStream pode ser passado para criar um objeto de solicitação. read() no objeto InputStream pode ser chamado para ler os dados originais da solicitação HTTP.
parse() no código -fonte acima é usado para analisar os dados originais da solicitação HTTP. O método parse () chamará o método privado parseUrI() para analisar o URI solicitado HTTP. Além disso, não há muito trabalho. parseUri() armazena o URI na variável URI, e chamando o método público getUri() retornará o URI solicitado.
Resposta:
pacote cn.com.server; importar java.io.file; importar java.io.fileInputStream; importar java.io.ioException; importar java.io.outputStream;/** * http Response = status-line * * ((cabeçalho de resposta | header | Razão-Frase Crlf * */public classe Response {private estático final int buffer_size = 1024; solicitação de solicitação; saída de saída de saída; resposta pública (saída de saída de saída) {this.output = output;} public void setReSTows (solicitação) {this.request = request;}} vazio público sendTeSoSTowsTows () {this.request = request;}} anulousTstaticSource () byte [buffer_size]; fileInputStream fis = null; try {file file = new File (httpServer.web_root, request.geturi ()); if (file.exists ()) {fis = new FileInTStream (file); int ch = fis.read () {fis. 0, BUFFER_SIZE);ch=fis.read(bytes, 0, BUFFER_SIZE);}} else{//file not found String errorMessage="HTTP/1.1 404 File Not Found/r/n"+ "Content-Type:text/html/r/n"+ "Content-Length:23/r/n"+ "/r/n"+ "<h1>File Not Encontrado </h1> "; output.write (errorMessage.getBytes ());}} catch (Exceção e) {System.out.println (e.toString ());} finalmente {if (fis! = Null) {fis.close ();}}}}}}}}} O objeto de resposta é criado no método await() da classe HttpServer, passando o outputStream obtido no soquete.
A classe de resposta possui dois métodos públicos: setRequest() e sendStaticResource() . setRequest() receberá um objeto de solicitação como um parâmetro. sendStaticResource() é usado para enviar um recurso estático para o navegador, como um arquivo HTML.
HttpServer:
pacote cn.com.server; importar java.io.file; importar java.io.inputStream; importar java.io.outputStream; importar java.net.inetaddress; importar java.net.serversock * Para este pacote, Web_Root é o diretório "Webroot" no diretório * de trabalho. * O diretório de trabalho é o local no sistema de arquivos * de onde o comando java foi invocado. */public static final string web_root = system.getProperty ("user.dir")+file.separator+"webroot"; private static final string Shutdown_Command = "/Shutdown"; Private Boolean Shutdown = False; Await () {serverSocket ServerSocket = null; int porta = 8080; tente {serverSocket = new ServerSocket (porta, 1, inetaddress.getByName ("127.0.0.1"));} captura (exceção e) {e.printstacktrace () system.exit (0); input = null; outputStream output = null; try {socket = serversocket.accept (); input = socket.getInputStream (); output = socket.getOutputStream (); // Crie Objeto de solicitação e solicitação de solicitação de solicitação = novo solicitação (input); solicitação.Parse (); // Criar resposta Resposta Resposta = novo Resposta (output); Response.SetRequest (request); Respons.SendStaticResource ();} Catch (Exceção e) {E.PrintStackTrace (); continuação;}}}} Esta classe representa um servidor da Web que pode lidar com solicitações de recursos estáticos de um diretório especificado, incluindo diretórios especificados pela variável estática pública Final Web_root e por todos os subdiretos.
Agora crie uma página HTML em Webroot, denominada index.html, o código -fonte é o seguinte:
<! Doctype html> <html> <head> <meta charset = "utf-8"> <title> Insira o título aqui </title> </head> <body> <h1> olá mundial! </h1> </body> </html>
Agora inicie o servidor da web e solicite a página estática index.html.
A saída do console correspondente:
Dessa forma, um servidor HTTP simples é feito.
O exposto acima é sobre a implementação de Java de uma análise simples de instância do servidor da web, espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!