12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package cn.hhj.bio.tomcat;
- import cn.hhj.bio.tomcat.constant.ConstantParam;
- import cn.hhj.bio.tomcat.http.Request;
- import cn.hhj.bio.tomcat.http.Response;
- import cn.hhj.bio.tomcat.http.Servlet;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Properties;
- public class Tomcat {
- private ServerSocket serverSocket;
- private Map<String, Servlet> servletMap=new HashMap<>();
- private Properties webXml=new Properties();
- private void init()throws Exception{
- //加载web.properties文件,同时初始化 ServletMapping对象
- String WEB_INF = this.getClass().getResource("/").getPath();
- FileInputStream fis = new FileInputStream(WEB_INF + "web.properties");
- webXml.load(fis);
- for (Object k:webXml.keySet()) {
- String key=k.toString();
- if(key.endsWith(".url")){
- String servletName=key.replaceAll("\\.url$","");
- String url=webXml.getProperty(key);
- String className = webXml.getProperty(servletName + ".className");
- Servlet servlet= (Servlet) Class.forName(className).newInstance();
- servletMap.put(url,servlet);
- }
- }
- }
- public void start()throws Exception{
- // 1、加载配置文件
- init();
- serverSocket=new ServerSocket(ConstantParam.PORT);
- System.err.println("Tomcat启动,端口号:"+ConstantParam.PORT);
- //2、等待用户请求,用一个死循环来等待用户请求
- while (true){
- Socket socket=serverSocket.accept();
- //4、HTTP请求,发送的数据就是字符串,有规律的字符串(HTTP协议)
- process(socket);
- }
- }
- private void process(Socket socket)throws Exception {
- InputStream is = socket.getInputStream();
- OutputStream os = socket.getOutputStream();
- Request request=new Request(is);
- Response response=new Response(os);
- String url=request.getUrl();
- if (servletMap.containsKey(url)){
- servletMap.get(url).service(request,response);
- }else{
- response.write("404 not found");
- }
- os.flush();
- os.close();
- is.close();
- socket.close();
- }
- public static void main(String[] args) throws Exception{
- new Tomcat().start();
- }
- }
|