Servlet探秘
学习servlet,最重要的就是理解servlet下面四个点:
1.了解Servlet API的常用接口和类
2.掌握Servlet的生命周期
3.掌握Servlet的部署和配置
4.会使用Servlet处理用户请求( get, post)
用过jsp的应该知道,servlet技术是诞生在jsp之前的,servlet是一个 Java程序,是在j2ee服务器上运行以处理客户端求并做出响应的程序.
通过查阅api可以知道,servlet和其子接口genericservlet都是很少用到的,通过文档可知它有个抽象类HttpServlet,我们每次用它的时候必须实现它,既自己写个类继承自这个HttpServlet类
在文档中对其生命周期的描述是:Servlet生命周期:
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.
即先执行构造函数,然后执行init()函数,再执行servic函数,再执行doGet函数:
package com.yc.web.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LifeServlets extends HttpServlet{
public LifeServlets(){
System.out.println("构造方法");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("get方法");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("service方法");
super.service(req, resp);
}
@Override
public void destroy() {
System.out.println("destroy方法");
super.destroy();
}
@Override
public void init() throws ServletException {
System.out.println("init()方法");
super.init();
}
}
配置代码:
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.yc.web.servlets.LifeServlets</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>life</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
通过在不同浏览器执行这段代码可知,servlet是通过单例模式实现的,即它只创建一个实例
该模式同一时刻只有一个实例,不会出现信息同步与否的概念。
若多个用户同时访问一个这种模式的页面,
那么先访问者完全执行完该页面后,后访问者才开始执行。
所以,一旦servlet的容器关闭(这里是tomcat),就会执行destroy()方法。
第一次访问: 构造 -> init() -> service -> doGet()/doPost()
第二次访问: service -> doGet()/doPost()
销毁:关闭容器. -> destroy()
servlet是单实例的. 线程不安全的.
Servlet探秘的更多相关文章
- 探秘Tomcat——一个简易的Servlet容器
即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...
- 探秘Tomcat——连接器和容器的优雅启动
前言: 上篇<探秘Tomcat——启动篇>粗线条的介绍了在tomcat在启动过程中如何初始化Bootstrap类,加载并执行server,从而启动整个tomcat服务,一直到我们看到控制台 ...
- 探秘Tomcat——启动篇
tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container.具体请看下图: 从图中可以看出 a. 高亮的两块是Conne ...
- 探秘Tomcat——从一个简陋的Web服务器开始
前言: 无论是之前所在实习单位小到一个三五个人做的项目,还是如今一个在做的百人以上的产品,一直都能看到tomcat的身影.工作中经常遇到的操作就是启动和关闭tomcat服务,或者修改了摸个java文件 ...
- Spring MVC 原理探秘 - 容器的创建过程
1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...
- SpringMvc请求处理流程与源码探秘
流程梳理 dispatcherServlet作为前端控制器的主要作用就是接受请求与处理响应. 不过它不是传统意义上的servlet,它在接受到请求后采用转发的方式,将具体工作交给专业人士去做. 参与角 ...
- Spring MVC 原理探秘 - 一个请求的旅行过程
1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...
- DWR原理探秘
DWR原理探秘 DWR(Direct Web Remoting)远程Web命令;是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可 ...
- SpringBoot 应用程序启动过程探秘
概述 说到接触 SpringBoot 伊始,给我第一映像最深的是有两个关键元素: 对照上面的典型代码,这个两个元素分别是: @SpringBootApplication SpringApplicati ...
随机推荐
- 手动写一个Servlet
一.做一个类,派生自HttpServlet 1.导两个包 javax.servlet.*; javax.servlet.http.* 2.重写两个方法doGet,doPost 打开tomcat中的se ...
- linx建立用戶&組
groupadd test 创建test用户组 useradd user1 创建user1用户 passwd user1 ...
- ios自定义UIButton内部空间Rect
- jquery serialize 和 console 漫谈
serialize 获取表单中所有的数据 今天刚刚发现这个神奇的东西,顿时感觉高大上了很多,比以前一个一个用 val()取出来值 ,然后再 ajax 方便多了 代码示例 $(document). ...
- IIS URLReWrite URL 重写模块 下载地址
https://www.microsoft.com/zh-cn/download/details.aspx?id=7435
- spring mvc 引用 jasper JasperReportsHtmlView的nullpx图片问题
spring mvc 引用 jasper JasperReportsHtmlView的nullpx图片问题 参考:http://stackoverflow.com/questions/1168633 ...
- jQuery 判断checkbox是否被选中 4种方法
下午写JS验证,有一个需求需要判断 checkbox是否被选择,查阅相关资料后,总结以下4种方法,分享给大家. <!DOCTYPE html> <html lang="en ...
- SQL递归查询知多少
最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图.数据库中保持的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否为根节点 ...
- Form开发:字段关系-消息-快速编码-参数和系统变量
1.字段关系 清除依赖字段:在挂LOV的名称字段的WHEN-VALIDATE-ITEM调用:app_field.clear_dependent_fields 设置字段依赖:在主字段的WHEN ...
- [css]《css揭秘》学习(二)-多重边框
一.box-shadow属性 box-shadow除了生成投影,还可以用来生成边框:它接受第4个值作为扩张半径,0的x轴偏移+0的y轴偏移+0的模糊值+0的扩张半径,得到的显示效果和边框是一样的:但是 ...