91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現java服務器

發布時間:2021-11-23 15:08:00 來源:億速云 閱讀:119 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關如何實現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

博客| 旅游| 临湘市| 吉木萨尔县| 宽城| 荔波县| 峨眉山市| 贵港市| 奉化市| 和林格尔县| 手游| 铁力市| 同仁县| 瓦房店市| 广南县| 外汇| 陇西县| 寿阳县| 黄浦区| 利辛县| 建昌县| 建平县| 莫力| 柞水县| 开平市| 涡阳县| 浦东新区| 宣恩县| 二连浩特市| 司法| 资溪县| 综艺| 卢氏县| 新河县| 自贡市| 金坛市| 陕西省| 新巴尔虎左旗| 深水埗区| 溧水县| 大丰市|