什么是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. 用motion实现家庭视频监控

    需求?当然不是为了艳照.你们这些猥琐的人类! 毕竟家里总会有没人的时候,出门走到半路忘记煤气灶是不是关了,还得回去看看. 在这个科技以人为本的时代,当然应该是拿出智能手机联网看看啦.还有万一有人闯空门 ...

  2. HDU 5375 Gray Code 动归

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

  3. eclipse启动Tomcat加载项目时报内存溢出错误解决办法

    在eclipse中点击Window->Preferences打开全局属性设置对话框,如下图所示设置Tomcat运行时的JVM参数,添加这段JVM设置:-Xms256M -Xmx768M -XX: ...

  4. MySql免安装版绿化版安装配置,附MySQL服务无法启动解决方案

    整理于:https://www.cnblogs.com/cenwei/p/6249856.html      我下载的MySQL版本是:mysql-5.6.15-winx64 一.解压文件 下载好My ...

  5. css3 列表图片hover左右滚动效果

  6. 在Ubuntu14.04中安装Py3和切换Py2和Py3环境

    前几天小编给大家分享了如何安装Ubuntu14.04系统,感兴趣的小伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统.今天小编给大家分享一下在Ubuntu14.04系 ...

  7. 现实人脸识别性别之路----弄清楚train_test_split函数

    '''train_test_split(trian_data,trian_target,test_size,random_state)各个参数表示的意义:trian_data表示被划分的样本特征集tr ...

  8. tr---对来自标准输入的字符进行替换、压缩和删除。

    tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大. 语法 tr(选项)(参数) 选项 -c或——complerment:取代 ...

  9. nagios插件之登陆防火墙实现session监控

    ssh_firewall_session.sh -- 登陆防火墙并运行dis session statistics firewall_check_sessions.c -- 调用上面脚本.过滤出ses ...

  10. 如何分解json值设置到text文本框中

    <td><input type="text" id="name11"></td> //4设置访问成功返回的操作 xhr.on ...