概述

Servlet技术是对webserver的扩展,要理解这个,可能先了解一下什么是Webserver以及它的功能,特别是它的不足是非常有帮助的,可參考:点击打开链接。另外。Servlet也是一个用java语言的Servlet
API编写的特殊的java类。它执行在Servlet容器中。它的功能是分析请求,处理请求,构造响应消息,它本来就处于web服务的线上这也非常easy理解。概念上就这么多了。

Servlet容器

容器负责管理Servlet类,其内容包含:匹配Servlet,运行Servlet生命周期等。容器和Servlet的关系呢就像饭店和厨师。厨师能够分为什么湘、闽、川、中式糕点等。这就相当于一个一个的Servlet类,顾客通过服务员(Request)点餐,然后饭店再依据点餐需求去找到相应的厨师(Servlet)来做菜。然后厨师做好了菜通过传菜生(Response)交给顾客。容器大概也就是相当于饭店做的内容了,
定位厨师。管理厨师。以下看一下Tomcat容器的结构,如图(图片作者许令波)。

生命周期

Servlet的生命周期须要经过创建、初始化、运行、销毁四个阶段。这四个阶段都是有Servlet容器来管理的。整个运行的流程例如以下图所看到的。

这里由于Servlet是单实例多线程的,所以针对请求先要检查实例是否存在。以下具体分析一下生命周期的各个阶段。

创建:关于Servlet实例何时创建有两种情况,在默认情况下Servlet实例是在第一个请求到来的时候创建。或者是通过配置文件来设置它在容器启动时就实例化。仅仅须要在web.XML文件里的<Servlet></Servlet>之间加入例如以下代码:<loadon-startup>1</loadon-startup> 。这里的的值表示的是Servlet实例化的顺序。

初始化: 一旦Servlet实例被创建,Webserver会自己主动调用init(ServletConfig config)方法来初始化该Servlet。当中方法參数config中包括了Servlet的配置信息。比方初始化參数,该对象由server创建。

<span style="font-size:18px;">        <span style="font-family:FangSong_GB2312;"><servlet>
<servlet-name>ClientIdValidateServlet</servlet-name>
<servlet-class>com.bjpowernode.drp.util.servlet.ClientIdValidateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ClientIdValidateServlet</servlet-name>
<url-pattern>/servlet/ClientIdValidateServlet</url-pattern>
</servlet-mapping></span></span></span>

运行( Service):在服务阶段Webserver会调用该实例的service(ServletRequest
request,ServletResponse response)方法。request对象和response对象有server创建并传给Servlet实例。request对象封装了client发往server端的信息。response对象封装了server发往client的信息。

销毁:Webserver必须保证调用destroy()方法之前。让全部正在执行在该实例的service()方法中的线程退出或者等待这些线程一段时间。

一旦destroy()方法已经执行。Webserver将拒绝全部的新到来的对该Servlet实例的请求,destroy()方法退出,该Servlet实例即能够被垃圾回收。

总结:Servlet是Java web的核心,对于理解它的工作原理和生命周期是比較重要的。

尽管是看了视频。查了资料。花了近一天的时间,可是感受上还不是特别清晰。

关于怎样定位到Servlet class文件,关于其和容器以及容器和Webserver,应用程序server之间的关系的问题。

都还比較的乱!

Java Web开发基础(1)-Servlet的更多相关文章

  1. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  2. 【Java Web开发学习】Servlet、Filter、Listener

    [Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...

  3. java web 开发入门 --- tomcat/servlet/jsp

    在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...

  4. java web开发基础实例(javabean+jsp+servlet+jdbc)

    JavaBean:用于传递数据,拥有与数据相关的逻辑处理 JSP:从Model接收数据并生成HTML Servlet:接收HTTP请求并控制Model和View jdbc:用于配置环境 一.[建立数据 ...

  5. 初学 Java Web 开发,从 Servlet 开发

    1. 基本要求:Java 编程基础 有良好的 Java 语言编程基础,这是必须的,在讨论 Web 开发技术时提了一个 Java 编程基础的问题会被鄙视的. 2. 环境准备 (Eclipse + Tom ...

  6. Java Web 开发的JavaBean + Servlet + Sql Server

    日期:2018.12.9 博客期:026 星期日 我知道对于每个人都需要对开发web进行了解,而我们常用的技术,也应该有所了解 /*<------------------->*/知识点: ...

  7. Java Web开发基础(3)-JSTL

    在DRP项目中接触到了JSTL标签库,对我这样的比較懒的人来说,第一感觉就是"惊艳". JSTL标签库的使用.能够消除大量复杂.繁复的工作.工作量降低的不是一点半点.是降低了一大半 ...

  8. java Web开发基础(一)工程项目文档结构

    2013年毕业后,在深圳工作开始是用.NET ASP.NET MVC做的项目,后来公司用java来做.于是就从.NET转java了.从.NET转java不是那么的难.今天刚好是清明节放假三天,整理了j ...

  9. Java Web开发基础(2)-JSP

    上一篇博我粗略的介绍了一下Servlet.粗略是由于博主也刚刚学习这部分的内容,还不是非常懂所以无法讲的非常精细.可是本着二八原则,我还是先继续学习.所以,这篇博客接着JSP的内容.由于.这两个内容关 ...

随机推荐

  1. HTML增加附件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Python学习日记之字典深复制与浅复制

    Python中通过copy模块有两种复制(深复制与浅复制) copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象. deepcopy 深复制 复制对象及其子对象 因此,复制后对原dic ...

  3. Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些。

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些.  常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...

  4. Detectron-MaskRCnn:Mask判别和获取前向Mask的标签

    对于FCN-SceneParse网络,最后卷积生成N个类别的maps,每个Map都得到图像所有点的单类概率.MaskRCNN的结构与FCN不相同. 参考三个文章: Detectron总结1:Blob的 ...

  5. 基于 CentOS 搭建Seafile个人网盘

    一.安装 Seafile 安装依赖环境使用 yum 安装 Python 及 MySQL: yum install python python-setuptools python-imaging pyt ...

  6. Jmeter之计数器

    如果需要引用的数据量较大,且要求不能重复或者需要自增,那么可以使用计数器来实现. 计数器(counter):允许用户创建一个在线程组之内都可以被引用的计数器. 计数器允许用户配置一个起点,一个最大值, ...

  7. 反转链表_JAVA

    package algorithms; /* * * * 输入一个链表,反转链表后,输出新链表的表头. * public class ListNode { int val; ListNode next ...

  8. JavaScipt30(第一个案例)(主要知识点:键盘事件以及transitionend)

    今天得到一个github练习项目,是30个原生js写成的小例子,麻雀虽小五脏俱全,现在记录一下第一个. 第一个是键盘按键时页面上对应的键高亮,同时播放音频,松开后不再高亮. 我自己实现了一下,然后查看 ...

  9. shell日志颜色处理

    记录一下shell日志颜色处理 _COLORS=${BS_COLORS:-$(tput colors >/dev/)} __detect_color_support() { # shellche ...

  10. vim基础(一)

    今天看了下兄弟连的VIM讲解,又学了几个新命令,记录一下. 插入与删除 插入 首先还是插入,以前只知道i.今天发现原来还有a\A\i\I\o\O,下面具体说一下: 命令 含义 a 在光标后插入 A 在 ...