现在的位置: 首页 > 综合 > 正文

J2EE——servlet

2014年04月28日 ⁄ 综合 ⁄ 共 2548字 ⁄ 字号 评论关闭

    servlet做为J2EE的13个规范之一,是开发javaweb程序必须的。当然与JNDI相比,servlet相对不是那么抽象,至少我们经常拿来去开发程序。没有遵循JNDI规范的程序可以说不能称之为J2EE企业级应用程序,但是这样的程序还是可以称得上是javaweb程序的。而servlet是javaweb开发所必须的技术之一。在J2EE的13个规范中,从抽象程度上来说servlet更相似于JDBC之类等,当然servlet与jsp之间有着必然的关系不用说。


servlet简介


    起初,servlet是在服务器上运行的小程序。这个词是在Java applet的环境中创造的。虽然,后者已经淘汰,但,servlet却发展的很好。

Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。而服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI(Common Gateway Interface))应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现(servlet)。其实CGI应用程序和servlet的功能是一样的,只是在实现方式上有所差异,我们可以将servlet想象成CGI应用程序。在通信量大的服务器上,servlet却更优异于CGI应用程序,servlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。

servlet在javaweb服务中的地位


 
  1.客户端发送请求至服务器端;
  2.服务器将请求信息发送至Servlet
  3.Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
  4.服务器将响应返回给客户端

    Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java ServletAPI的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为FacelessObject。一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。

servlet 生命周期

       
         
               
    对于一个成熟的javaweb开发人员来说,掌握servlet的生命周期是相当重要的。当一个客户端的请求到达Server时,Server服务器调用Servlet的init()方法(可配置为Server创建servlet实例时调用,在web.xml中<servlet>标签下配置<load-on-startup>标签,配置的值为整型,值越小servlet的启动优先级越高),Server创建一个请求对象和一个响应对象,用来处理客户端请求
和响应客户端请求,然后Server激活Servlet的service()方法,传递请求和响应对象作为参数
service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。
对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

servlet总结


  ● 可移植性(Portability)
    Servlet 皆是利用Java 语言来开发的,因此,延续Java 在跨平台上的表现,不论Server 的操
作系统是哪种,都能够将我们所写好的Servlet程序放在这些操作系统上执行。借助Servlet的优势,就可以真正达到执行一次随处运行的境界。
  ● 强大的功能
    Servlet 能够完全发挥Java API 的威力,包括网络和URL 存取、多线程(Multi-Thread)、影像
处理、RMI (Remote Method Invocation)、分布式服务器组件 (Enterprise Java Bean)、对象序列化 (Object Serialization) 等。若想写个网络目录查询程序,则可利用JNDI API;想连接数据库,则可利用JDBC,有这些强大功能的API
做后盾,Servlet 更能够发挥其优势。
  ● 性能
    Servlet 在加载执行之后,其对象实体(instance)通常会一直停留在Server 的内存中,若有请
求(request)发生时,服务器再调用Servlet 来服务,假若收到相同服务的请求时,Servlet会利用不同的线程来处理,不像CGI 程序必须产生许多进程 (process)来处理数据。在性能的表现上,大大超越以往撰写的CGI 程序。最后补充一点,那就是Servlet
在执行时,不是一直停留在内存中,
服务器会自动将停留时间过长一直没有执行的Servlet 从内存中移除,不过有时候也可以自行写程序来控制。至于停留时间的长短通常和选用的 服务器有关。
  ● 安全性
    Servlet也有类型检查(Type Checking)的特性,并且利用Java的垃圾收集(Garbage Collection)与没有指针的设计,使得Servlet 避免内存管理的问题。由于在Java的异常处理(Exception-Handling)机制下,Servlet能够安全地处理各种错误,不会因为发生程序上逻辑错误而导致整体服务器系统的毁灭。

抱歉!评论已关闭.