写了一个Java模拟Tomcat后用QQ浏览器、火狐、谷歌测试一会儿能用,一会儿报空指针异常,一会又报Connection reset是怎么回事就是这时好时坏代码没动过package com.briup.server;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
/**
- web服务器项目,此项目工作在服务器端,功能: 1、接受请求 2、分析请求 3、给出响应
- @author wkx * */
public class ServerMain {
public static void main(String[] args) {
try {
new ServerMain().receive();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void receive() throws IOException {
System.out.println("服务器启动。。。");
// 创建ServerSocket对象
ServerSocket server = new ServerSocket(8888);
while (true) {
// 接受客户端的socket
Socket socket = server.accept();
// 获取socket输入流
InputStream is = socket.getInputStream();
// 将字节流封装成字符流方便读取
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 客户端的请求信息
// String line = null;
// while ((line = br.readLine()) != null) {
// System.out.println(line);
// }
// 分析请求
String line = br.readLine();
String[] str = line.split(" ");
String url = str[1];
File file = new File("D:\\java\\eclipse\\workspace\\Tomcat_JD1719_1\\my", url);
// 获得socket输出流
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os, true);
if (file.exists()) {
// 响应行
ps.println("HTTP/1.1 200 ok");
// 响应头
// 空行
ps.println();
// 响应体
FileInputStream fis = new FileInputStream(file);
int len = 0;
byte b[] = new byte[1024];
while ((len = fis.read(b)) != -1) {
ps.write(b, 0, len);
}
fis.close();
socket.close();
} else {
// 响应行
ps.println("HTTP/1.1 404 not found");
// 响应头
// 空行
ps.println();
// 响应体
File errorfile = new File("D:\\java\\eclipse\\workspace\\Tomcat_JD1719_1\\my", "\\error.txt");
FileInputStream fis = new FileInputStream(errorfile);
int len = 0;
byte b[] = new byte[1024];
while ((len = fis.read(b)) != -1) {
ps.write(b, 0, len);
}
fis.close();
socket.close();
}
}
}
}