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. 小程序如何判断用户(后台使用Django)

    小程序如何判断用户是哪个: 有Web开发经验的都知道,客户端用户发起请求,服务器收到请求后,可以通过把用户user_id记录到session里,然后下次通过session里面的user_id来辨别是哪 ...

  2. 【RN - 基础】之Image使用简介

    Image组件是用来加载图片的.React Native项目加载图片往往有三种方式: 从React Native项目中加载图片: 从APP项目中加载图片: 从网络中加载图片. Image组件加载图片 ...

  3. c语言基本数据类型short、int、long、char、float、double大小及命名规则

    C 语言包含的数据类型: 一.数据类型与“模子”short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 怎么去理解它们呢? 举个例子:见过藕煤 ...

  4. [学习笔记] [数据分析] 01.Python入门

    1.安装Python与环境配置 ① ② 安装pip以及利用pip安装Python库 2.Anaconda安装 conda list 要在root环境下 3.常用数据分析库 ① Numpy 安装:con ...

  5. appium自动化的一个实例

    实现appium的自动化,三步走,具体如下: 第一步:启动appium的服务端: 可以通过命令行的方式启动:cmd,然后输入appium,如下图 也可以打开桌面程序appium,点击右上角的运行按钮, ...

  6. 判断一个坐标点是否在封闭曲线内的方法(swift)

    //用playground运行即可 import UIKit var str = "Hello, playground" let lTestPointsOne : [(Double ...

  7. Python开发GUI工具介绍,实战:将图片转化为素描画!

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  8. 转:MySQL下载安装、配置与使用(win7x64)

    1 第一大步:下载. a.俗话说:“巧妇难为无米之炊”嘛!我这里用的是 ZIP Archive 版的,win7 64位的机器支持这个,所以我建议都用这个.因为这个简单嘛,而且还干净. 地址见图 拉倒最 ...

  9. Python ——selenium报错 'chromedriver.exe' executable needs to be in PATH

    from selenium import webdriver dr = webdriver.Chrome() 运行时报错: 问题分析: 1.没有下载chromedriver.exe 2.chromed ...

  10. hibernate的查询方式的介绍(一)

    1.对象导航查询 2.OID查询 3.hql(hibernate query language)查询 4.QBC查询 5.本地sql查询 在这里先介绍其中两种 1.hibernate的对象导航查询 ( ...