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