什么是Servlet

Servlet是用java编写的运行在web服务器中的程序,因此它可以调用服务器端的类,它也可以被调用,它本身就是一个类。

Servlet的工作原理

servlet由web服务器引擎负责编译执行,当客服端浏览器访问servlet时,服务器将启动一个线程来响应,而并非CGI技术的进程。因此相对CGI方式占用的系统资源(特别是内存)比较少,具有较高的运行效率。

当web服务器中的servlet被请求访问时,次servlet被加载到java虚拟机中,在servlet中要接受http请求并作相应处理。由于servlet是在服务器端运行的,对客户完全透明,因此比java applet具有更好的安全性,当服务器有防火墙的保护时,servlet也受到防火墙的保护。

Servlet的生命周期

servlet是一种在web容器中运行的组件,有一个从创建到销毁的过程,这个过程被称为servlet生命周期,包括5个阶段。

  1. 类加载
    servlet是普通的Java类,编译后存储在web应用的WEB-INF\classes目录或者打包成jar文件存储在WEB-INF\lib目录中。在web应用程序启动或第一次访问时,应用程序的类加载程序将查找Servlet类文件,找到后将字节码加载到内存中。
  2. Servlet实例化
    Servlet加载到内存中后,容器将调用类的默认构造方法创建一个实例,因此编写Servlet类时要么提供一个默认构造方法,要么由编译器提供。
  3. Servlet初始化
    创建Servlet实例后,容器将调用init(ServletConfig)方法对Servlet初始化。然后调用init()方法,之后Servlet就完成了初始化。在Servlet生命周期中,init()方法仅被调用一次。
  4. 为客户提供服务
    在servlet初始化后,它就准备为客户提供服务。当容器受到对Servlet的请求后,容器根据请求的URL找到正确的servlet,容器首先创建两个对象,一个是请求对象,一个是相应对象。然后创建一个新的线程,在该线程中调用service()方法,同时将请求对象和相应对象作为参数传递给该方法。容器调用两个service()方法,一个从GenericServlet,之后调用HttpServlet类的service()方法。接下来service()将检查HTTP请求的类型(GET、POST等)类决定调用Servlet的doGet()方法或者doPost()方法。
  5. Servlet销毁
    当容器决定不再需要Servlet实例时,它将在servlet实例上调用destroy()方法,Servlet在该方法中释放资源,一旦该方法被调用,Servlet实例不能再提供服务。Servlet实例从该状态仅能进入卸载状态。在调用destroy()方法之前,容器会等待其他执行Servlet的service()方法的线程结束。
    一旦Servlet实例被销毁,它将作为垃圾被回收。如果web容器关闭,Servlet也将被销毁和卸载。

部署Servlet

要部署Servlet,首先要编译Servlet。编译Servlet就是执行javac命令,编译源代码文件.java为字节码文件.class。如果使用Eclipse或者其它可视化开发工具,无需使用javac来编译,在Eclipse中保存.java文件即会自动编译为.class字节码,并会按照类的层次结构生成对应的文件夹。

类编译后,把字节码文件复制到当前应用“WEB-INF\classes”目录下,即可使用了。这里注意Servlet如果属于某个包,则在“WEB-INF\classes”相应的目录中。

复制字节码文件后,还需要在web.xml文件中进行配置。在web.xml的<web-app></web-app>之间加入如下的语句:

<servlet>

<servlet-name>Servlet名称</servlet-name>

<servlet-class>Servlet类</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Servlet名称</servlet-name>

<url-pattern>Servlet名称访问路径</url-pattern>

</servlet-mapping>

其中,<servlet-name>中配置的是Servlet的名称(可以自己随便起,只要不和其他Servlet名称冲突都可以);<servlet-class>中配置的是Servlet指向的类,必须是完整的类名;<url-pattren>中配置的是web方式访问Servlet时相对于当前应用的路径(也可以自行设定,访问的时候用这个路径)。

在Servlet3.0中可以使用@WebServlet注解定义定义Servlet,而不需要在web.xml文件中定义。该注解属于javax.servlet.annotation包,因此在定义Servlet是应该使用导入语句:import javax.servlet.annotation.WebServlet;在定义Servlet类的前一行加上注解@WebServlet(name=“Servlet的名字”,urlPatterns=“访问Servlet的路径”)。

阅读笔记——Servlet的更多相关文章

  1. Hadoop阅读笔记(五)——重返Hadoop目录结构

    常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...

  2. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  3. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  4. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  5. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  6. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  7. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

  8. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

  9. Hadoop阅读笔记(四)——一幅图看透MapReduce机制

    时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...

随机推荐

  1. abap选择屏幕上的button

    1.背景:近期在看sap的一些abapDemo,看了一个比較好用的功能.分享一下.希望对用到的兄弟有帮助,主要功能是:在选择屏幕上弹出一个小窗体.放一些button在上面,触发不同button,会处理 ...

  2. 基于CC2530的ZigBee转以太网网关的设计与实现

    *已刊登至:<无线电>8月刊 物联网技术的实现中,无线技术是必不可少的部分. 近年无线技术的发展,将ZigBee推入人们的视线中.那么ZigBee是如何的一种技术呢?带着疑问.我查询了它的 ...

  3. url与图片

    http://restapi.amap.com/v3/staticmap?location=116.481485,39.990464&zoom=10&size=750*300& ...

  4. JavaScript 与Document

    JavaScript JavaScript   是脚本语言, 需要有宿主文件,  他的宿主文件是HTML文件. 可以写在head中  body中 和</heml>之后   一般写在< ...

  5. Facebook下载总结

    Facebook是美国的一个社交网络服务网站,至今注册用户已超越20亿,月活用户更是惊人的突破3亿. 这样庞大的一个社交类网站,每日产生的社交数据当然也是非常可观,而这些社交数据,更接近口语,所以是比 ...

  6. C++入门之HelloWorld

    1.在VS2017上新建一个C++空白项目,命名为hello 2.在资源文件下新建添加新建项main.cpp 3.在main.cpp中编写hello world输出代码 #include<std ...

  7. DotNetCore2.1 下Docker使用的学习

    [环节1:CentOS 安装Docker] Step1:通过 uname -r 命令查看你当前的内核版本 uname -r Step2:使用 root 权限登录 Centos.确保 yum 包更新到最 ...

  8. Flex与Java通信之HttpService

    flashbuilder4.6.myeclipse10 参考:http://www.cnblogs.com/lovemoon714/archive/2012/05/25/2517684.html 1. ...

  9. CCF模拟题 窗口

    窗口 时间限制: 1.0s 内存限制: 256.0MB   问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的 ...

  10. CCF模拟 I’m stuck!

    I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB   问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七 ...