Java學習——模擬BS服務器案例中java.io.FileNotFoundException: web\index.html (系統找不到指定的路徑。)

模擬BS服務器案例

 

模擬B\S服務器(擴展知識點)

模擬網站服務器,使用瀏覽器訪問自己編寫的服務端程序,查看網頁效果。

客戶端:

瀏覽器(127.0.0.1:8080/src/web/index.html)

服務器端:

ServerSocket

 

文件結構:

獲取index.html的絕對路徑:

E:\Java_code\src\web\index.html

獲取index.html的相對路徑:

web/index.html

ServerSocket服務器代碼: 


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class BServerSocketDemo {
    public static void main(String[] args) throws IOException {
        //創建ServerSocket服務器
        ServerSocket server = new ServerSocket(8080);
    while(true){
        //獲取請求連接的Socket客戶端
        Socket socket = server.accept();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    //獲取網絡字節輸入流InputStream
                    InputStream is = socket.getInputStream();

                    //使用網絡字節輸入流InputStream中的read(),讀取客戶端訪問的文件信息
     /*   byte[] bytes = new byte[1024];
        int len = 0;
        while((len = is.read(bytes)) != -1){
            System.out.println(new String(bytes, 0, len));
        }*/
//        將網絡網絡字節輸入流InputStream轉換爲字節緩衝輸入流BufferedReader
//        使用字節緩衝輸入流BufferedInputStream中的方法讀取請求的第一行信息,獲取請求文件地址
                    BufferedReader bufReader = new BufferedReader(new InputStreamReader(is));
                    String response = bufReader.readLine();
                    System.out.println(response);
                    String[] str = response.split(" ");
                    String htmlPath = str[1].substring(1);
                    System.out.println(htmlPath);

//        創建本地字節輸入流FileInputStream,在構造方法中傳入請求文件地址
                    FileInputStream fis = new FileInputStream(htmlPath);
//       相對路徑 src/web/index.html 絕對路徑 E:\Java_code\src\web\index.html

//        使用Socket對象的網絡字節輸出流OutputStream中的write(),將內容回寫到瀏覽器客戶端
                    OutputStream os = socket.getOutputStream();

//        固定http協議
                    // 寫入HTTP協議響應頭,固定寫法
                    os.write("HTTP/1.1 200 OK\r\n".getBytes());
                    os.write("Content-Type:text/html\r\n".getBytes());
                    // 必須要寫入空行,否則瀏覽器不解析
                    os.write("\r\n".getBytes());

//        使用本地字節輸入流中的方法read(),讀取服務器硬盤中的文件內容
                    byte[] bytes = new byte[1024];
                    int len = 0;
                    while((len = fis.read(bytes)) != -1){
                        os.write(bytes, 0, len);
                    }

                    fis.close();
//        bufReader.close();
                    socket.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }).start();
    }
//        server.close();

    }
}

 

1.在瀏覽器中訪問服務器內容:

http://127.0.0.1:8080/web/index.html (出錯)

 

出錯內容: 

java.io.FileNotFoundException: web\index.html (系統找不到指定的路徑。)
	at java.base/java.io.FileInputStream.open0(Native Method)
	at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
	at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155)
	at java.base/java.io.FileInputStream.<init>(FileInputStream.java:110)
	at BServerSocketDemo$1.run(BServerSocketDemo.java:37)
	at java.base/java.lang.Thread.run(Thread.java:835)

 

2.在瀏覽器中訪問服務器內容:

http://127.0.0.1:8080/e:/Java_code/src/web/index.html(絕對路徑訪問)

運行結果:

"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2.1\lib\idea_rt.jar=9903:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2.1\bin" -Dfile.encoding=UTF-8 -classpath E:\Java_code\out\production\Java_code BServerSocketDemo
GET /e:/Java_code/src/web/index.html HTTP/1.1
e:/Java_code/src/web/index.html
GET /e:/Java_code/src/web/img/logo2.png HTTP/1.1
e:/Java_code/src/web/img/logo2.png
GET /e:/Java_code/src/web/img/header.jpg HTTP/1.1
e:/Java_code/src/web/img/header.jpg
GET /e:/Java_code/src/web/img/title2.jpg HTTP/1.1
e:/Java_code/src/web/img/title2.jpg
GET /e:/Java_code/src/web/img/1.jpg HTTP/1.1
e:/Java_code/src/web/img/1.jpg
GET /e:/Java_code/src/web/img/big01.jpg HTTP/1.1
e:/Java_code/src/web/img/big01.jpg
GET /e:/Java_code/src/web/img/middle01.jpg HTTP/1.1
e:/Java_code/src/web/img/middle01.jpg
GET /e:/Java_code/src/web/img/small03.jpg HTTP/1.1
e:/Java_code/src/web/img/small03.jpg
GET /e:/Java_code/src/web/img/ad.jpg HTTP/1.1
e:/Java_code/src/web/img/ad.jpg
GET /e:/Java_code/src/web/img/footer.jpg HTTP/1.1
e:/Java_code/src/web/img/footer.jpg

 

3.在瀏覽器中訪問服務器內容:

http://127.0.0.1:8080/src/web/index.html(相對路徑訪問)

特別注意:

這裏的相對路徑不是web/index.html

運行結果:

GET /src/web/index.html HTTP/1.1
src/web/index.html
GET /src/web/img/logo2.png HTTP/1.1
src/web/img/logo2.png
GET /src/web/img/header.jpg HTTP/1.1
src/web/img/header.jpg
GET /src/web/img/1.jpg HTTP/1.1
src/web/img/1.jpg
GET /src/web/img/title2.jpg HTTP/1.1
src/web/img/title2.jpg
GET /src/web/img/big01.jpg HTTP/1.1
src/web/img/big01.jpg
GET /src/web/img/middle01.jpg HTTP/1.1
src/web/img/middle01.jpg
GET /src/web/img/small03.jpg HTTP/1.1
src/web/img/small03.jpg
GET /src/web/img/ad.jpg HTTP/1.1
src/web/img/ad.jpg
GET /src/web/img/footer.jpg HTTP/1.1
src/web/img/footer.jpg

 

 

擴展:

IntelliJ IDEA  文件的相對路徑設置:

run --> edit configurations --> working directory裏面修改爲你原始相對路徑的根目錄就好,也可以將你的相對路徑修改爲 /src+/原始相對路徑。

如果使用相對路徑,默認的是src目錄開始。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章