用Java程序模拟Tomcat报错

写了一个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();
        }

    }

}

}

图片说明

图片说明

图片说明

2个回答

你最起码也要贴张图片啊..........

在 String line = br.readLine(); 和 String[] str = line.split(" "); 之间添加 if (null == line || "".equals(line)) { continue; } ,就不会报错了,但是那个空指针异常是怎么产生还是没弄明白

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐