Tomcat学习笔记1

Tomcat学习

tomcat:支持http协议的工具,实现了servelet, jsp ,能让后端开发专注在服务上,提高开发效率,而不是协议交互上(交互的步骤十分重复)
概念:是一个开源的轻量级的javaWeb(容器)服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选,(因为实现了javaee中的servlet jsp俩个协议)

开源小型web服务器 ,完全免费,主要用于中小型web项目,只支持Servlet和JSP 等少量javaee规范(就是JavaWeb编程接口)

1、JavaWeb概念

Java web,是用java技术来解决相关web互联网领域的技术的总称。web包括:web服务器和web客户端两部分。
java在最早web客户端的应用有java applet程序,不过这种技术在很久之前就已经被淘汰了。java在服务器端的应用非常丰富,
比如Servlet,jsp和第三方框架等等。java技术对web领域的发展注入了强大的动力

简单的说,就是使用java语言实现浏览器可以访问的程序内容。称之为Java Web。

javaweb开发是基于请求和响应的:

请求:浏览器(客户端)向服务器发送信息
响应:服务器向(客户端)浏览器回送信息

2javaEE概念

JavaEE 是在 JavaSE 的基础上构建的,是对 JavaSE 的扩展,增加了一些更加便捷的应用框架,JavaEE 号称有十三种核心技术。它们分别是:JDBCJNDIEJB、RMI、ServletJSP、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF。(定义了这些技术但没有实现,具体由服务器实现)

servlet和jsp

1.Servlet

Servlet(Server Applet),是用 Java 编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。

狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。

2.JSP

JSP(全称JavaServer Pages)是由 Sun 公司主导创建的一种动态网页技术标准。JSP 部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成 HTML、XML 或其他格式文档的 Web 网页,然后返回给请求者。

而tomcat就是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选,(因为实现了javaee中的servlet jsp俩个技术)

(tomcat就是一个实现了servelet jsp俩种技术的一个轻量型javaWeb容器(服务器),用于和前端动态交互页面数据相关(servlet修改数据,jsp用于实现页面交互),可以通过tomcat来使用者俩种被tomcat实现的技术,javaee本身并没有实现这俩种技术,仅定义了接口或者框架;

3tomcat启动

tomcat本质底层还是由serverSocket和线程池executor实现服务器,以及实现了相关jsp,servelet等技术,

核心类

1:org.apache.catalina.startup.Bootstrap

2:org.apache.catalina.startup.Catalina

文档中显示大体分为两步

1:当接受到启动命令时 初始化类加载器 初始化核心类的 init()

2:初始化Tomcat 的信息 加载资源 等待请求的到来

当接受到启动命令时 详细动作(第一步)

在 org.apache.catalina.startup.Bootstrap 类的 init() 方法中

1:装配类加载器 commonLoader / sharedLoader / catalinaLoader

2: 加载启动管理类 org.apache.catalina.startup.Catalina

第二步又分多小步

1:初始化Tomcat 信息
  1. 设置等待参数为true

  2. 初始化堆栈/读取配置/启动监听/初始化多个结果集/输出加载信息/初始化以及注册所有对象为JMX代理

(在这一步中设置了单一的入口链接 http://127.0.0.1:8080)

2:Catalina 的初始化

1)首先是加载服务StandardService -> starts Engine (ContainerBase ->Logger,Loader,Realm,Cluster etc)类的加载与初始化 / 开启线程上下文/加载需要部署的项目寻找路径是(webapps & conf/Catalina/localhost/*.xml) 然后加载处理应用的web.xml

2)启动一个线程来监听context/web.xml 如果更改就重新加载

3:当接收到请求 (会一直调用协议处理器)

1)单独开启的一个线程 等待接受请求的到来

2)获取到一个请求时分配一个TCP链接来处理请求(提供了一个容器)

(HTTP 请求在一个内部缓冲区中解析 [请求行/标头] 并将结果存储在结果集中 request )

3)解析完请求之后

它就应该根据应用名和Servlet名字去找Servlet实现类了,只有找到Servlet实现类才能真正执行Servlet里面的doGet或doPost方法,分俩步:

1.根据请求中的应用名和Servlet名怎么找到对应的Servlet实现类呢
2.怎么执行Servlet实现类中跟请求对应的方法呢

首先关于第二点,很简单:可以用***反射***
那么对于第一点该怎么实现呢?
其实也很简单,要么默认,要么映射。
默认的意思就是,请求中的Servlet名就是类名,这种可行,但是不好用,一个类还有包名的,万一在一个应用中,存在不同的包下存在名字相同的Servlet,这个时候就尴尬了。
所以最好的方式就是映射,一个Servlet名对应一个Servlet实现类。这也就是为什么我们在定义Servlet时,一定要做一个mapping关系,不管是通过@WebServlet注解还是在web.xml中,都需要配置一个mapping才能被访问到。

所以,Tomcat通过监听端口,获取数据,然后解析数据,根据请求url找到对应的Servlet实现类,然后通过反射执行Servlet实现类中的方法

会将参数绑定到线程/并装载要使用的类以及实例的编译JSP

4)调用Servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值