Kennan Wang 2017-10-26 06:33 采纳率: 6.7%
浏览 818

用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条回答

  • 猿李 2017-10-26 06:38
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿