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目录开始。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值