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. 抖音抖一抖-SVG和CSS视觉故障艺术小赏

    故障艺术,英文名称叫glitch,在很多赛博朋克作品中经常看到,其实就是故意表现一种显示设备的小故障效果,抖音的图标其实就是这种的效果,我们看下这个图标 这个图标中的红色和蓝色的偏移其实就是一种故障艺 ...

  2. ftp 客户端 上传

    ps: 1.使用netkit-ftp-0.17交叉编译出来的ftp客户端, 2.然后写上传代码,调用ftp传服务器: 3.最好使用bin二进制文件形式传输: 4.ftp客户端和Ubuntu自带的ftp ...

  3. MyEclispe启动Tomcat7时出现错误The servlets named [LoginServlet] and [com.liu.control.LoginServlet] are both

    刚开始尝试写Servlet代码,第一天就碰到这个错误,在网上找了很多资料才找到解决办法,在此记录一下. org.apache.catalina.LifecycleException: Failed t ...

  4. Spring Boot 自动装配(一)

    目录 目录 前言 1.起源 2.Spring 模式注解 2.1.装配方式 2.2.派生性 3.Spring @Enable 模块驱动 3.1.Spring框架中@Enable实现方式 3.2.自定义@ ...

  5. 引用公共页面的js函数报错

    对于网站来说很多页面之间都有着大量的共享模块,如页头,页脚和用户栏等.很多时候为了方便.省事,我们在公共模块写函数,然后在别的页面里调用.但我们在引用公共的js函数时,有些可以引用,有些却报错:这是因 ...

  6. js中的Object.assign接受两个函数为参数的时候会发生什么?

    缘由 今天看到一段代码 return Object.assign(func1, func2); 心生疑惑,为什么 Object.assign 的参数可以是函数? 于是有了下面这一堆东西,其实都是老生常 ...

  7. 华为云垃圾分类大赛,让AI 帮你“见圾行事”

    [摘要] "你是什么垃圾"已经out了,我们来看0看谁是垃圾之王?! 当各位听说深圳实行垃圾分类政策时,是不是虎躯一震,每天焦虑得想搬家? -稳住,别慌! 救兵来啦 华为云人工智能 ...

  8. 基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

  9. 《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)

    1. 简介 本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手.因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙 ...

  10. 深入理解 BigDecimal

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...