Java Web每天学之Servlet的原理解析
Java Web每天学之Servlet的工作原理解析,上海尚学堂Java技术文章Java Web系列之二
上一篇文章Java Web每天学之Servlet的工作原理解析是之一,欢迎点击阅读。
Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。 使用 Java 语言编写的服务器端程序,可以像生成动态的 WEB 页, Servlet 主要运行在服务器端,并由服务器调用执行,是一种按照 Servlet 标准来开发的类。 是 SUN 公司提供的一门用于开发动态 Web 资源的技术。
Servlet 本质上也是 Java 类,但要遵循 Servlet 规范进行编写,没有 main()方法,它的创建、使用、销毁都由 Servlet 容器进行管理(如 Tomcat)。
Servlet 是和 HTTP 协议是紧密联系的,其可以处理 HTTP 协议相关的所有内容。这也是 Servlet应用广泛的原因之一。提供了 Servlet 功能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty,WebLogic Server, Websphere, JBoss 等等。
作用:接收请求数据, 处理请求, 完成响应
1、请求处理工作原理
执行过程
客户端发出请求http://localhost:8080/xxx
根据Web.xml文件的配置,找到对应的
读取中的值
找到对应的
找到该class并加载执行该class,返回结果
由Web服务器将结果响应给客户端
2、Servlet的实现方式
SUN公司定义了一个接口和两个实现类,Servlet接口,GenericServlet和HttpServlet实现类,其中后者是前者的子类,子类在原有基础上添加了一些HTTP协议处理方法,HttpServlet比GenerricServlet功能更强大,所以我们一般将自己的类继承自HttpServlet,并重写doGet方法和doPost方法,或重写Service方法。以下三种方式都可以。
实现Servlet接口
继承GenericServlet类
继承HttpServlet类
3、Servlet的生命周期
Servlet没有main()方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。所谓生命周期,指的是servlet容器如何创建servlet实例、分配其资源、调用其方法、并销毁其实例的整个过程
在如下两种情况下会进行对象实例化。
阶段一: 实例化(就是创建servlet对象,调用构造器)
第一种情况:
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,才会创建实例。
第二种情况:
容器在启动时,或者新部署了某个应用时,会检查web.xml当中,servlet是否有load-on-starup配置。如果有,则会创建该servlet实例(仅仅被创建一次 默认为单例)。load-on-starup参数值越小,优先级越高(最小值为0,优先级最高)。
配置方式如下:
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.shsxt.controller.LoginController</servlet-class>
<!--容器启动时实例化当前servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
阶段二: 初始化
为servlet分配资源,调用init(ServletConfig config);方法config对象可以用来访问servlet的初始化参数,父类方法init存在两个,如果重写父类所有init方法,初始化时仅仅会执行带参init方法 不会执行无参init方法
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.shsxt.controller.LoginController</servlet-class>
<!-- servlet 初始化参数配置 -->
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
<!--容器启动时实例化当前servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
带参init方法获取初始化参数值
@Override
publicvoidinit(ServletConfig config)throwsServletException{
System.out.println("编码:"+config.getInitParameter("encode"));
}
阶段三: 就绪/调用(服务)
有请求到达容器,容器调用servlet对象的service()方法,处理请求的方法在整个声明周期中可以被多次调用;HttpServlet的service()方法,会依据请求方式来调用doGet()或者doPost()方法。但是,这两个do方法默认情况下,会抛出异常,需要子类去override。
阶段四: 销毁容器依据自身的算法,将不再需要的servlet对象删除掉。
在删除之前,会调用servlet对象的destroy()方法。
destroy()方法用于释放资源。
在servlet的整个生命周期当中,init,destroy只会执行一次,而service方法会执行多次。
@Override
publicvoiddestroy(){
System.out.println("LoginController被销毁...");
}
Servlet的生命周期,简单的概括这就分为四步:servlet类加载-->实例化-->服务-->销毁。下面我们描述一下Tomcat与Servlet是如何工作的,看看下面的时序图.
1、Web Client 向Servlet容器(Tomcat)发出Http请求
2、Servlet容器接收Web Client的请求
3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中
4、Servlet容器创建一个HttpResponse对象
5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数,传给HttpServlet对象
6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据
8、Servlet容器把HttpServlet的响应结果传给Web Client
更多java web相关技术推荐阅读:
Java Web开发轻松学之Java Web的中文编码问题(二)
Java Web每天学之Java Web的中文编码问题(一)
Java Web每天学之Servlet的原理解析的更多相关文章
- Java web每天学之Servlet工作原理详情解析
上篇文章中我们介绍了Servlet的实现方式以及Servlet的生命周期,我们这篇文章就来介绍一下常用对象. 点击回顾:<Java Web每天学之Servlet的工作原理解析>:<J ...
- Java Web 深入分析(7) Jetty原理解析
1Jetty的基本架构 Jetty有一个基本的数据模型,这个模式就是handle,所有拷贝拓展的组件都被当做一个handler被添加到server中,然后由jetty统一管理. 1.1Jetty基本架 ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- 【Java】Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- 【Java Web开发学习】Servlet、Filter、Listener
[Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...
- Servlet 工作原理解析
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...
- JavaWeb总结--Servlet 工作原理解析
从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...
- [转]Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Servlet 工作原理解析--转载
原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...
随机推荐
- netstat、ps、top 、kill 命令备忘
1.ps命令用于显示当前进程 (process) 的状态. -aux 显示所有包含其他使用者的行程. -e 显示所有进程. -f 全格式输出. 一般带参数 -ef 或者 -aux ,差别不大. 区别: ...
- 2142: 逛超市(zznuoj)
2142: 逛超市 时间限制: 1 Sec 内存限制: 128 MB提交: 82 解决: 43[提交] [状态] [讨论版] [命题人:admin] 题目描述 “别人总说我瓜,其实我一点也不瓜,大 ...
- 2018年冬季寒假作业4--PTA 币值转换
1. 实验代码: #include<stdio.h> int main (void) { int n, initial_n; scanf("%d", &n); ...
- 一起学爬虫——如何爬取通过ajax加载数据的网站
目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据. 请看下面的代码: url = 'http ...
- python将多个pdf合成一个
'''# -*- coding:utf-8*-''' import sys import importlib importlib.reload(sys) import os import os.pat ...
- Java对象引用和对象赋值
关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用,那实在没法很好 ...
- Random Erasing Augmentation(REA)
为了增强模型的泛化的性能,一般的手段有数据增强和正则化方法(如dropout,BN),而用于数据增强的一般方法有:随机裁剪.随机水平翻转.平移.旋转.增加噪音和生成网络方法等(前两个方法用的最多,也最 ...
- js基础知识易错点(一)
最近替另一个项目招人,要求基础知识好,随便问了一些基础题,发现了一些易错的点,总结一下. 1.判断一个空数组 var arr = []; 1)JSON.stringify(arr) == " ...
- 获取JSON格式的树形
需求:前端需要一个JSON格式的Tree,例如组织机构维护的时候使用到的,需要一次性返回给前端.所以编写了一个算是半通用的查询方法 1.数据库Dao层: /** * 根据父ID获取子数据 * @par ...
- 关于LP Wizard生成Allegro封装无焊盘的解决方案
最近在学Allegro,安装了软件后看网上说LP Wizard可以一键生成Allegro封装,就想去尝尝鲜.毕竟一直都是手动做封装,没怎么用过向导.但是按照网上教程用LP生成了一个封装,发现打开时没有 ...