当前位置: 首页 > 编程日记 > 正文

servlet必知细节(一)

servlet必知细节(一)

今天复习了一下servlet,有过一些编程经验后,与最初学习servlet相比,对servlet理解的角度不同了,最初只是学习了如何写一个servlet,api怎么用,现在从更深处了解了servlet。

1.servlet接口实现关系

HttpServlet继承GenericServlet,GenericServlet实现Servlet接口。

2.生命周期方法

其中Servlet接口有几个生命周期方法:

init(),service(),destroy()为三个生命周期方法(life-cycle methods),所谓生命周期方法,就是在Servlet生命周期过程中,某个特定阶段必定要执行的方法。
查看Servlet API,可以看到这三句话:
1.The servlet is constructed,then initialized with the init method.
2. Any calls from clients to the service method are handled.
3.The servlet is taken out of service,then destroyed with the destroy method, then garbage collected and finalized.
主要可以这么理解那三句话:
通常情况下,tomcat启动时,并没有立刻创建Servlet对象,而是客户端第一次访问这个servlet所配置的映射目录时,由tomcat构造servlet对象,调用init方法,同时执service方法。以后再访问,不会执行init方法,直接调用service,当tomcat重启或者正常关闭时调用destory方法。那么,init为客户端第一次访问时所用,service为客户端每次访问时所用,并且要知道每调用一次servlet对象的service方法,就创建一个了新线程destory为tomcat正常关闭时所调用。
通过上面描述我们可以知道,Servlet只有在第一次访问的时候创建,以后不创建了,那么Servlet就是单例的了。Servlet是单例多线程
我们知道,我们写一个servlet,并不需要实现顶层接口Servlet,只需要继承HttpServlet,并且实现doGet和doPost方法即可了。
Servlet接口的提出,就是为了解决基于请求-响应模型的数据处理,并没有涉及HTTP协议及相关API,GenericServlet是 实现接口的通用Servlet,也没有提供与 HTTP协议相关 API ,而在HttpServlet中引入与 协议相关 API 。

3.servlet的单例多线程使用注意事项

servlet的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。 

我们写的代码本身就是多线程的,每一个请求有servletRequest对象来接受请求,由servletResponse对象来响应该请求,同一个servlet的多个请求到来时,可能发生多线程同时访问同一资源的情况,数据可能变得不一致,可能会因为线程安全问题发生错误,解决方法如下: 
1、同步对共享数据的操作 
 使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段,在本论文中的Servlet可以通过同步块操作来保证线程的安全。 
2、避免使用实例变量(成员变量) 
   使用实例变量会造成线程安全问题,只是这个问题在高并发的情况下更容易体现出来,其他时候这个问题依然存在,只是不一定体现,多线程并不共享局部变量,所以我们要尽可能的在servlet中使用局部变量,所以只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。 




备注:如果没有配置loadOnStartup,那么Servlet是客户端第一次访问这个Servlet时创建,如果配置了,则tomcat启动时就创建。

上面学习,如果有错误,希望大家提出,共同提高,谢谢。



相关文章:

办公室“暧昧”的几种结局。

暧昧结局一:以消散结尾 外贸公司职员小雨 p: [( I J( n, i/ L( L 那是我刚来这家公司的时候,参加面试时我就关注到其中一个面试我的男人长得不错,言谈举止也都很儒雅,所以第一面就留下了深刻印象。等到我被录取正式上班后…

Matlab与机器学习-- 数据的归一化

本文介绍了Matlab对数据归一化的处理函数mapminmax。

ASP.NET中的母版页

ASP.NET中的母版页 添加一个"母版页",使用<asp:ContentPlaceHolder>挖坑,新建的母版页已经自动设置了两个ContentPlaceHolder创建使用母版页的具体页面,WebSite是新建"Web窗体"的时候勾选"选择模板页",WebApplication是新建"Web内容窗…

servlet必知细节(二)--servlet执行过程

servlet必知细节(二)--servlet执行过程 我们知道&#xff0c;servlet没有main函数&#xff0c;那么&#xff0c;servlet是怎么调用的呢&#xff1f;实际上&#xff0c;servlet 是由tomcat调用的&#xff0c;tomcat调用servlet程序执行。由调用栈可以看到&#xff0c;当一个请求…

workerman源码分析之启动过程

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/CpNice/p/4714182.html 转载于:https://my.oschina.net/yonghan/blog/898076

MD5加密方法

/**//// <summary>/// 16位MD5加密方法/// </summary>/// <param name"str">原文</param>/// <returns>密文</returns>publicstaticstringgetMd5(stringstr){ MD5CryptoServiceProvider md5 new MD5CryptoServiceProvider()…

如何教计算机认识手写数字(上)

本图文介绍了一种简单的教会计算机识别手写数字的方法。

servlet必知细节(三)-- DefaultServlet

servlet必知细节&#xff08;三&#xff09;-- DefaultServlet 缺省servlet&#xff1a;org.apache.catalina.servlets.DefaultServlet&#xff0c;作用是处理其他servlet处理不到的请求 我们知道&#xff0c;在我们工程的web.xml中&#xff0c;会配置servlet映射&#xff0c…

第五篇:Visual Studio 2008 Web开发使用的新特性

第五篇&#xff1a;Visual Studio 2008 Web开发使用的新特性 本篇翻译自MSDN。 .NET Framwork 3.5与Visual Studio 2008 包含很多新特性。AJAX的Web开发人员支持与综合查询语言&#xff08;LINQ&#xff09;是其中最重要的更新。此外还包含一些新的服务器端控件以及客户端对象库…

Jenkins使用Publish Over FTP Plugin插件上传FTP详解

一、安装插件【Publish Over FTP】 二、在【系统管理】->【系统设置】->【Publish over FTP】->点击【增加】按钮&#xff0c;增加一个要连接的FTP&#xff1a; FTP Server Name&#xff1a;FTP名字 Hostname&#xff1a;主机IP或者域名 Username&#xff1a;ftp登陆用…

Matlab与数据结构 -- 求向量或矩阵的最大值

本图文介绍了Matlab中求向量或矩阵最大值的方法。

web应用的绝对路径和相对路径

经常写web工程&#xff0c;就会涉及很多路径问题&#xff0c;今天复习下绝对路径和相对路径&#xff0c;以提醒自己下次不要以为路径问题头疼。 1.绝对路径和相对路径 相对路径&#xff1a;helloworld ./helloworld ../helloworld 这样的都是相对路径绝对路径&…

IE7外觀優化

众所周知&#xff0c;在Windows Vista的默认设置中&#xff0c;传统的文件菜单消失了&#xff0c;大部分过去通过菜单执行的任务如今由工具栏提供&#xff0c;或者在相应选择项的右键属性里。尽管这种改变使页面布局更简洁&#xff0c;但似乎许多用户并不认可或者至少说并不习惯…

使用GPUImageView录制视频保存后出现绿边

2019独角兽企业重金招聘Python工程师标准>>> 最近在使用GPUimageView做视频录制功能&#xff0c;录完后发现保存的视频右边有绿边&#xff0c;觉得好奇怪呀&#xff0c;为什么会这样呢&#xff1f;于是上网找资料&#xff0c;发现了这么一个说法&#xff1a;GPU和视…

Matlab与数据结构 -- 搜索向量或矩阵中非零元素的位置

本图文介绍了Matlab中搜索向量或矩阵中非零元素位置的方法。

jdk7新特性学习笔记

jdk7新特性学习笔记 从网络down了视频看&#xff0c;记录下学过的东西。1.二进制字面量 JDK7开始,可以用二进制来表示整数&#xff08;byte,short,int和long&#xff09;&#xff0c;语法&#xff1a;在二进制数值前面加 0b或者0B例如&#xff1a;int x 0b11112.数字字面量可以…

2008开年大礼:《Application = Code + Markup》中文版面世

Charles Petzold的又一部经典力作《Application Code Markup》中文版终于要面世了。成为2008 开年大礼。相信有很多对WPF有兴趣&#xff0c;但又苦于没有经典书籍来支撑的朋友都一直在期待着这本书的中文版上市&#xff0c;博文视点让这一期待成为现实。 与大家一样都很兴奋。…

近一个月的学习总结(4.8—5.12)

Java-se基础知识的学习已经告一段落&#xff0c;对自己这一个月的知识体系做一个大致的总结&#xff1a; 1.Java语言基础&#xff08;基础完成&#xff09; 2.面向对象基础&#xff08;封装、继承、多态&#xff09;&#xff08;基础完成&#xff09; 3.抽象类、接口&#xff0…

利用BP神经网络教计算机识别语音特征信号(代码部分SS)

本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54094884

springmvc配置DispatcherServlet拦截url注意事项

<!-- 前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 加载springmvc配置 --><init-param><param-name>contex…

sql server面试题

本面试题由2344095 (有心人)整理, 由ashzs((可以包含中文字符)) 解答,感谢二位!1.磁盘柜上有14块73G的磁盘&#xff0c; 数据库为200G 大小包括日志文件&#xff0c;如何设置磁盘&#xff08;要说明这14磁盘是怎么用的&#xff09;&#xff1f;2.有两服务器群集&#xff0c;分别…

利用BP神经网络教计算机识别语音特征信号(代码部分SSR)

本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54094884

JDBC使用步骤

JDBC编程步骤&#xff1a; 一、注冊载入JDBC驱动程序&#xff1b; 注冊载入驱动driver。也就是强制类载入&#xff1a;其注冊载入JDBC驱动有三种方法&#xff1a; 方法一&#xff1a;Class.forName(DriverName)&#xff1b; 当中DriverNameDriver包名。Driver类名&#xff1b;…

在mac下搭建java开发环境

刚刚从windows系统转到使用mac系统&#xff0c;感觉不是特别熟悉&#xff0c;需要一定的适应时间。下面简单介绍一下mac下搭建基本的java开发环境。 1.安装jdk 安装jdk1.7后&#xff0c;发现不需要进行环境变量配置&#xff0c;直接在terminal中就能使用java和javac命令了。j…

IT项目管理入门知识

转载于:https://www.cnblogs.com/sophia194910/p/6854462.html

什么是BP神经网络?

BP人工神经网络原理

mac下的intellij idea常用快捷键

最近用mac进行开发&#xff0c;纪录下mac下的intellij idea的快捷键&#xff0c;方便以后查询。 command点到具体方法 查看调用 commandN查找类 commandshiftN查找文件 commandR替换 commandY 删除行 commandX剪切删除行 commandw 用光标圈起代码 commandD复制一行 com…

struct和union的大小问题

union类型以其中size最大的为其大小struct类型以其中所有size大小之和为其大小 #include<iostream>usingnamespacestd;intmain(){ typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DATE max; cout<…

利用BP神经网络教计算机识别语音特征信号(代码部分SL)

本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54094884

Redis相关命令

一、命令示例 1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX: #在Shell命令行下启动Redis客户端工具。/> redis-cli#清空当前选择的数据库&#xff0c;以便于对后面示例的理解。redis 127.0.0.1:6379> flushdbOK#添加String类型的模拟数据。redis 127.0.0.1:6379> set myk…