JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”

JAVA学习——模拟BS服务器代码实现之”系统找不到指定的路径。“

在学习JAVA的过程中遇到了一些问题,记录一下

问题描述

文件目录:
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第1张图片

web文件夹是在Sample文件夹之下的。

服务器代码:

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

public class WebServer {
     
    public static void main(String[] args) throws IOException {
     
        ServerSocket ss = new ServerSocket(8080);
        while (true) {
     
            Socket sockets = ss.accept();
            new Thread(new Runnable() {
     
                @Override
                public void run() {
     
                    try {
     
                        InputStream is = sockets.getInputStream();
//                byte[] bytes = new byte[1024];
//                int len = 0;
//                while ((len = is.read(bytes)) != -1) {
     
//                    System.out.println(new String(bytes, 0, len));
//                }
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                        String line = br.readLine();
                        String[] arr = line.split(" ");
                        String htmlpath = arr[1].substring(1);
                        System.out.println(htmlpath);
                        FileInputStream fis = new FileInputStream(htmlpath);
                        OutputStream os = sockets.getOutputStream();
                        os.write("HTTP/1.1 200 OK\r\n".getBytes());
                        os.write("Content-Type:text/html\r\n".getBytes());
                        os.write("\r\n".getBytes());

                        int len = 0;
                        byte[] bytes = new byte[1024];
                        while ((len = fis.read(bytes)) != -1) {
     
                            os.write(bytes, 0, len);
                        }

                        fis.close();
                        sockets.close();

                    } catch (IOException e) {
     
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
}

浏览器输入127.0.0.1:8080/Sample/web/index.html之后
在这里插入图片描述

会显示系统找不到指定的路径错误。
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第2张图片

浏览器输入绝对路径
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第3张图片

则可以正常打开html文件。

解决方法

从以上可以看出,相对路径地址无法打开而绝对路径能打开,那问题很明显在于相对路径是否写错。

其实在只要把”127.0.0.1:8080/Sample/web/index.html“中的”/Sample“删掉即可,因为在相对路径中,这句话是多余了。
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第4张图片

而为什么教学视频里没有删去这段字符却依然能够成功运行呢?其实本质上是因为工作目录不同。

先点击Run->Edit Configurations。
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第5张图片

就能在里面看到当前项目的 Working Directory(工作目录),在此项目中,相对目录就是就是在此工作目录下的,如果输入的是”127.0.0.1:8080/Sample/web/index.html“,那实际上就是”127.0.0.1:8080/C:/Users/asus/IdeaProjects/Sample/Sample/web/index.html“,很明显路径是错误的,”/Sample“字段重复了。
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第6张图片

我们把 Working Directory(工作目录)中的”\Sample“去掉,再点击Apply。
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第7张图片

此时就可以输入”127.0.0.1:8080/Sample/web/index.html“来打开网页了。
JAVA学习——模拟BS服务器代码实现之“系统找不到指定的路径。”_第8张图片

初学者~~如有错误,欢迎指正,谢谢大家。

你可能感兴趣的:(JAVA学习笔记,java)