最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 實現(xiàn)簡單靜態(tài)資源Web服務(wù)器的示例

 更新時間:2020年11月12日 14:56:33   作者:派大星  
這篇文章主要介紹了Java 實現(xiàn)簡單靜態(tài)資源Web服務(wù)器的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

需求

有時候我們想快速通過http訪問本地的一些資源,但是安裝一些web服務(wù)器又很費時和浪費資源,而且也不是長期使用的。

這時候我們可以啟動一個小型的java服務(wù)器,快速實現(xiàn)一個http的靜態(tài)資源web服務(wù)器。

難點

其實沒什么難點,主要是注意請求頭和返回頭的處理。然后將請求的文件以流的方式讀入返回outputstream即可。

代碼

直接上代碼吧~

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class ResourceWebServer {
    private static final int SERVER_PORT = 8888;
    private static final int MAX_CONNECTION_LENGTH = 1;
 
    public static void main(String[] args) throws IOException {
        log("======服務(wù)器啟動=====");
        ResourceWebServer server = new ResourceWebServer();
        server.startServer();
    }
 
    public void startServer() throws IOException {
        ServerSocket serverSocket = new ServerSocket(SERVER_PORT, MAX_CONNECTION_LENGTH, InetAddress.getByName("localhost"));
 
        log("======準備接收請求=====");
        while (true) {
            Socket socket = serverSocket.accept();
            try (InputStream inputStream = socket.getInputStream();
                 OutputStream outputStream = socket.getOutputStream()) {
 
                String requestUri = getRequestUri(inputStream);
                log("請求文件:" + requestUri);
 
                writeHeaders(outputStream);
 
                Path path = Paths.get(getClass().getClassLoader().getResource(requestUri.substring(1)).toURI());
                Files.copy(path, outputStream);
            } catch (Exception e) {
                log("發(fā)生錯誤啦!");
                e.printStackTrace();
            }
        }
    }
 
    private void writeHeaders(OutputStream outputStream) throws IOException {
        //必須包含返回頭,否則瀏覽器不識別
        outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
        //一個\r\n代表換行添加新的頭,2次\r\n代表頭結(jié)束
        outputStream.write("Content-Type: text/html\r\n\r\n".getBytes());
    }
 
    private String getRequestUri(InputStream inputStream) throws IOException {
        StringBuilder stringBuilder = new StringBuilder(2048);
        byte[] buffer = new byte[2048];
        int size = inputStream.read(buffer);
 
        for (int i = 0; i < size; i++) {
            stringBuilder.append((char) buffer[i]);
        }
 
        String requestUri = stringBuilder.toString();
        //此時的uri還包含了請求頭等信息,需要去掉
        //GET /index.html HTTP/1.1...
        int index1, index2;
        index1 = requestUri.indexOf(" ");
        if (index1 != -1) {
            index2 = requestUri.indexOf(" ", index1 + 1);
            if (index2 > index1) {
                return requestUri.substring(index1 + 1, index2);
            }
        }
        return "";
    }
 
    private static void log(Object object) {
        System.out.println(object);
    }
}

接下來,就可以在resource文件下放入靜態(tài)資源啦,比如放一個index.html

然后啟動,打開瀏覽器輸入http://localhost:8888/index.html就能看到結(jié)果了!

以上就是Java 實現(xiàn)簡單靜態(tài)資源Web服務(wù)器的示例的詳細內(nèi)容,更多關(guān)于java 實現(xiàn)web服務(wù)器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java畢業(yè)設(shè)計實戰(zhàn)項目之寵物商城系統(tǒng)的實現(xiàn)流程

    Java畢業(yè)設(shè)計實戰(zhàn)項目之寵物商城系統(tǒng)的實現(xiàn)流程

    這是一個使用了java+Springboot+Maven+mybatis+Vue+mysql開發(fā)的寵物商城系統(tǒng),是一個畢業(yè)設(shè)計的實戰(zhàn)練習,具有寵物商城該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • Java中TCP通信的實現(xiàn)方法詳解

    Java中TCP通信的實現(xiàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中TCP通信的實現(xiàn)方法,TCP通信能實現(xiàn)兩臺計算機之間的數(shù)據(jù)交互,通信的兩端,要嚴格區(qū)分為客戶端(Client)與服務(wù)端(Server),需要的朋友可以參考下
    2023-09-09
  • mybatis trim標簽的使用詳解

    mybatis trim標簽的使用詳解

    這篇文章主要介紹了mybatis trim標簽的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java中JDom解析XML_動力節(jié)點Java學院整理

    Java中JDom解析XML_動力節(jié)點Java學院整理

    JDOM是一種解析XML的Java工具包。DOM適合于當今流行的各種語言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。下面通過本文給大家介紹Java中JDom解析XML的方法,感興趣的朋友一起學習吧
    2017-07-07
  • Java公平鎖與非公平鎖的核心原理講解

    Java公平鎖與非公平鎖的核心原理講解

    從公平的角度來說,Java 中的鎖總共可分為兩類:公平鎖和非公平鎖。但公平鎖和非公平鎖有哪些區(qū)別?核心原理是什么?本文就來和大家詳細聊聊
    2022-11-11
  • Netty分布式flush方法刷新buffer隊列源碼剖析

    Netty分布式flush方法刷新buffer隊列源碼剖析

    這篇文章主要為大家介紹了Netty分布式flush方法刷新buffer隊列源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Java緩沖字符流的實現(xiàn)示例

    Java緩沖字符流的實現(xiàn)示例

    本文詳細介紹了Java緩沖字符流的使用,通過使用BufferedReader和BufferedWriter,可以更高效地處理文本數(shù)據(jù),提高讀寫效率,感興趣的可以了解一下
    2024-12-12
  • eclipse+maven+spring mvc項目基本搭建過程

    eclipse+maven+spring mvc項目基本搭建過程

    這篇文章主要介紹了eclipse+maven+spring mvc項目基本搭建過程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機

    深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機

    這篇文章主要介紹了深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機,成員變量是定義在類中的變量,每個類的實例都會擁有自己的成員變量。它們的生命周期與對象的創(chuàng)建和銷毀相對應(yīng),下面我將詳細介紹它們的特點和生命周期,需要的朋友可以參考下
    2023-07-07
  • Spring Native實現(xiàn)0.059s啟動一個SpringBoot項目

    Spring Native實現(xiàn)0.059s啟動一個SpringBoot項目

    Spring Native是Spring框架的一個子項目,旨在提供一種將Spring應(yīng)用程序編譯為本地可執(zhí)行文件的方法,從而提高啟動時間和資源效率,本文主要介紹了Spring Native實現(xiàn)0.059s啟動一個SpringBoot項目,感興趣的可以了解一下
    2024-02-02

最新評論

疏勒县| 胶州市| 沛县| 河南省| 宁化县| 丰县| 清水县| 扎囊县| 渝北区| 武威市| 剑阁县| 望江县| 兰溪市| 五寨县| 龙陵县| 雅江县| 临汾市| 泌阳县| 海林市| 安阳市| 贵阳市| 水城县| 林州市| 平山县| 苗栗市| 固安县| 勃利县| 襄城县| 萨嘎县| 双辽市| 新余市| 陈巴尔虎旗| 壤塘县| 巴林右旗| 桃江县| 潍坊市| 临沭县| 同江市| 新巴尔虎左旗| 蒙城县| 日土县|