Java mozilla firefox的意外行为
我正在尝试实现一个只为静态页面服务的web服务器。 这是我的超迷你网络服务器的代码Java mozilla firefox的意外行为,java,Java,我正在尝试实现一个只为静态页面服务的web服务器。 这是我的超迷你网络服务器的代码 import java.io.*; import java.net.*; class MyWebServer{ static ServerSocket serSocket = null ; static{ try { serSocket = new ServerSocket(80) ; System.out.println("S
import java.io.*;
import java.net.*;
class MyWebServer{
static ServerSocket serSocket = null ;
static{
try {
serSocket = new ServerSocket(80) ;
System.out.println("Server started successfully....\n\n") ;
} catch (IOException io) {
System.out.println( io.getMessage() );
System.exit(1) ;
}
}
public static void main(String []args){
while(true){
try {
new Thread( new ServingThread( serSocket.accept() ) ).start() ;
} catch (IOException io) {
System.out.println(io.getMessage());
}
}
}
}
class ServingThread implements Runnable{
private Socket socket ;
public ServingThread(Socket socket){
this.socket = socket ;
System.out.println("Receives a new browser request from " + socket);
}
public void run() {
BufferedReader in = null ;
PrintWriter out = null ;
try {
//reading request headers from browser starts here
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = ".";
while (!str.equals("")){
str = in.readLine();
//System.out.println(str);
}
System.out.println("\n\n");
//reading request headers from browser ends here
//writing output on outputstream starts here
out = new PrintWriter( socket.getOutputStream(), true ) ;
int i = (int) ( Math.random() * 10) ;
out.println(i) ;
System.out.println(i) ;
//writing output on outputstream ends here
socket.close() ;
System.out.println("Request successfully fulfilled.\n") ;
}
catch (IOException io) {
System.out.println(io.getMessage());
}
}
}
它工作正常,但有时(不总是)
- 我的mozilla firefox客户端 当我 添加新选项卡(Ctrl+T)或关闭 “现有”选项卡
- 当我要求 ,在我的浏览器上显示一位数。但是 服务器的控制台显示它得到2 或3个请求,因此,它显示2或3个数字 因此
非常感谢您的任何想法/解释。:) 首先,我假设您这样做是为了学习sockets/http/等。。。因为如果你真的想要实现一个Web服务器,你应该认真考虑使用一个现有的服务器,或者至少看看它的来源——即使是最简单的HTTP服务器实现也有很多东西。
也就是说,您的“服务器”:-)没有正确实现(例如,不返回状态代码),因此浏览器的行为在这里实际上是不确定的-它可能会多次尝试重试同一请求,也可能不会。缓存问题也可能在这里起作用-一旦您实现了HTTP,如果您不希望“新标签”重复请求,您需要发送适当的缓存头。它必须是Java吗?这是一个使用Ruby的超小型web服务器,它在Mac、Windows和Linux上通过USB驱动器运行。是的,我在用java。任何java链接:-)。使用源代码为简单java实现的web服务器提供的任何在线参考。:-。以下是操作系统java web服务器的列表:。这里有一个(相当过时,但仍然有用)关于编写一个的教程:谷歌也提供了很多链接:thnx ChssPly。我已经完成了第二个链接。它也没有正确地实现HTTP,实际上是这样的。当然,HTTP协议的子集非常有限,但它可以正确地处理GET/HEAD方法并返回状态代码。