Java 通过PrintWriter传输网站

Java 通过PrintWriter传输网站,java,sockets,web,Java,Sockets,Web,我在想,是否有可能只使用一个简单的套接字就可以通过PrintWriter打印出一个“Web服务器” 我已经试过了,有一秒钟我可以看到我的html代码显示出来,但之后连接中止 请不要因为有很多litte Web服务器解决方案而讨厌我,我知道这一点,但我正在努力前进,提高我的编程技能。我很感激每一个关于更好编码的建议 以下是我的Java代码: public class webserver { ServerSocket serversocket=null; Socket s=null; OutputS

我在想,是否有可能只使用一个简单的套接字就可以通过PrintWriter打印出一个“Web服务器”

我已经试过了,有一秒钟我可以看到我的html代码显示出来,但之后连接中止

请不要因为有很多litte Web服务器解决方案而讨厌我,我知道这一点,但我正在努力前进,提高我的编程技能。我很感激每一个关于更好编码的建议

以下是我的Java代码:

public class webserver {
ServerSocket serversocket=null;
Socket s=null;
OutputStream o=null;
public webserver(){

    try {
        serversocket=new ServerSocket(8080);
        writeout();

    } catch (IOException e) {
        e.printStackTrace();
    }
}
private void writeout(){

    try {
        char[] cbuf=new char[100000];
        s=serversocket.accept();
        o=s.getOutputStream();
        PrintWriter pw=new PrintWriter(o);
        FileReader fr=new FileReader("C:/Users/me/Documents/HelloWorld.html");
        BufferedReader br=new BufferedReader(fr);
        br.read(cbuf);  
        br.close();
        pw.write(cbuf);
        pw.flush();

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

}
这是我的Html文件,由Google Web Designer构建:


你好世界
html,正文{
宽度:100%;
身高:100%;
边际:0px;
}
身体{
背景色:透明;
-webkit变换:透视图(1400px)矩阵3d(1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1);
-webkit变换样式:保留-3d;
}
.gwd-div-c9x0{
位置:绝对位置;
宽度:356px;
高度:214px;
左:446px;
顶部:54px;
字体系列:'Times New Roman';
文本对齐:左对齐;
颜色:rgb(0,0,0);
}
.gwd-div-qte5{
位置:绝对位置;
宽度:73px;
高度:59px;
左:781px;
顶部:54px;
}
.gwd-div-wq83{
位置:绝对位置;
宽度:32px;
身高:29.5px;
左:802px;
顶部:54px;
}
测试印刷版网站

但是我的“Web服务器”毫无例外地终止。

您需要了解更多关于Java IO的信息,并实现HTTP协议。您的代码不一定要读取整个文件,如果读取了,您的数组将容纳100000个字符,而不仅仅是文件中的字符。HTTP响应应该包含一个状态行,后面是标题行,后面是空行,后面是响应主体。首先请阅读,如果你真的很认真的话,请阅读实际的HTTP标准。@JB Nizet那么我应该找出html文件中包含的椅子数量,并将其定义为数组的大小?谢谢,我不知道为什么我没有想到在维基百科上查找服务器的html答案。。。我想打印出html文件就足够了……不,不一定
read()
不能保证读取的字节数与作为参数传递的数组的字节数相同。阅读它的javadoc。它返回已读取的实际字节数。因此,您需要循环,直到它全部返回-1(表示EOF)。而且你不必阅读记忆中的所有内容。您可以读取字节块并将其写入响应,以避免占用太多内存。不过,您需要在Content-Length标头中发送正文的字节数。或者实现分块响应。
     <!DOCTYPE html>
     <html>

      <head data-gwd-animation-mode="quickMode">
<title>HelloWorld</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="generator" content="Google Web Designer 1.0.3.0115">
<style type="text/css">
  html, body {
    width: 100%;
    height: 100%;
    margin: 0px;
  }
  body {
    background-color: transparent;
    -webkit-transform: perspective(1400px) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
    -webkit-transform-style: preserve-3d;
  }
  .gwd-div-c9x0 {
    position: absolute;
    width: 356px;
    height: 214px;
    left: 446px;
    top: 54px;
    font-family:'Times New Roman';
    text-align: left;
    color: rgb(0, 0, 0);
  }
  .gwd-div-qte5 {
    position: absolute;
    width: 73px;
    height: 59px;
    left: 781px;
    top: 54px;
  }
  .gwd-div-wq83 {
    position: absolute;
    width: 32px;
    height: 29.5px;
    left: 802px;
    top: 54px;
  }
</style>
   </head>

      <body>
       <div class="gwd-div-c9x0">Testing the Printed Website</div>
<div class="gwd-div-qte5"></div>
<div class="gwd-div-wq83"></div>
     </body>

    </html>