写在开始 : 本文存在部分引用, 仅用作个人复习, 大家有需要可以查阅原文链接进行查阅学习!
引用地址 : https://blog.csdn.net/qq_19782019/article/details/80292110?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168024297016800182162273%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168024297016800182162273&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-80292110-null-null.142v80insert_down1,201v4add_ask,239v2insert_chatgpt&utm_term=servlet&spm=1018.2226.3001.4187
原文链接:https://blog.csdn.net/qq_19782019/article/details/80292110
Servlet(Server Applet),全称Java Servlet 。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。(言外之意:写自己的类,不用写 main 方法,别人自动调用)
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器 .
Servlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能,统一接口。由其他内部厂商如tomcat,jetty内部实现web的功能。如一个http请求到来:容器将请求封装为servlet中的HttpServletRequest对象,调用init(),service()等方法输出response,由容器包装为httpresponse返回给客户端的过程。
常见 Servlet容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss …
引用链接:https://blog.csdn.net/zhangxia_/article/details/128886023?spm=1001.2014.3001.5502
Servlet API 包含以下4个Java包:
1.javax.servlet 其中包含定义servlet和servlet容器之间契约的类和接口。
2.javax.servlet.http 其中包含定义HTTP Servlet 和Servlet容器之间的关系。
3.javax.servlet.annotation 其中包含标注servlet,Filter,Listener的标注。它还为被标注元件定义元数据。
4.javax.servlet.descriptor,其中包含提供程序化登录Web应用程序的配置信息的类型。
Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。
用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。
ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。
对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。
从 Jar 包上来说,Servlet 规范就是两个 Jar 文件。servlet-api.jar 和 jsp-api.jar,Jsp 也是一种Servlet。
从package上来说,就是 javax.servlet 和 javax.servlet.http 两个包。
从接口来说,就是规范了 Servlet 接口、Filter 接口、Listener 接口、ServletRequest 接口、
ServletResponse 接口等。类图如下:
HTTP 协议(Hypertext Transfer Protocol, 超文本传输协议),是一个客户端请求和响应的标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则
HTTP协议的特点:
1. 支持客户/服务器模式。
**2. 简单快速:**客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET/POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
**3. 灵活:**HTTP 允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
**4. 无连接:**无连接是表示每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。HTTP1.1 版本后支持可持续连接。通过这种连接,就有可能在建立一个 TCP 连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应.通过把建立和释放 TCP 连接的开销分摊到多
个请求上,则对于每个请求而言,由于 TCP 而造成的相对开销被大大地降低了。而且, 还可以发送流水线请求,也就是说在发送请求 1 之后的回应到来之前就可以发送请求 2.也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。
5. 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送 的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP请求默认使用get
get | post |
---|---|
参数在url中 | 参数在 resquest body 请求体中 |
有长度限制 (url最大长度2048字符) | 没有长度限制 |
暴露在url中,不安全 | 隐藏在请求体中,安全 |
只能url编码(ASCⅡ) | 支持多种编码 |
产生一个TCP数据包 | 产生两个TCP数据包 |
获取服务器中的数据 | 修改服务器上的数据 |
能被缓存,静态资源会缓存,数据不会 | 不能缓存 |
速度快 | 速度相对慢一些 |
浏览器回退无害 | 再次提交请求 |
可收藏为书签 | 不可收藏为书签 |
:::success
注:HTTP请求,最初设定了八种方法。这八种方法本质上没有任何区别。只是让请求,更加有语义而已。
常见四种: get(查) post(增) put(改) delete(删)
**else: **OPTIONS 返回服务器所支持的请求方法; HEAD 与GET一致,只不过响应体不返回,只返回响应头; TRACE 回显服务器端收到的请求,测试的时候会用到这个; CONNECT 预留,暂无使用
:::
Tomcat 是一个符合 JavaEE WEB 标准的最小的 WEB 容器,(一个免费开放源码的web应用服务器)所有的JSP 程序一定要有 WEB 容器的支持才能运行,而且在给定的 WEB容器里面都会支持事务处理操作。
Tomcat 简单说是一个运行Java 的网络服务器,底层是 Socket 的一个程序,它是 JSP 和Servlet 的一个容器。
Tomcat目录结构
tomcat是如何处理Http请求流程的
假设来我们在浏览器上输入http://localhost:8080/my-web-mave/index.jsp
在tomcat中是如何处理这个请求流程的:
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8081" />
异步非阻塞IO(Java NIO2又叫AIO) 主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度)。
:::success
1. 利用Tomcat的自动部署 | web应用拷贝到webapps目录,Tomcat在启动时会加载目录下的应用,编译后的结果放入work目录 |
---|---|
2. 使用Manager App控制台部署 | tomcat主页点击“Manager App” 进入应用管理控制台,指定一个web应用的路径或war文件 |
3. 修改conf/server.xml文件部署 | 增加Context节点可以部署应用 |
4. 增加自定义的Web部署文件 | conf/Catalina/localhost/ 路径下增加 xyz.xml文件,内容是Context节点,可以部署应用 |
1、独立的servlet容器,servlet容器是web服务器的一部分;
2、进程内的servlet容器,servlet容器是作为web服务器的插件和java容器的实现,web服务器插件在内部地址空间打开一个jvm使得java容器在内部得以运行。反应速度快但伸缩性不足;
3、进程外的servlet容器,servlet容器运行于web服务器之外的地址空间,并作为web服务器的插件和java容器实现的结合。反应时间不如进程内但伸缩性和稳定性比进程内优;
一个Tomcat中只有一个Server
一个Server可以包含 1~n 个Service
一个Service只有一个Container,但是可以有多个Connectors:因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下面会说到)
Service主要包含两个部分:Connector和Container (Tomcat 的心脏)
多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了!所以整个 Tomcat 的生命周期由Server 控制。
tomcat的conf目录下的server.xml配置文件中
:::success
Tomcat顶层架构小结:
项目 | Cookie | Session |
---|---|---|
存储位置 | 数据存储在客户端 | 数据存储在服务器 |
安全性 | 不安全 | 安全 |
数据大小 | Cookie一般不超过4kb | Session无大小限制 |
存储时间 | Cookie可以长期存储 | Session默认30分钟 |
服务器性能 | 不占服务器资源 | 占用服务器资源 |
k.v值 | 值一般为string | 值可以任意对象 |
:::success
这部分有待补充!
对象的生命周期是指一个对象被创建到被销毁的整个过程
Servlet运行在web服务器(Servlet容器)中,其中生命周期由容器来管理分为4个阶段
本文系自己 复习使用, JavaWeb阶段的Servlet仅仅用作复习准备面试, 出现频次较少了…