文档章节

Servlet原理

醉人的笑容你有没有
 醉人的笑容你有没有
发布于 2016/05/03 11:31
字数 743
阅读 83
收藏 5

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

    Servlet规范定义了HttpServlet,HttpRequest,HttpResponse,HttpCookie,HttpSession,RequestDispatcher,看到了这么多定义,就该知道这一切都是为了Java实现开发Web的能力,最新的Servlet规范支持在启动时编程式添加Servlet,FIlter。Servlet规范本身是为了让各个Servlet容器厂商能够兼容应用。

    Servlet规范不光是文档说明,同时也包含少数的类和多数接口代码,每个Servlet容器厂家要实现接口中的方法。不光是Servlet规范是这种方法,JDBC规范也是这种形式,都是针对于接口编程。Servlet已经被Sun设计出来了,只不过需要各个Servlet容器来实现具体的功能。

    Servlet本身就是一个Java类,只不过继承了HttpServlet,实现了自己的init,service,destroy的方法而已。

    Servlet还是由Tomcat派生的系统类加载器类加载器加载到永久区(永久区在JDK8中已经不存在,被元数据区所替代,元数据区顾名思义就是类定义文件所存在的区域)

    Servlet被加载到永久区(元数据区)之后,便会被执行init,这样Servlet的初始化就完成了,接着请求过来的时候Servlet的service方法将被多次调用。

    绝大多数情况下,每个Servlet只会实例化一个对象出来,供容器调用,所以自定义的Servlet中不要使用成员变量保存和请求相关的状态,因为多线程处理多个请求,所以保存状态会被其他线程覆盖。除非使用ThreadLocal,使得每个线程保存的数据是私有的,不会被其他线程所读写到。但这也不能保证一个请求的数据就是安全的。

    如果一定要使用成员变量保存请求的状态,

    1.可以通过实现SingleThreadModel接口,这样就能保证每个请求创建一个Servlet,但是建议不要这样做,这样会导致Servlet容器频繁的创建Servlet对象。

    2.另外也可以把状态保存在HttpServletRequest中,因为每个请求都会对应一个Request,所以保存在这个位置算是最好的状态保存方式了。

    SpringMVC就是基于Servlet所开发的,所以SpringMVC开发的代码基本上可以移植到各个Servlet容器,而与之对应的有Play框架,Play框架完全放弃了Servlet, 底层使用netty来实现网络侦听,接收请求,解析Http协议,然后封装了请求派送给Handler中处理。完全实现了自己的一套Http请求处理方式。

    

    

    

© 著作权归作者所有

上一篇: Java-Android对象池
下一篇: java大牛博客
醉人的笑容你有没有
粉丝 3
博文 27
码字总数 26791
作品 0
崇明
私信 提问
Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet 对象。可以配...

ArlenXu
2015/01/24
179
0
Tomcat 容器与servlet的交互原理

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器...

watermelon11
02/25
231
0
Servlet生命周期与工作原理

Servlet生命周期分为三个阶段:   1,初始化阶段 调用init()方法   2,响应客户请求阶段  调用service()方法   3,终止阶段  调用destroy()方法 Servlet初始化阶段:   在下列时...

№贪↗恋♂
2012/08/08
164
0
客户端通过http协议 post xml型字符串数据到后台工作流程(请指点)

一.客户端流程 两种方法:1.通过httpurlconnection 2.通过apache开源的httpclient 代码示例为 urlconnection方法: StringBuilder responseBuilder = null;BufferedReader reader = null;Bu......

Enjoy前端开发
2013/08/23
687
0
[转]通俗易懂Tomcat中Servlet的生命周期,讲的非常详细

我在上一篇文章里详细的介绍了 HTTP协议工作的流程,其中最重要的就是如何理解HTTP请求头和HTTP响应头,现在在这里再来详细的说明Tomcat 容器(即Servlet 容器)到底是如何 管理Servlet的,S...

晨曦之光
2012/04/11
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

一篇文章教你轻松使用fastjson

前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y JSON相信大家对他也不陌生了,前后端交互中常常就以JSON来进行数据交换。而有的...

Java3y
37分钟前
4
1
分组功能(tapply,by,aggregate)和* apply系列

每当我想在R中做“ map” py任务时,我通常都会尝试在apply系列中使用一个函数。 但是,我从未完全理解它们之间的区别-{ sapply , lapply等}如何将函数应用于输入/分组输入,输出将是什么样...

javail
38分钟前
4
0
PHP环境搭建之单独安装

还在使用PHP集成环境吗?教你自定义搭建配置PHP开发环境,按照需求进行安装,安装的版本可以自己选择,灵活性更大。 目录: 1. 安装Apache 2. 安装PHP 3. 安装MySQL 4. 安装Composer 观看:h...

不冷的大叔
49分钟前
4
0
为什么JavaScript变量会以美元符号开头?

我经常看到JavaScript带有以美元符号开头的变量。 您何时/为什么选择以这种方式为变量添加前缀? (我不是在问您在jQuery和其他语言中看到的$('p.foo')语法,而是普通变量,例如$name和$orde...

技术盛宴
53分钟前
4
0
TCP 三次握手

https://my.oschina.net/u/4198159/blog/3141874

奋斗的小牛
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部