温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现java服务器

发布时间:2021-11-23 15:08:00 来源:亿速云 阅读:157 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关如何实现java服务器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

 一、HTTP

 http请求

 一般一个http请求包括以下三个部分:

 1 请求方法,如get,post

 2 请求头

 3 实体

 一个http请求的实例如下:

GET /index.jsp HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

注意红色部分的url,这是我们待会要截取出来的。

 http响应

与http请求类似,http响应也包括三个部分

1 协议-状态码-描述

2 响应头

3 响应实体段

二 socket类

套接字是网络连接的断点。套接字使得应用程序可以从网络中读取数据,可以向网络中写入数据。不同计算机上的应用程序可以通过套接字发送或接受字节流。java中提供了Socket类来实现这个功能,通过getInputStream和getOutputStream可以获取网络中的输入输出流。

但是,光靠Socket类还是不能够实现我们构建一个服务器应用程序的功能的,因为服务器必须时刻待命,因此java里面提供了ServerSocket类来处理等待来自客户端的请求,当ServerSocket接受到了来自客户端的请求之后,它就会创建一个实例来处理与客户端的通信。

三 服务器应用程序的实现

首先,我们要构建一个封装请求信息的类requst,一个响应请求的类response,还要有一个主程序httpServer来处理客户端来的请求。

package com.lwq; import java.io.IOException; import java.io.InputStream; /**  * @author Joker  * 类说明  * 将浏览器发来的请求信息转化成字符和截取url  */ public class Request {          //输入流     private InputStream input;     //截取url,如http://localhost:8080/index.html ,截取部分为 /index.html     private String uri;     public Request(InputStream inputStream){         this.input = inputStream;     }          public InputStream getInput() {         return input;     }     public void setInput(InputStream input) {         this.input = input;     }     public String getUri() {         return uri;     }     public void setUri(String uri) {         this.uri = uri;     }          //从套接字中读取字符信息     public void parse(){                      StringBuffer request = new StringBuffer(2048);             int i = 0;             byte[] buffer = new byte[2048];                          try {                 i = input.read(buffer);             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();                 i = -1;             }             for(int j = 0;j<i;j++){                     request.append((char)(buffer[j]));             }             System.out.println(request.toString());             uri = parseUri(request.toString());             }     //截取请求的url     private String parseUri(String requestString){                  int index1 = 0;         int index2 = 0;         index1 = requestString.indexOf(' ');         if(index1!=-1){             index2 = requestString.indexOf(' ',index1+1);             if(index2>index1){                 return requestString.substring(index1+1,index2);             }         }         return null;     }       }

下面是封装了响应请求的类response:

package com.lwq; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; /**  * @author Joker  * @version 创建时间:Sep 5, 2012 9:59:53 PM  * 类说明 根据相应信息返回结果  */ public class Response {          private static final int BUFFER_SIZE = 1024;     Request request;     OutputStream output;     public Response(OutputStream output){         this.output = output;     }          public void sendStaticResource() throws IOException{                  byte[] bytes = new byte[BUFFER_SIZE];         FileInputStream fis = null;                  File file = new File(HttpServer.WEB_ROOT,request.getUri());         if(file.exists()){             try {                 fis = new FileInputStream(file);                 int ch = fis.read(bytes,0,BUFFER_SIZE);                 while(ch != -1){                     output.write(bytes,0,ch);                     ch = fis.read(bytes,0,BUFFER_SIZE);                 }                              } catch (FileNotFoundException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }catch(IOException e){                 e.printStackTrace();             }finally{                 if(fis !=null){                     fis.close();                 }             }                      }else{             //找不到文件              String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +      "Content-Type: text/html\r\n" +      "Content-Length: 23\r\n" +      "\r\n" +      " File Not Found ";              try {                 output.write(errorMessage.getBytes());                 output.flush();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }     }     public Request getRequest() {         return request;     }     public void setRequest(Request request) {         this.request = request;     }     public OutputStream getOutput() {         return output;     }     public void setOutput(OutputStream output) {         this.output = output;     }     public static int getBUFFER_SIZE() {         return BUFFER_SIZE;     } }

接下来是主程序,

package com.lwq; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /**  * @author Joker  * 类说明  */ public class HttpServer {     /**      * @param args      */          //WEB_ROOT是服务器的根目录     public static final String WEB_ROOT = System.getProperty("user.dir")+File.separator+"webroot";          //关闭的命令     private static final String SHUTDOWN_COMMAND= "/SHUTDOWN";          public static void main(String[] args) {         // TODO Auto-generated method stub         HttpServer server = new HttpServer();         server.await();     }     public void await(){         ServerSocket serverSocket = null;         int port = 8080;         try {             serverSocket = new ServerSocket(port,1,InetAddress.getByName("127.0.0.1"));             while(true)             {                 try {             Socket socket = null;             InputStream input = null;             OutputStream output = null;             socket = serverSocket.accept();             input = socket.getInputStream();             output = socket.getOutputStream();             //封装request请求             Request request = new Request(input);             request.parse();             //封装response对象             Response response = new Response(output);             response.setRequest(request);             response.sendStaticResource();             socket.close();                 } catch (Exception e) {                     // TODO Auto-generated catch block                     e.printStackTrace();                     continue;                 }                          }         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                                }      }

运行httpServer,在浏览器中打下http://localhost:8080/index.jsp,就能看到服务器响应的结果了。

关于“如何实现java服务器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI