Tomcat.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package cn.hhj.bio.tomcat;
  2. import cn.hhj.bio.tomcat.constant.ConstantParam;
  3. import cn.hhj.bio.tomcat.http.Request;
  4. import cn.hhj.bio.tomcat.http.Response;
  5. import cn.hhj.bio.tomcat.http.Servlet;
  6. import java.io.FileInputStream;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.net.ServerSocket;
  10. import java.net.Socket;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. import java.util.Properties;
  14. public class Tomcat {
  15. private ServerSocket serverSocket;
  16. private Map<String, Servlet> servletMap=new HashMap<>();
  17. private Properties webXml=new Properties();
  18. private void init()throws Exception{
  19. //加载web.properties文件,同时初始化 ServletMapping对象
  20. String WEB_INF = this.getClass().getResource("/").getPath();
  21. FileInputStream fis = new FileInputStream(WEB_INF + "web.properties");
  22. webXml.load(fis);
  23. for (Object k:webXml.keySet()) {
  24. String key=k.toString();
  25. if(key.endsWith(".url")){
  26. String servletName=key.replaceAll("\\.url$","");
  27. String url=webXml.getProperty(key);
  28. String className = webXml.getProperty(servletName + ".className");
  29. Servlet servlet= (Servlet) Class.forName(className).newInstance();
  30. servletMap.put(url,servlet);
  31. }
  32. }
  33. }
  34. public void start()throws Exception{
  35. // 1、加载配置文件
  36. init();
  37. serverSocket=new ServerSocket(ConstantParam.PORT);
  38. System.err.println("Tomcat启动,端口号:"+ConstantParam.PORT);
  39. //2、等待用户请求,用一个死循环来等待用户请求
  40. while (true){
  41. Socket socket=serverSocket.accept();
  42. //4、HTTP请求,发送的数据就是字符串,有规律的字符串(HTTP协议)
  43. process(socket);
  44. }
  45. }
  46. private void process(Socket socket)throws Exception {
  47. InputStream is = socket.getInputStream();
  48. OutputStream os = socket.getOutputStream();
  49. Request request=new Request(is);
  50. Response response=new Response(os);
  51. String url=request.getUrl();
  52. if (servletMap.containsKey(url)){
  53. servletMap.get(url).service(request,response);
  54. }else{
  55. response.write("404 not found");
  56. }
  57. os.flush();
  58. os.close();
  59. is.close();
  60. socket.close();
  61. }
  62. public static void main(String[] args) throws Exception{
  63. new Tomcat().start();
  64. }
  65. }