先说要求吧:
   用Java语言开发一个多线程的Web服务器,能并行服务多个请求。
   存在一个主线程,服务器使用该主线程监听来自客户机的连接请求。为每一次请求创建一个TCP连接(非持久连接),并用一个单独的线程来处理该连接。   在浏览器中测试该服务器,使用如下URL:
http://localhost:6789/index.html
如果index.html文件存在,则服务器将状态行以及文件内容发送给客户端,并在客户端的浏览器中显示(可以只考虑文本文件)
如果index.html文件不存在,则服务器返回带有错误信息的状态行和必要的文字说明,并在客户端的浏览器中显示这些信息。我的HTTL文档:index.html<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 <html>
 <head>
 <meta  http-equiv="Content-Type" content="text/html; charset=gbk"> 
 <title>web服务器</title> 
 </head>
 <body> 你好!这是一个web服务器。<br>  
 <form action="/index.html">
 <br> 姓名:<input type="text" name="name" /><br> 
 密码:<input type="password" name="pass"></input><br>
 <input type="submit"/> 
 </form>
 </body>
 </html> 我的程序:
package websocket;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;public class webSocket
{
public static void main(String[] args) throws Exception
{
String reqmessage;
String filename;

ServerSocket welcimeSocket = new ServerSocket(6789);

Socket serverSocket = welcimeSocket.accept();

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));

DataOutputStream outToClient = new DataOutputStream(serverSocket.getOutputStream());

reqmessage = inFromClient.readLine();

StringTokenizer tokenizerLine = new StringTokenizer(reqmessage);

if(tokenizerLine.nextToken().equals("GET"))
{
filename = tokenizerLine.nextToken();

if(filename.startsWith("/"))
{
filename = filename.substring(1);
}

File file = new File(filename);

if(file.exists())
{
int numOfBytes = (int) file.length();

     FileInputStream inFile = new FileInputStream(filename);

     byte fileInBytes[] = new byte[numOfBytes];

     inFile.read(fileInBytes);

     outToClient.writeBytes("HTTP/1.1 202 Accepted \r\n");

     outToClient.writeBytes("\r\n");

     outToClient.write(fileInBytes,0,numOfBytes);

     serverSocket.close();
     }
else
{
outToClient.writeBytes("HTTP/1.1 404 Not Found \r\n");

outToClient.writeBytes("\r\n");

serverSocket.close();
}
}
else
{
outToClient.writeBytes("HTTP/1.1 400 Bad Request \r\n");

outToClient.writeBytes("\r\n");

serverSocket.close();
}
}
}运行时没有问题的。但是要求里说了“如果index.html文件不存在,则服务器返回带有错误信息的状态行和必要的文字说明,并在客户端的浏览器中显示这些信息”,我不太懂让客户端的浏览器显示必要的文字说明,请大神指导。还有这里还有一个问题,就是我把outToClient.writeBytes("HTTP/1.1 202 Accepted \r\n");

outToClient.writeBytes("\r\n");给注释掉了,为什么输入正确的网址竟然还响应。按照计算机网络原理HTTP的响应报文的状态行不是没有的么?为什么他还显示正确的内容。注释后的程序:
package websocket;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;public class webSocket
{
public static void main(String[] args) throws Exception
{
String reqmessage;
String filename;

ServerSocket welcimeSocket = new ServerSocket(6789);

Socket serverSocket = welcimeSocket.accept();

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));

DataOutputStream outToClient = new DataOutputStream(serverSocket.getOutputStream());

reqmessage = inFromClient.readLine();

StringTokenizer tokenizerLine = new StringTokenizer(reqmessage);

if(tokenizerLine.nextToken().equals("GET"))
{
filename = tokenizerLine.nextToken();

if(filename.startsWith("/"))
{
filename = filename.substring(1);
}

File file = new File(filename);

if(file.exists())
{
int numOfBytes = (int) file.length();

     FileInputStream inFile = new FileInputStream(filename);

     byte fileInBytes[] = new byte[numOfBytes];

     inFile.read(fileInBytes);

     //outToClient.writeBytes("HTTP/1.1 202 Accepted \r\n");

     //outToClient.writeBytes("\r\n");

     outToClient.write(fileInBytes,0,numOfBytes);

     serverSocket.close();
     }
else
{
outToClient.writeBytes("HTTP/1.1 404 Not Found \r\n");

outToClient.writeBytes("\r\n");

serverSocket.close();
}
}
else
{
outToClient.writeBytes("HTTP/1.1 400 Bad Request \r\n");

outToClient.writeBytes("\r\n");

serverSocket.close();
}
}
}求大神指导,谢谢~~