JavaEE开发,本质上就是开发一个个Servlet,然后部署到Servlet容器(如Tomcat)里运行。
 

1. Servlet是什么?

Servlet就是一个普通的接口(Interface),任何实现了该接口的类都可以被实例化为Servlet实例。
 

2. Servlet容器是什么?

开发者写的Servlet没有main方法,那它是怎么运行起来的呢?答案是,有一种特殊的程序可以将Servlet实例化,并调用其方法,这种程序就被称为Servlet容器,比如Tomcat。
PS:说它特殊,并不是因为它用了什么黑魔法,而是因为它符合Servlet技术规范而已。
 

3. Servlet是怎么起服务、监听端口的?

事实上Servlet是不管这些事的,它只管躺在那儿,等着Servlet容器喂给它ServletRequest和ServletResponse对象,并把response对象处理成想要的样子。起服务、监听端口、收发http报文都是由Servlet容器来做的。因此Servlet容器一般同时也是http服务器。
 

4. Tomcat是如何实例化Servlet的?

首先,肯定不是用的new操作符,因为Tomcat不可能将未知的、由用户自定义的Servlet类名硬编码在Tomcat代码里。
那么Tomcat是怎么做的呢?答案是反射。
所谓反射,就是通过类名字符串,拿到这个类的描述对象(Class对象),再调用这个对象的newInstance方法就可以创造这个类的实例啦。
具体说来,我们需要在JavaEE项目的web.xml文件里配置servlet-class字段,Tomcat在运行时会解析出这个字段的值,用于反射相应的Servlet类。
 

5. 一个http请求报文发过来,Tomcat怎么知道应该交给哪个Servlet处理?

当然是在web.xml的<servlet-mapping>里配置的啦。另外ServletRequest对象提供的RequestDispatcher对象也可以将请求forward到另一个Servlet继续处理。
 

6. Servlet何时被实例化?

Servlet只会在被首次访问时实例化一次。如果一个Servlet从来没被访问,就不会被实例化。Servlet是单例,一个Servlet只会有一个实例,但可以开多个线程并发处理多个请求。

JavaEE初学笔记之Servlet与Tomcat的更多相关文章

  1. 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat

    Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...

  2. 在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)

    1.是指servlet的版本,是2.5的还是3.0的 servlet3.0以后支持异步 2.dynamic web module和对应的TOMCAT 版本 http://blog.sina.com.c ...

  3. 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>

    1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...

  4. Servlet与Tomcat运行示例

    Servlet与Tomcat运行示例 本文将写一个servlet,然后将其部署到Tomcat的全过程.本文参考<深入拆解Tomcat_Jetty>内容. 一.基于web.xml开发步骤 下 ...

  5. C++ STL初学笔记

    C++  STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...

  6. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  7. Spring 初学笔记

    Spring 初学笔记: https://blog.csdn.net/weixin_35909255/article/category/7470388

  8. Servlet(1)—Servlet容器tomcat和HTTP协议

    Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理他们的共享数据. Servlet容器也称JavaWeb应用容器,或者Servlet/JSP容器 ...

  9. Java学习笔记之---Servlet

    Java学习笔记之---Servlet (一)如何实现Servlet 1.实现javax.servlet.Servlet接口: 2.继承javax.servlet.GenericServlet类: 3 ...

随机推荐

  1. java Math类常用方法

    package com.niuke.test; public class MathDemo { public static void main(String args[]){ /** * abs求绝对 ...

  2. MySQL 库、表、记录、相关操作(2)

    库.表.记录.相关操作(2) 字段操作 create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter ...

  3. 关于小码哥kylin

    技术格言: 用双手改变人生,用代码改变世界! 个人网站:http://www.isainttech.com QQ:56619556 Email:dragonsaint@qq.com 微信:kylin1 ...

  4. shell脚本sed awk

    删除第一行 sed '1d' test.txt 假装执行 sed -i '1d' test.txt 执行 从第二行删除到行尾 sed '2,$d' test.txt sed -i '2,$d' tes ...

  5. (一)sync分析之为啥el-dialog中的visible需要使用.sync

    首先,笔者在使用element-ui 中的dialog组件时,发现visible属性在使用时需要添加.sync才生效,心中好奇,所以研究一下原理 我们先自己创建一个dialog组件,如下 当我们点击关 ...

  6. react-native-linear-gradient颜色渐变

    目录 一 安装 二 使用 2.1 colors 2.2 start / end eg1:斜角渐变 eg2: 从左到右 2.2 locations eg1: 0.4是渐变的起点,0.6是渐变的终点 一 ...

  7. 简单http和https服务器python脚本

    欢迎加入python学习交流群 667279387 工作经常要用到测试http和https协议,这里写了两个简单的脚本实现简单的http服务器和https服务器. http服务器代码 import s ...

  8. [TimLinux] JavaScript 如何在AJAX中替换元素的图片

    1. 示例代码 /* * <img id="idTestImg" src="/static/test.png" /> */ var idTestIm ...

  9. 使用 Python 验证数据集中的体温是否符合正态分布

    数据集地址:http://jse.amstat.org/datasets/normtemp.dat.txt 数据集描述:总共只有三列:体温.性别.心率 #代码 from scipy import st ...

  10. 从RTL视图到Verilog语言-转可乐豆原创

    从RTL视图到Verilog语言 曾经听过某位大牛都说:“当你的学习FPGA到一个境界的时候,你看到的硬件描述语言,将不再是单纯的语言,而是由一个个逻辑门组成的电路图,一旦达到这个境界,方能把代码写到 ...