什么是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. kafka查询topic属性含义

    第一行,列出了topic的名称,分区数(PartitionCount),副本数(ReplicationFactor)以及其他的配置(Config.s) Leader:1 表示为做为读写的broker的 ...

  2. HDU 5375 Gray Code 动归

    题意:给你一串不确定的二进制码,其对应的格雷码的每一位有对应的权值,问转换成的格雷码的能取到的最大权值是多少. 思路:没有思路,乱搞也AC #pragma comment(linker, " ...

  3. Lambda表达式详细总结

    (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数量 ...

  4. asp.net 关于cookie的操作

    一.无子键或单级cookie 读写(1).写入: 第一种 HttpCookie cookie=new HttpCookie("User"); cookie.Value=" ...

  5. 安装SQL2008后需要打开的端口为 1433,4630

  6. win10下虚拟机安装XP系统 后无网卡的解决

    Windows 8提供了免费的虚拟机 Hyper-V, 但是在配置 Hyper-V虚拟机的时候经常遇到虚拟机无法上网,本文介绍的是: 原料   Windows 10 Hyper-V Windows X ...

  7. 解决电信或网通的DNS劫持

    大家有没有碰到访问一些不存在域名或者网站时,浏览器本应显示一个网址不存在之类的信息,但是因为现在很多ISP做了DNS劫持将不存在的域名或网址重定向到ISP的广告页面,烦人的狠.其实tomato可以解决 ...

  8. rman 备份并异机恢复

    1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...

  9. BZOJ 3210 花神的浇花集会 计算几何- -?

    题目大意:给定平面上的n个点,求一个点到这n个点的切比雪夫距离之和最小 与3170不同的是这次选择的点无需是n个点中的一个 首先将每一个点(x,y)变为(x+y,x-y) 这样新点之间的曼哈顿距离的一 ...

  10. es64 const

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...