18910140161

HTML链接的文件未加载到Java服务器-堆栈溢出

顺晟科技

2022-10-19 13:20:46

86

当我试图使用Java的套接字和ServerSocket创建本地服务器时遇到了一个问题。

问题是,当服务器收到请求并返回HTML文件时,它显然无法在HTML代码中找到任何链接文件(包括.png图像和.css样式表),这意味着我的网页显示时没有格式和图像。引发的异常为FileNotFound。

下面的代码是我用来在HTML文件(名为index.HTML)中传输并将其传输到输出流的代码。

下面的代码是我用来将。css链接到index.html文件的:

以及文件夹结构:

public class HttpServer {


    public static void main(String[] args) throws IOException {

        ServerSocket sSocket;
        Socket cSocket;
        PrintWriter out;
        Scanner in;

        while (true) {
            
            // set up streams & readers
            sSocket = new ServerSocket(8080);
            cSocket = sSocket.accept();
            OutputStream oStream = cSocket.getOutputStream();
            out = new PrintWriter(oStream, true);
            in = new Scanner(new InputStreamReader(cSocket.getInputStream()));
            
            // read in HTTP request, filepath and protocol
            String command = in.next();
            String fileName = in.next();
            String protocol = in.next();

            // if filepath is only "/", point to index.html
            if (fileName.equals("/"))
                fileName = "Resources/index.html";

            FileInputStream fis = new FileInputStream(fileName);

            // return
            out.println("HTTP/1.1 200 OK"); // placeholder status
            out.println("Server: My Server");
            out.println("Content-Type: text/html");
            fis.transferTo(oStream);

            // flush and close
            out.flush();
            in.close();
            out.close();
            cSocket.close();
            sSocket.close();
        }
    }
}

IDE是Intellij。

我一整天都在用头撞墙,试图找出哪里出了问题,但在我的情况下,没有足够令人信服的解释。就我而言,最可能的原因是FileInputStream以某种方式将当前工作文件夹移动到机器中的某个地方,从而使相对文件路径无效。但是,根据我的理解,如果FileInputStream确实读取了index.html文件,那么它也应该能够读取。css文件。

我猜问题不出在index.HTML文件上,因为当我从文件浏览器中双击HTML文件直接打开它时,所有内容(格式和图像)都加载得很好。只有当文件通过Java服务器传递时,它才会成为一个问题,所以我怀疑这与我完全不熟悉的Java类或IDE设置有关。

不胜感激!


顺晟科技:

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航