欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《深入拆解Tomcat&Jetty》—— Servlet基础

程序员文章站 2022-03-11 21:57:23
...

我我我四月份没有写,然后五月份收获了好多个关注……(前后并没有什么因果关系)十分内疚。因为开年来入手了个好用的大纲笔记本,所以markdown没有那么迷人也是很懒了。
吴军老师说的对:大声展示你的计划,然后就会因为不想flag倒下而挣扎向前!(吴军老师并没有说过!!!

《深入拆解Tomcat&Jetty》—— Servlet基础 (小声嘀咕,最近很迷双黄蛋雪糕,想吃,没找到图,馋一夏)

1、Web 容器的由来

简单糊了个图,but糊完之后发现光看图好像也不是很清楚,哦耶~
一千年以前,要求很简单,只需要能浏览就可以,所以服务端只需要根据浏览器发出的请求找到对应的静态网页HTML,并传回去就可以。
后来客户孤独了,想要有来有往有交互,这就需要服务端根据交互内容做出对应的响应,要让HTTP服务器调用服务端程序。sun公司推出了Servlet技术,Servlet相当于运行在服务段得Java小程序,但是没有main方法,不能独立运行,需要部署到Servlet容器中,找个妈来管着它。Tomcat和Jetty就是Servlet容器(娃它妈)。

《深入拆解Tomcat&Jetty》—— Servlet基础

原文说的是:为了方便使用,所以娃它妈也具有HTTP服务器的功能。

2、HTTP必知必会

因为Tomcat和Jetty也要干以前HTTP服务器的活儿,先来搂一下一个完整的HTTP请求过程。

《深入拆解Tomcat&Jetty》—— Servlet基础

总结一下:

  • 处理连接请求
  • 根据协议拆包打包
  • 处理请求内容

2.1、Cookie和Session

HTTP协议是无状态的,在需要记录用户状态的场景中,以前的做法是在用户验证后,将每次请求都需要传递的登录信息保存在客户端本地,也就是Cookie。Cookie是HTTP报文的一个请求头,Web应用可以将用户的标志信息等存储在Cookie中,这样服务器每次读取Cookie就知道用户状态。
因为Cookie是明文存储,而且往往带有用户信息,所以存在很大的安全隐患。
Session转换思路,将信息存储在服务端,把用来匹配session的id交给用户。

《深入拆解Tomcat&Jetty》—— Servlet基础

3、servlet规范和servlet容器

前面提到的要实现动态交互就需要HTTP服务器调用后台程序来处理请求,如果在HTTP服务中处理调用哪个类的哪个方法,就会跟业务逻辑紧密耦合。
servlet容器:解决调用哪个类。用来加载和管理业务类。
servlet接口:解决调用哪个方法
servlet接口和servlet容器这一整套规范称作servlet规范。

《深入拆解Tomcat&Jetty》—— Servlet基础

3.1、servlet接口

public interface Servlet {
    /** servlet调用 */
    void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
    
    /** servlet配置*/
    String getServletInfo();
    ServletConfig getServletConfig();
    
    /** servlet管理 */
    void destroy();
    void init(ServletConfig config) throws ServletException;
}

3.2、servlet容器

工作流程:

《深入拆解Tomcat&Jetty》—— Servlet基础

我们通常是以web应用程序的方式来部署servlet的。servlet规范约定了web应用程序的目录结构

| -  MyWebApp
      | -  WEB-INF/web.xml        -- 配置文件,用来配置 Servlet 等
      | -  WEB-INF/lib/           -- 存放 Web 应用所需各种 JAR 包
      | -  WEB-INF/classes/       -- 存放你的应用类,比如 Servlet 类
      | -  META-INF/              -- 目录存放工程的一些信息

3.3、扩展机制

servlet规范提供了两种扩展机制:
Filter:干预过程。允许对请求和响应做一些统一的定制化处理。
Listener:基于状态。可以感兴趣的事件进行监听。

相关标签: servlet