要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力。虽然它们是彼此依存的,但是又相互独立发展,这一切都是为了适应工业化生产的结果。从技术角度来说是为了解耦,通过标准化接口来相互协作。既然接口是连接 Servlet 与 Servlet 容器的关键,那我们就从它们的接口说起。
常用Web服务器。 动态网页技术。 Tomat简介。 HTTP协议简介。 Web Application简介。 Servlet简介。 第一个Servlet程序。 Servlet生命周期。 Cookie。 Session。 Application、Page、Request。 Filter、Listener。 Servlet线程安全问题。
Servlet是服务器端的Java小程序。用于响应客户机的请求。 在默认情况下,Servlet采用一种无状态的请求-响应处理方式。Servlet代码的主要作用是为了增强Java服务器端功能。
Servlet:Java的服务器端小程序,是使用JAVA实现的CGI程序。传统的CGI程序使用的是多进程的处理方式,而使用JAVA实现的CGI程序与传统CGI相比,使用的是多线程的处理方式。
简介:Servlet是JavaEE规范体系的重要组成部分,也是Java开发人员必须具备的基础技能,Servlet3.0是Servlet规范的最新版本。本文主要介绍了Servlet3.0引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为JavaEE6规范体系中一员,随着JavaEE6规范一起发布。该版本在前一版本(Servlet2.5)的基础上提供了若干新特性用于简化Web应用的开发和部署。其中有几项特性的引入让开发者感到非常兴奋,同时也获得了Java社区的一片赞誉之声:异步处理支持。
Servlet的生命周期是由servlet的容器来控制的。分为3个阶段:初始化阶段、运行阶段、销毁阶段。
世界上的各地区都有本地的语言。地区差异直接导致了语言环境的差异。在开发一个国际化程序的过程中,处理语言问题就显得很重要了。
servlet生命周期中只有一个对象,即一次实例化后就可以一直处理请求,因为一次实例化后就已经把.Class文件Load到内存中了。这也说明只有在servlet生命周期中没有对象时才调用destroy()方法。而且一个servlet生命周期中只有一次初始化,即只调用一次init(servletconfig)方法。
Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。下面将介绍几种常用的监听器,以及它们都适合运用于那些环境。
Catalina由许多组件构成。当Catalina启动时,那些组件也需要启动。当前Catalina停止时,那些组件也必须拥有释放资源的机会。例如,当容器停止工作时,它必须调用它内部的所有Servlet的destroy方法并且session管理器必须将session对象保存在备用储备中。一个使组件启动和停止始终如一的措施是让当前组件实现org.apache.catalina.Lifecycle接口,一个实现了这个接口的组件可以引起下列的事件:BEFORE_START_EVENT、START_EVENT、AFTER_START_EVENT、BEFORE_STOP_EVENT、STOP_EVENT、AFTER_STOP_EVENT。前三个事件在组件启动时会被激活,后三个事件在组件停止时会被激活。事件是通过org.apache.catalina.LifecycleEvent定义,当然,如果想让Catalina组件可以激活一个事件,那么你必须编写此事件的监听器。监听器通过org.apache.catalina.LifecycleListener定义。<br> 这一章将谈论Lifecycle、LifecycleEvent、LifecycleListener这三种生命周期接口。并且,我们也会讲解一个叫做LifecycleSupport的实用类,这个类为组件提供了一种简单的方法去激活生命周期事件并且分配声明周期监听器。在这一章,我们将使用一些实现了Lifecycle接口的类去建立一个应用程序,这个应用程序是基于在第五章的第二个应用程序的。
容器是处理某个Servlet接收到的请求并且将此Servlet做出的响应返还给web客户端的单元,org.apache.catalina.Container接口定义了容器的规范并且这里有四种容器:Engine,Host,Context,Wrapper。这一章讲述了Context和Wrapper,其他的两种容器留在第13章讲述。这一章通过对容器接口的讨论开始,然后讲述一个容器内的各个部分的运行顺序,然后我们查看Wrapper和Context接口。在这一章的结尾,将有两个各自演示简单的Wrapper和简单的Context的例子。
ServletContext是servlet与servlet容器之间的直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个servletContext对象。每个web应用有唯一的servletContext对象。同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。
Servlet规范定义,在默认情况下(Servlet不是在分布式的环境中部署),Servlet容器对声明的每一个Servlet,只创建一个实例。如果有多个客户请求同时访问这个Servlet,Servlet容器如何处理这多个请求呢?答案是采用多线程,Servlet容器维护了一个线程池来服务请求。线程池实际上是等待执行代码的一组线程,这些线程叫做工作者线程(WorkerThread)。Servlet容器使用一个调度者线程(DispatcherThread)来管理工作者线程。当容器接收到一个访问Servlet的请求,调度者线程从线程池中选取一个工作者线程,将请求传递给该线程,然后由这个线程执行Servlet的service()方法。
servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。 使用servlet的基本流程如下: ·客户端(很可能是Web浏览器)通过HTTP提出请求。 ·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。 ·servlet将接收该HTTP请求并执行某种处理。 ·servlet将向Web服务器返回应答。 ·Web服务器将从servlet收到的应答发送给客户端。
Servlet可以用来扩充Java-enabledserver的基本功能,而今日最常使用的是增加webserver的互动性,它提供了强而有力且具效率的技术来取代CGI(commongatewayinterface)。传统的webserver只提供静态网页的服务,并不能产生动态网页。为了克服此限制,我们通常都会另外撰写程式,而这类为了产生动态网页或是扩充web-server的基本功能的程式便称为web applications。它可以简单的只做关键字搜寻,但其动作的复杂度也可以像电子签章般。为了解servlet的优点我们必须认识一些其它设计web application的方法。
servlet笔试题目1.说一说Servlet的生命周期?答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
这是一份关于2.1版Java Servlet API的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时存在使得Java Servlet API能够适应将来的其他请求-响应的协议。 这份文档以及刚才提及的Javadoc格式的文档都描述了这两个软件包,Javadoc格式的文档还描述了你应该如何使用这两个软件包中的所有方法。