Tomcat
创始人
2024-03-19 16:26:18

用tomcat启动网站,实际就是将网站与tomcat合成一个项目。servlet没有主方法,借助tomcat的主方法来启动,

tomcat的运转流程

tomcat分成了两个阶段,分别是启动阶段和接收转发阶段

加载servlet信息:定义一个hashmap结构的容器,通过工具类扫描扫描webapp目录下的所有子目录和子文件,拿到所有的java类Class类信息之后会 利用class.forName()方法去for循环遍历每一个Class类信息,然后从Class类信息里去获取注解信息,拿到注解信息之后看哪些java的类信息里面有@WebServlet注解,挑选出来,通过newInstance() 生成类的实例。for循环里需要判断 是文件夹就递归,不是就判断是不是class文件,如果是class文件就放到定义的集合容器中去,key值是类对象,value是路径信息

监听请求端口:tomcat的主方法定义socket对象监听端口,我读源码的时候发现 这里的socket 和之前学的不一样,后来发现这里引用的是netty框架中的socket(还不会)。当用户请求过来之后创建线程将用户的信息交给读取用户请求信息的方法,然后继续阻塞监听;当tomcat 借助socket拿到http请求后并不是立即开启线程处理的,而是把它放入线程池中

读取用户请求信息的方法创建输入流对请求信息进行解析,把bit流转为字符串,判断是不是空请求,不是空请求的话获取请求里的url路径和访问方法;

根据url判断有没有访问数据、是静态资源还是动态资源,如果是静态资源就返回给response静态资源,如果是动态资源就调用分发器,分发器方法从hashmap容器里面找有没有对应的keyvalue值,如果没有就返回404页面,如果有通过反射的方式创建HttpServlet类型的servlet对象,然后调用service方法,获取到request里面的请求方式,判断是doget还是dopost,然后调用给各自的方法;

5.启动tomcat是如何将自定义的servlet加载到servlet容器当中的?

通过工具类扫描固定文件夹下的文件路径获取类的全路径名,就是扫描指定文件夹,是文件夹就递归,不是就判断是不是class文件,如果是class文件就放到定义的集合容器中去,这里利用这些绝对路径和java的反射机制得到他们的类对象;

6.自定义注解和元注解

自定义的注解@WebServlet是用在自定义的servlet上表示访问路径和名字,自定义注解是通过元注解来定义的;

@Target:用于描述注解的使用范围(被描述的注解可以用在什么地方),这里定义了用在类上;

@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE < CLASS < RUNTIM (12.120, -0.020, -0.16%)E),通常都是定义在运行(RUNTIME) 时;

现在知道了请求是get方式,那么请问怎么才能访问到MyServlet当中的doget方法的?

通过输入输出流判断并调用分发器,分发器从hashmap容器中匹配请求地址和servlet类对象,通过反射的方式创建HttpServlet类型的servlet对象并调用service方法,service方法通过request获取到是get请求,然后调用doget方法;

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...