1.什么是Servlet?

在查看javax包下的Servlet,可以看到,servlet仅仅是一个普通的java接口。

package javax.servlet;import java.io.IOException;public interface Servlet {// 初始化方法void init(ServletConfig var1) throws ServletException;// 包含一个ServletConfigServletConfig getServletConfig();// 运行方法void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;String getServletInfo();void destroy();
}

但是javaweb中的核心就是者一个servlet类,是javaweb应用的基础。javaweb应用中浏览器发出的请求,在java程序中就是通过servlet接收的。
问题出现了,为什么是通过servlet接收的,servlet是如何变成javaweb的基础和核心呢?
下面来详细解答:

1.1 Servlet的最初定义

通过上面的代码可以知道,Servlet就是一个接口,和其他java类没有任何区别。但这是jdk定义的规范,即Servlet就是javaweb的规范,是给servlet容器的规范。它规定了:

  • Servlet容器遇到实现了Servlet接口的class文件,就必须加载它。
  • Servlet容器要创建一个ServletConfig对象。这个对象中,包含了servlet的初始化配置信息。
package javax.servlet;
import java.util.Enumeration;
public interface ServletConfig {String getServletName();  //的到对应的servlet的名字。ServletContext getServletContext();   //得到servletContextString getInitParameter(String var1);Enumeration<String> getInitParameterNames();
}<servlet><servlet-name>springMvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>  //指的就是这些信息<param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>
  • Servlet容器创建一个servlet对象,并且调用其中的init方法进行初始化。
  • Servlet容器接收到一个请求的时候,要针对这个请求,创建ServletRequest 和 ServletResponse 对象,并把它作为参数传给指定的servlet的service方法。

  • 当web应用被终止时,servlet会先调用servlet对象的destroy方法,然后再销毁servlet对象。

2.Servlet容器

看完上面的介绍,我们可以看出,Servlet基本没有做什么事情,全都是Servlet容器来做,那什么是Servlet容器呢?就是javaweb服务器,如Tomcat,netty等。 因此,正是这些针对Servlet容器的规范才使得Servlet一个普通的类变成了javaweb的核心。

2.1.Servlet和Servlet容器的关系比喻。

以前看过一篇文章,比喻两者的关系就像 子弹和枪 ,没有枪子弹也就是一个普通的铁块。相对的,没有tomcat等web服务器,servlet就是一个 普通的类。其实或许很难理解 “规范” 这个词,我们从另一个角度来看,java的的JDBC 就是针对各个数据库厂商的产品各不相同,而定义的统一规范。都是通过Connection来表示一个数据库连接。通过Statement来执行sql语句。 规范就是规定一些类的特殊作用。而Servlet的特殊作用就是用来在javaweb项目中,接受http请求的。

2.3Tomcat是如何实现管理Servlet的生命周期的

Tomcat相关的组件就不详细介绍了,毕竟这一篇写的是Servlet,在Tomcat中,把Servlet包装成StandardWrapper容器,所有相关的操作如Servlet的装载,初始化,执行和销毁都是由这个容器来操作。

通过 wrapper.loadServlet() 来创建Servlet对象。
public synchronized Servlet loadServlet() throws ServletException {Servlet servlet;try {………ClassLoader classLoader = loader.getClassLoader();………Class classClass = null;………servlet = (Servlet) classClass.newInstance();   // 通过反射拿到Servlet对象。if ((servlet instanceof ContainerServlet) &&(isContainerProvidedServlet(actualClass) ||((Context)getParent()).getPrivileged() )) {((ContainerServlet) servlet).setWrapper(this);}classLoadTime=(int) (System.currentTimeMillis() -t1);try {instanceSupport.fireInstanceEvent(InstanceEvent.BEFORE_INIT_EVENT,servlet);if( System.getSecurityManager() != null) {Class[] classType = new Class[]{ServletConfig.class};Object[] args = new Object[]{((ServletConfig)facade)};SecurityUtil.doAsPrivilege("init",servlet,classType,args);} else {// 对Servlet进行初始化操作。并同时传一个StandardWrapperFacade对象,这个对象是包装了ServletConfigservlet.init(facade);   }.......return servlet;
}

再多提一句,Servlet容器的作用就是:
1. 接收请求
2. 管理Servlet的生命周期。

Servlet和Servlet容器概念相关推荐

  1. 理解Servlet和Servlet容器、Web容器等概念

    Tomcat容器属于web容器的一种,web容器还包括weblogic容器.JBoss容器等:而Tcomcat.webLogic等包含servlet容器. web容器:可以部署多个WEB应用程序的环境 ...

  2. java web servlet、servlet容器 HTTP服务器和mvc三层架构或者说servlet属于哪一层的,给我搞的晕晕的,今天终于弄明白了

    0 我们先看Web容器是什么? 首先,让我们简单回顾一下web技术的发展历史,可以帮助你理解web容器的由来. 早期的web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache,Nginx ...

  3. 什么是servlet?servlet的作用?——计算机网络系列学习笔记

    1. servlet的概念 简单来说servlet是运行在服务器上的java程序 servlet由servlet容器管理,servlet容器也叫 servlet引擎,是servlet的运行环境,给发送 ...

  4. servlet返回数据_JavaEE の Servlet - Http/Servlet - Day14 - 190507

    { 一.Http.二.Servlet } Day01 - 190507 一.Http 二.Servlet 三.Tomcat 四.web.xml 五.HttpServletRequest.HttpSer ...

  5. java servlet 3_java – Servlet 2.5和3之间有什么区别?

    更新 正如一个更新和更明确,这些是servlet 2.5和3之间的主要区别(我不想穷举,我只是提到最有趣的部分): 声明servlet,过滤器和监听器的注释(易于开发) 在servlets 2.5中, ...

  6. 【Servlet】Servlet生命周期

    Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程. Servlet程序本身不直接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期. Servlet生命 ...

  7. [Servlet] 初识Servlet

    什么是Servlet? 定义 Servlet的全称是 Server Applet,顾名思义,就是用 Java 编写的服务器端程序. Servlet 是一个 Java Web开发标准,狭义的Servle ...

  8. 【Servlet】Servlet 详解(使用+原理)

    文章目录 1. Servlet 介绍 1.1 什么是 Servlet 1.2 Servlet 的主要工作 2. Servlet 程序创建步骤 2.1 创建项目 2.2 引入依赖 2.3 创建目录 2. ...

  9. php容器概念,深入thinkphp5.1之Container容器

    作为tp框架或者说任何一种框架的核心思想,container类基本上算是框架的灵魂所在. 不得不说的注册树 在thinkphp框架中实现容器概念的无非是:注册树模式+单例模式的结合,单例模式咱就不进行 ...

  10. [梁山好汉说IT] 用实例来深入理解容器概念

    [梁山好汉说IT] 用实例来深入理解容器概念 0x00 摘要 如何对没有软件开发经验的人解释容器? 集装箱真的能够完美解释容器嘛? 除了集装箱还有其他常见实体能够解释容器嘛? 我找到了一个能够 和集装 ...

最新文章

  1. linux的自定义input,Linux Input子系统之第一篇(input_dev/input_handle/input_handler)
  2. 关于笔记本电脑玩一些游戏不能全屏的注册表修改法
  3. 微软、苹果把未来押注 FPGA?凭什么
  4. JAVA SE学习day_07:异常处理、TCP通信
  5. leetcode 169. Majority Element
  6. excel vba 使用mschart_使用VBA时不妨借力Excel催化剂的能力,开发更加轻松便捷
  7. 人工智能 | SLAM与Visual Odometry技术综述(浙江大学智能系统和控制研究所)
  8. sql server与java实例_史上最全:PostgreSQL DBA常用SQL查询语句(建议收藏学习)
  9. linux 系统语言设置字体,Linux语言和字体的自定义设置
  10. Java实现微信轰炸
  11. 语音信号处理基础知识之频谱、相位谱、幅度谱、功率谱及语谱图
  12. String字符串拼接原理
  13. python绘制人物关系图,Python来袭,教你用Neo4j构建“复联4”人物关系图谱!
  14. java图书商城项目_JavaWeb网上图书商城完整项目--23.注册页面之html实现
  15. 自学考试计算机实践课,河南大学自学考试计算机实践课考试须知
  16. oracle to_char 和 to_date的区别,斜杠和横杠日期转换,mybatis中入参日期,数据库字段是date的写法
  17. 集火全屋智能“后装市场”,真正玩得转的没几个
  18. Synaptics FP Sensors(WBF)(PID=0011)无法录入Windows Hello问题记录
  19. 计算机系统结构专业都学什么,计算机专业都学些什么?
  20. UE网络-官方联网和多人游戏

热门文章

  1. iphone 装 android系统,iPhone上安装Android系统详细步骤。
  2. java:xml数据转json
  3. malloc函数和free函数的使用方法解析
  4. 一个核函数把低维空间映射到高维空间的例子
  5. 天猫精灵测评与开发案例
  6. 激光雷达系统原理及相关介绍
  7. java使用itext7实现html转pdf
  8. 在计算机检索中 有哪些方法能缩小,使用“或OR”运算将同义词连接起来可以缩小检索。()...
  9. 组态王c语言延时1秒,(组态王软件详细教程第三讲让画面动起来.doc
  10. 服务器cpu天梯图多核性能,2020年2月cpu处理器天梯图最新高清大图_处理器天梯排行榜...