Servlet基础知识

Servlet基础知识

主题

概念

Servlet生命周期

Servlet线程安全

JSP与Servlet 

参考资料

    

 

概念

       Servlet通常被称为服务端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。

       Servlet是个特殊的Java类,这个Java类必须继承HttpServlet。每个Servlet可以响应客户端的请求。Servlet提供不同的方法(doGet,doPost,doPut,doDelete)用于响应客户端不同类型的请求。

      自MVC规范出现后,Servlet的职责仅仅用于作为控制器使用,不再作为视图层角色使用。

Servlet生命周期

      Servlet在容器中运行时,Servlet实例的创建及销毁都不是由程序员决定的,而是由Web容器进行控制的,即Servlet的生命周期是由Web容器负责的。

      当启动Servlet容器时,容器首先去查找一个配置文件web.xml,这个文件中记录了核心提供服务的Servlet。每个Servlet被指定一个Servlet名,也就是这个Servlet实际对应的Java的完整class文件名。Servlet容器会为每个自动装入选项的Servlet创建一个实例。所以,每个Servlet类必须有一个公共的无参数的构造器。

      创建Servlet实例有两个时机:

客户端第一次请求某个Servlet时,容器创建该Servlet的实例;

Web应用启动时立即创建Servlet实例,即load-on-startup Servlet;

     每个Servlet的运行都遵循如下生命周期:

创建Servlet实例,由Web容器创建;

Web容器调用Servlet的init方法,对Servlet进行初始化,

Servlet容器初始化后,将一直存在于容器中,用于响应用户请求。根据客户端请求类型调用相应的方法,或者统一调用service方法。service方法是Servlet的核心。

Web容器决定销毁Servlet时,调用Servlet的destroy方法,通常在关闭Web应用的时候销毁Servlet。

 

Servlet线程安全

      Servlet体系结构是建立在Java多线程机制之上的。

      当Servlet被某个客户端第一次请求时,Servlet容器将会实例化这个Servlet。当有新的客户端请求该Servlet时,一般不会再实例化这个Servlet,也就是有多个线程在使用这个实例。

      Servlet的线程安全问题只有在大量的并发访问时才会显现出来,并且很难发现,因此在编写Servlet程序时要特别注意。线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径。

 

JSP与Servlet

     JSP的本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中之后,Web容器会将JSP编译成对应的Servlet。

      Servlet和JSP的区别

Servlet没有内置对象,JSP中的内置对象都必须由程序显式创建,是由Web容器创建的,进行默认初始化。

对于静态的HTML标签,Servlet必须使用页面输出流(out对象代表一个JSP页面输出流,通常用于在页面上输出变量值及常量)逐行创建。

Servlet主要用于控制逻辑,JSP侧重于视图。在MVC模式中,Servlet仅作为控制器使用,JSP则作为表现层技术,Model通常由JavaBean充当。

 

参考资料

          http://developer.51cto.com/art/200907/133827.htm

          轻量级J2EE企业应用实战

 

 

posted @ 2014-03-17 20:50  游园惊梦  阅读(165)  评论(0编辑  收藏  举报