什么是Tomcat

用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方法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值