文中也只是对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. [译]C++, Java和C#的编译过程解析

    1.1.1 摘要 我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,这样计算机才能执行高级语言编写的程序,在接下来的博文中,我们将介绍非托管和托管语音的编 ...

  2. 深入了解Java程序执行顺序

    Java中main方法,静态,非静态的执行顺序详解 Java程序运行时,第一件事情就是试图访问main方法,因为main相等于程序的入口,如果没有main方法,程序将无法启动,main方法更是占一个独 ...

  3. Atitit 实现java的linq 以及与stream api的比较

    Atitit 实现java的linq 以及与stream api的比较 1.1. Linq 和stream api的关系,以及主要优缺点1 1.2. Linq 与stream api的适用场景1 1. ...

  4. SQLServer数据库备份

    使用sql语句备份数据: BACKUP DATABASE 数据库名称 TO DISK = '存储备份文件的路径\备份名称.bak' WITH INIT 使用例子: BACKUP DATABASE Sh ...

  5. git回滚到任意版本

    git回滚到任意版本 先显示提交的log $ git log -3 commit 4dc08bb8996a6ee02f Author: Mark <xxx@xx.com> Date: We ...

  6. 在忘记root密码的情况下如何修改linux系统的root密码

    1.系统启动时长按shift键后可以看到如下界面:     2.找到 recovery mode 那一行, 按下[e]键进入命令编辑状态,到 linux /boot/vmlinuz-....... r ...

  7. 贪心算法-最小生成树Kruskal算法和Prim算法

    Kruskal算法: 不断地选择未被选中的边中权重最轻且不会形成环的一条. 简单的理解: 不停地循环,每一次都寻找两个顶点,这两个顶点不在同一个真子集里,且边上的权值最小. 把找到的这两个顶点联合起来 ...

  8. js高程读书笔记(1-3章)

    一.js简介 js是一种专为与网页交互而设计的脚本语言,由以下三个不同的部分组成: 1.ECMAScript,由ECMA-262(它规定了语言的这些组成部分:语法,类型,语句,关键字,保留字,操作符, ...

  9. php优点

    PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本 ...

  10. Android入门(四)UI-创建自定义控件

    原文链接:http://www.orlion.ga/441/ 一.引入布局 iphone应用顶部会有一个标题栏,我们可以模仿着做一个,但是如果我们的程序中很多个活动都需要这样的标题栏,如果 每一个活动 ...