Servlet运行原理:
1:浏览器发送一个HTTP请求给服务器(get方式或者为post方式)
2:服务器内部会根据url判断请求的Servlet,并产生两个对象ServletRequest请求对象和ServletResponse响应对象
3:开辟一个线程处理本次请求,将产生的对象传入线程中
4:调用对应的Servlet中的service方法,如果我们自定义的Servlet重写了service方法会直接执行service方法,如果没有重写则会调用父类的service方法(先调用的是service(ServletRequest req,ServletResponse resp)方法将req,resp强转为HttpServletRequest和HttpServletResponse对象,再调用service(HttpServletRequest req,HttpServletResponse resp)方法)
5:父类的service方法会根据请求的方式调用对应的doGet()或doPost()方法,此时因为多态实际上我们调用的是我们自定义Servlet中重写的doGet和doPost方法,如果没有重写会调用父类的相应的方法返回错误信息
6:服务器将结果响应给浏览器,本次请求结束
Tomcat启动原理:
Tomcat的启动方式有两种,一种是直接点击startup.bat一种是在cmd黑窗口中输入catalina.bat加上start参数,其实两种方式底层实现是一样的。
1:Tomcat的启动入口是BootStrap类中的main方法,在main方法中,使用(BootStrap类的对象)bootstrap.init()来初始化类加载器和(通过反射)创建Catalina实例,然后再启动Catalina线程。
2:Bootstrap的(BootStrap类的对象)demon.start()方法就会调用Catalina的start方法。Catalina实例执行start方法。这里有两个点,一个是load()加载server.xml配置(内部创建一个Digester类来解析servlet.xml文件得到容器的配置)、初始化Server的过程(生成各组件对象(Server、Service、Container、Connector等)以及建立相互之间的关系),加载完成后调用getServer().start()开启服务、初始化并开启一系列组件、子容器的过程
Mybatis运行原理:
当Mybatis运行开始时,先通过Resources工具类加载核心配置文件,之后通过XMLConfigBuilder对配置文件进行解析,将解析的结果封装为Configuration对象,再将Configuration作为参数构建DefaultSqlSessionFactory对象,至此工厂对象创建完毕。
接下来通过工厂对象调用openSession()的方法创建SqlSession对象,在这个过程中需要通过TransactionFactory生成Transaction对象,以及生成核心执行器Executor对象,再通过这些对象构建DefaultSqlSession对象,至此SqlSession对象构建完毕。
之后通过SqlSession对象执行相应的操作,如果操作成功调用commit提交事务,如果操作失败调用rollback回滚事务。
最后调用close关闭session资源。