由来

在解说Servlet之前须要先介绍一个词语CGI即Common GatewayInterface是通用网关接口的意思。它提供一个计算机程序同HTTP协议或者WWW服务的接口,也就是人机交互接口的意思。

Web应用执行在server上,client的请求。刚開始。是通过CGI程序实现数据在Web上的传输,可是对于client做出的每一个请求,必须创建CGI程序的一个新实例,这将占用大量的内存,正是为了解决问题,我们的Servlet应运而生。

Servlet是java编写的一个应用程序,在server上执行。处理请求的信息并将其发送到client,所以它的名字的由来是Server+Applet。对于client的多次请求,Servlet的实例仅仅须要创建一次。因此节省了大量的内存,Servlet在初始化后即驻留在内存中。因此每次作用请求时无需再实例了。

应用体系结构

Servlet容器将Servlet动态的载入到server上,HTTPServlet使用HTTP请求和HTTP响应与client进行交互。因此Servlet容器支持请求和对应所用的HTTP协议。Servlet应用程序体系结构如图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvendrNjI2NTQyNDE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上图说明client对Servlet的请求首先会被HTTPserver接收。HTTPserver将客户的HTTP请求提交Servlet容器,Servlet容器调用对应的Servlet。Servlet作出的响应传递到Servlet容器,并进而由HTTPserver将响应传输给client。HTTPserver提供静态内容并将全部client对Servlet作出的请求传递到Servlet容器。

在上一篇文章中我们了解过omcat。它是一个小型的轻量级应用server。在中小型系统和并发用户不是非常多的情况下被广泛应用。和IIS、Apache一样,具有处理HTML的功能,同一时候我们也学过,它还是一个Servlet和JSP的容器。对于上图中。Tomcat就是HTTPserver和Servlet容器两个部分的组合。

生命周期

Servlet的生命周期例如以下图:

Servlet执行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。

载入和实例化

Servlet容器负责载入和实例化Servlet。这项操作通常是动态运行的。

。当Servlet容器启动时。或者在容器检測到需要这个Servlet来响应第一个请求时,创建Servlet实例。

以下我们介绍下。容器是怎样动态实例化Servlet的。当Servlet容器启动后。它必需要知道所需的Servlet类在什么位置,Servlet容器通过类载入器载入Servlet类,成功载入后。容器创建Servlet的实例。由于容器是通过Java的反射API来创建Servlet实例。调用的是Servlet的默认构造方法(即不带參数的构造方法)。所以我们在编写Servlet类的时候,不应该提供带參数的构造方法。

初始化

容器将调用Servlet的init()方法初始化这个对象(在web.xml中<servlet>标签下配置)。

初始化的目的是为了让Servlet对象在处理client请求前完毕一些初始化的工作,如建立数据库的连接。获取配置信息等。对于每个Servlet实例。init()方法仅仅被调用一次。

请求处理

Servlet容器调用Servlet的service()方法对请求进行处理,传递请求和响应对象作为參数,service()方法获得关于请求对象的信息,处理请求。訪问其他资源,获得须要的信息。service()方法使用响应对象的方法。将响应传回Server。终于到达client。

service()方法可能激活其他方法以处理请求。如doGet()或doPost()或程序猿自己开发的新的方法。

服务终止

当容器检測到一个Servlet实例应该从服务中被移除的时候(一般当Server关闭时),容器就会调用实例的destroy()方法。以便让该实例能够释放它所使用的资源。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。

假设再次须要这个Servlet处理请求。Servlet容器会创建一个新的Servlet实例。

注意

在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都仅仅进行一次。当初始化完毕后。Servlet容器会将该实例保存在内存中,通过调用它的service()方法。为接收到的请求服务。

总结

使用Servlet会使我们开发出的系统可移植性更好、使我们的系统性能更加优越、也有效的保障了安全性的问题。关于Servlet在项目中的使用。在兴许的文章中我们会继续介绍。

Java Drp项目实战——Servlet的更多相关文章

  1. JAVA Drp项目实战—— Unable to compile class for JSP 一波三折

    交代下背景.电脑系统是64位的,用的是64位的Tomcat.安装是32位的Myeclipse10,java环境也是32位的.Tomcat在開始启动时会报这样一个错误,"Can't load ...

  2. Java Drp项目实战——Drp知多少

    是什么 Drp是Distribution Resource Planning的缩写,意思是分销资源计划.它是用来管理企业的执行于Internet上的分销网络的系统,是以商业流程优化为基础,它的核心是销 ...

  3. Java Drp项目实战——Web应用server

    引言 Web应用server如今非常多人都在用,但是究竟什么是Web应用server呢,它与Webserver有什么关系,它与应用server又是什么关系,它是他们两种中的当中一种,还是简单的两种se ...

  4. Java Drp项目实战—— 环境搭建

    概要 我们要開始一个关于Java项目的开发,那么我们就须要搭建一个关于Java开发的环境,那么搭建一个Java开发环境,都须要些什么东东,又有些什么注意事项呢. 过程 我先将我搭建Java环境的软件和 ...

  5. Java高级项目实战03:CRM系统数据库设计

    接上一篇:Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍 欢迎点击回顾,接下来我们说说 CRM系统数据库设计. 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一 ...

  6. Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍

    本文承接上一篇:Java高级项目实战之CRM系统01:CRM系统概念和分类.企业项目开发流程 先来CRM系统结构图: 每个模块作用介绍如下: 1.营销管理 营销机会管理:针对企业中客户的质询需求所建立 ...

  7. Java Web项目实战第1篇之环境搭建

    写在前面的话 从今天开始一个Java Web实战项目,参考自 http://blog.csdn.net/eson_15/article/details/51277324 这个博客(非常感谢博主的分享精 ...

  8. IDEA与Tomcat创建并运行Java Web项目及servlet的简单实现

    创建Web项目 1. File -> New Project ,进入创建项目窗口 2.在 WEB-INF 目录下点击右键, New -> Directory ,创建  classes 和  ...

  9. Myeclipse 搭建Java Web 项目:Servlet 《二》

    上一节,我们使用myeclipse部署了web项目,但那部署的为静态的web项目,下面我们来学习编写动态的web项目,编写动态项目必须要用到的为:servlet. Servlet是由sun公司命名的, ...

随机推荐

  1. Firefox访问https的网站,一直提示不安全

    http://mozilla.com.cn/thread-374897-1-1.html 要激活此功能步骤如下: 在地址栏键入"about:config" 点击“我了解此风险” 在 ...

  2. 20.发送http请求服务 ($http)

    转自:https://www.cnblogs.com/best/tag/Angular/ 服务从代码直接与服务器进行交互,底层是通过实现,与中http服务从AngularJS代码直接与Web服务器进行 ...

  3. POJ 3257 DP

    题意: 思路: 用vector存上本出发点能到的地方&成本&有趣指数(用结构体保存) 然后DP就好了 f[i][j]表示到了i 成本为j的有趣指数最大是多少 f[vec[i][k].e ...

  4. HTTP协议学习,post于get;用Fiddler测试请求

    转载 收藏于网络 1.简介: HTTP协议:Hypertext transfer protocol 超文本 传输 协议 它是TCP/IP协议集中的一个运用层协议. 用于定义WEB浏览器和WEB服务器之 ...

  5. xfce4 + docky ,docky 上面那透明的一条黑色横线去掉方法

    在安装完Debian 9 + xfce4桌面后 ,添加docky启动后,会在docky 上面有一条黑色横线看起来非常不舒服. 去掉方法:设置管理器->窗口管理器微调->合成器->取消 ...

  6. 自写的开发框架,胜于官方的clientAPP的实战开发。(已开源)

    已开源,欢迎大家fork 小弟github地址为https://github.com/10045125/vanda 好久没写博客了,这段时间主要是要做的事情太多.如今接触android有段时间了.非常 ...

  7. Cocos2d-x学习笔记(20)(TestCpp源代码分析-4)

    本章主要介绍testResource.h与tests.h,当中tests.h主要是存放全部用到的头文件.与菜单相相应的宏定义以及菜单数组,testResource.h主要用是资源文件定义. //tes ...

  8. vim-normal多行操作命令的使用

    命令行命令-<:normal>这个命令可以重复上一个操作.他其实就跟.命令的效果查不到.不同的是,他可以把.的效果,作用于你用可视模式下的多行.例如,如果你想在下面的文字里在每一行加一个; ...

  9. javascript 将时间戳格式化

    <script>function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().repl ...

  10. C#与Linux守护进程

    用C#编写Linux守护进程   如果要在Red Hat Enterprise Linux上将.NET Core进程作为后台进程运行,则可以创建自定义systemd单元.今天我将为.NET Core编 ...