文中也只是对Servlet和Web作简单的了解,有个初步的认识,深入的内容有待于进一步去研究。 T. T _ . _

Servlet

    Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一个Servlet 就是 Java 编程语言中的一个类。
    Servlet是一种独立于操作系统平台和网络传输协议的服务器端Java应用程序,运行于支持Java的应用服务器中,是Java Web技术的核心基础。Servlet与传统Java应用程序的最大不同在于,它不是从命令行启动的,而是由Java虚拟机的web服务器进行加载。
功能: 扩展基于HTTP协议的Web服务器的功能,交互式地浏览和修改数据,生成动态Web页面内容。

生命周期:Servlet加载 - -> 实例化 - -> 服务 - -> 销毁

  • [1] init():服务器装入Servlet时执行该方法,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
  • [2] service():Servlet的核心,负责响应客户的请求。每当一个客户机请求一个HttpServlet对象,该对象的Service()方法就要调用,并以一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法,默认的服务功能是调用与HTTP请求的方法相应的do功能。
  • [3] destroy():当Servlet对象退出生命周期,服务器端停止且卸载Servlet时执行该方法,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此在调用destroy()方法时,要确保这些线程已经终止或完成。

   注:在Servlet的生命周期中,仅执行一次init()和destroy()方法。

工作原理:

  • [1] 首先简单解释一下Servlet接收和响应客户请求的过程:客户发送一个请求,Servlet调用service()方法对请求进行响应。通过源代码看出,service()方法中对请求的方式进行了匹配,选择调用doGet, doPost等方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中没有doGet(),doPost()这些方法,HttpServlet中定义了这些方法,但是都返回error信息,所以每次定义一个Servlet时,都必须实现doGet()或doPost()这些方法。
  • [2] 每一个自定义的Servlet都必须实现Servlet接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet生命周期,分别是init(), service(), destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet, 实现了Servlet接口。HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以定义Servlet时只需继承HttpServlet即可。
  • [3] Servlet接口和GenericServlet不特定于任何协议,HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、响应ServletResponse 强转为HttpRequest 和 HttpResponse。

Servlet容器

主要任务:管理Servlet的生命周期。

    Servlet 与 Servlet 容器相互依存 ,彼此又相互独立发展,接口是连接Servlet和Servlet容器的关键,从技术角度来说是为了解耦,通过标准化接口来相互协作。

创建Servlet对象:

  • [1] Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,并将ServletConfig对象作为参数来调用Servlet对象的init()方法。
  • [2] Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet对象的service()方法。

    在 Web 应用程序中,一个 Servlet 在一个时刻可能被多个用户同时访问。这时 Web 容器将为每个用户创建一个线程来执行 Servlet。如果 Servlet 不涉及共享资源的问题,不必关心多线程问题。但如果 Servlet 需要共享资源,需要保证 Servlet 是线程安全的。

参考:
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html
http://www.ibm.com/developerworks/cn/java/j-lo-servlet/

与 Applet 比较


Web

Web容器:管理和部署Web应用,更多的是跟基于HTTP的请求打交道。
区别于应用服务器:可以部署EJB应用,可以实现容器管理的事务,更多的跟数据库、其它服务打交道。

关于 Servlet 和 Web的更多相关文章

  1. Java Servlet与Web容器之间的关系

    自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...

  2. servlet和web容器之间的关系

    Java是一种动态加载和运行的语言.也就是说当应用程序持有一个类的地址(CLASSPATH)和名称(包名和类名)的情况下,可以在程序运行期 间任何时候加载这个类,并创建和使用该类的对象.Servlet ...

  3. Servlet中Web.xml的配置详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  4. Servlet中web.xml 以及 <url-pattern>总结

    web.xml中添加Servlet配置信息 使用Eclipse创建Servlet,会自动的在WEB-INF下的web.xml中声明,但是有的时候需要我们手动的写入配置信息,以下就是Servlet在we ...

  5. 支持JSP和Servlet的Web服务器

    支持JSP和Servlet的Web服务器 1.Tomcat 服务器 目前非常流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型.轻量级的支持JSP和Servle ...

  6. 各种容器与服务器的区别与联系 Servlet容器 WEB容器 Java EE容器 应用服务器 WEB服务器 Java EE服务器

    转自:https://blog.csdn.net/tjiyu/article/details/53148174 各种容器与服务器的区别与联系 Servlet容器 WEB容器 Java EE容器 应用服 ...

  7. Eclipse创建第一个Servlet(Dynamic Web Project方式)、第一个Web Fragment Project(web容器向jar中寻找class文件)

    创建第一个Servlet(Dynamic Web Project方式) 注意:无论是以注解的方式还是xml的方式配置一个servlet,servlet的url-pattern一定要以一个"/ ...

  8. Servlet中Web.xml的配置详解(一)

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...

  9. Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签

    本文转载自 陈蒙的博客 最近在学习JavaEE轻量级框架,对于servlet-mapping中的url-partten标签以及网页访问时的执行顺序不是很清楚,搜索了很多遍终于找到了这篇博文(搜索也是个 ...

随机推荐

  1. jQuery实现放大镜效果

    1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向 ...

  2. IOS 公共类-MyDateUtil 日期处理Util

    IOS 公共类-MyDateUtil 日期处理Util 此为处理日期的公共类.适用IOS6+ .h文件: #import <Foundation/Foundation.h> //适用 IO ...

  3. 每天一个linux命令(59):rcp命令

    rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中. 1 ...

  4. 爱上MVC~在Views的多级文件夹

    回到目录 在MVC里,你的控制器对应的视图一般是在Views目录,而如果希望在Views里再分几个模块文件夹默认是不允许的,我们需要做一下设置,就可以实现Views下的多次文件夹层次了,例如,我们有产 ...

  5. 爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文

    回到目录 我们知道mvc里有一些过滤器,AuthorizeAttribute用来做授权,一般在用户授权方面可以使用它,当使用没有登陆,我们直接跳到登陆页,这是没有问题的,可我要说的是,当用户对某个Ac ...

  6. [数据库事务与锁]详解八:底理解数据库事务乐观锁的一种实现方式——CAS

    注明: 本文转载自http://www.hollischuang.com/archives/1537 在深入理解乐观锁与悲观锁一文中我们介绍过锁.本文在这篇文章的基础上,深入分析一下乐观锁的实现机制, ...

  7. Atitit USRqc62204 证书管理器标准化规范

    Atitit USRqc62204 证书管理器标准化规范 /atiplat_cms/src/com/attilax/cert/CertSrv4mv.java /** * */ package com. ...

  8. rabbitmq消息队列——"Hello World!"

    RabbitMQ 一."Hello World!" 1.简介: RabbitMQ是一种消息中间件,主要思想很简单:接收消息并转发.你可以将它设想为一个邮局:你往里面发送邮件并确保邮 ...

  9. 常用 sql

    一. sql 多个字段拼接 mysql:     1. concat函数  如果连接串中存在NULL,则返回结果为NULL:        例如: select concat('1','2','3') ...

  10. Linux快速入门03-系统管理

    这部分将涉及常用的各类linux命令和一些系统高级管理特性,尤其是shell script的创建,这部分在系统自动化运维时会很有作用. Linux系列文章 快速入门系列--Linux--01基础概念 ...