花花世界蕾 发表于 2018-12-7 06:03:42

[Tomcat服务器

package com.tomcat.startup;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.tomcat.http.Request;
import com.tomcat.http.Response;
/**
* WEB服务器的启动类
* @author Administrator
*
*/
public class WebServer {
/**将资源指定到项目的某个目录下*/
public final static String WEB_ROOT = System.getProperty("user.dir") + File.separator + "WebRoot";
/**指定关闭服务器的指令,默认是不关闭的*/
private static boolean shutdown = false;

/**启动主方法*/
public static void main(String[] args) {
/**创建WebServer实例*/
WebServer server = new WebServer();
server.start();
}

/**启动方法*/
public void start() {
/**
   * 在启动之后,实际上就是创建Socket的过程,使用流来进行交流
   */
ServerSocket server = null;
try {
   /**创建服务器Socket**/
   server = new ServerSocket(8888);
} catch (IOException e) {
   e.printStackTrace();
   /**若发生异常,则退出*/
   System.exit(1);
}
/**循环等待request请求**/
while(!shutdown){//服务器没有关闭,即处于接收状态
   /**获取客服端的请求,返回Socket,代表客服端的请求信息*/
   Socket socket = null;
   OutputStream out = null;mcat
   InputStream is = null;
   try {
    /**使用accept接收请求*/
    socket = server.accept();
    out = socket.getOutputStream();//用于回复请求流
    is = socket.getInputStream();//获取请求信息流
    /**创建request对象**/
    Request request = new Request(is);
    request.parse();
    /**创建response对象**/
    Response response = new Response(out);
    response.setRequest(request);
    response.sendStaticResources();

    socket.close();

    shutdown = request.getUri().equalsIgnoreCase("shutdown");
   } catch (IOException e) {
    e.printStackTrace();
   }
}
}
}

[*]
  

package com.tomcat.http;
import java.io.IOException;
import java.io.InputStream;
/**
* 代表客服端的请求(Request)
* @author Administrator
*
*/
public class Request {
/**请求端的数据流**/
private InputStream input;
/**uri:客服端请求的信息**/
private String uri;

/**构造Request对象**/
public Request(InputStream input) {
this.input = input;
}

/**解析request请求信息**/
public void parse() {
StringBuilder request = new StringBuilder(2048);
/**将信息读到buffer中**/
byte[] buffer = new byte;
int i = 0;
try {
   i = input.read(buffer);
} catch (IOException e) {
   e.printStackTrace();
   i = -1;
}

for (int j=0;j index1) {
    return request.substring(index1+1,index2);//取出uri
   }
}
return null;
}

public String getUri() {
return uri;
}
}

package com.tomcat.http;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import com.tomcat.startup.WebServer;

/**
* 响应请求
* @author Administrator
*
*/
public class Response {
private final static int BUFFER_SIZE = 1024;
private Request request;
/**用于写数据,返回给客服端**/
private OutputStream out;

/**构造方法**/
public Response(OutputStream out) {
this.out = out;
}
/**构造request对象**/
public void setRequest(Request request) {
this.request = request;
}

/**根据请求信息,响应处理**/
public void sendStaticResources() {
byte[] bytes = new byte;
/**用该流,去读取请求的数据**/
FileInputStream fis = null;

/**根据uri地址,发送请求的信息**/
File file = new File(WebServer.WEB_ROOT,request.getUri());
/**判断请求的数据是否存在**/
try {
   if (file.exists()) {//存在
    fis = new FileInputStream(file);//创建流,用于响应操作
    int index = fis.read(bytes,0,BUFFER_SIZE);
    if(index != -1) {
   out.write(bytes,0,index);
    }
   }else {//不存在
    String errorMessage = "HTTP/1.1 404 File not found\r\n"
   + "Content-Type: text/html\r\n"
   + "Content-Length: 23\r\n"
   + "\r\n"
   + "file not found";
    out.write(errorMessage.getBytes());
   }
} catch (FileNotFoundException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
} finally {
   if (fis != null) {
    try {
   fis.close();
    } catch (IOException e) {
   e.printStackTrace();
    }
   }
}
}
}




页: [1]
查看完整版本: [Tomcat服务器