JBuilder2005 Servlet开发之开发必备

80酷酷网    80kuku.com

  servlet  用Servlet可以创建协议、平台无关的Web应用程序,Applet运行于浏览器的JRE中,而Servlet则运行于Web应用服务器的Servlet容器中,Servlet没有用户图形界面,Servlet和Web应用服务器的Servlet容器交互以接收请求返回响应。请求最先由Web应用服务器的Servlet容器处理并传给Servlet,Servlet通过Web应用服务器返回响应给客户端。客户端程序可以使用任何可向Web应用服务器发送请求的语言开发。

  Servlet最大的优势在于它的高性能,Servlet采用了和CGI截然不同的运行方式,首先Servlet在第一次初始化时装载并驻留在内存中,以后直接从内存中运行;其次,在默认情况下Servlet以单实例多线程的方式工作,一个新请求到达后,Servlet实例开启一个新的线程服务这个请求。

  Servlet 结构和线程安全

  所有的Servlet都直接或间接地实现javax.servlet.Servlet接口,这些接口规定了Servlet如何与Servlet容器进行通讯的方法,此外还定义了Servlet的生命周期。GenericServlet是和协议无关的通用Servlet,HttpServlet是专门针对HTTP协议开发的Servlet,Web应用程序的Servlet都直接继承HttpServlet。其类的继承体系如下图所示:


图 1 Servlet的类继承体系

  javax.servlet.Servlet接口包括了3个控制Servlet生命周期的方法,它们分别是:

  ·init(ServletConfig config)方法

  当Servlet初始化时,init()方法被调用执行初始化Servlet的工作,init()方法只被调用一次。Servlet初始化后就进入就绪态,随时准备响应客户端的请求。

  ·service(ServletRequest req, ServletResponse resp)方法

  Servlet容器调用service()方法处理请求并返回响应。ServletRequest和ServletResponse作为入参传给service(),ServletRequest封装了请求的信息而ServletResponse封装了响应的信息。

  ·destroy()方法

  Servlet容器可以在任何时候卸载Servlet,此时destory()被调用,你可以在这儿释放Servlet所占用的资源。

  而javax.servlet.http包中的类用于支持HTTP协议,创建HTML网页。HTTP协议是基于请求/响应工作模式,这些HTTP的请求方式包括:

  GET

  POST

  PUT

  DELETE

  HEAD

  TRACE

  CONNECT

  OPTIONS

  javax.servlet.http.HttpServlet定义了多个服务HTTP协议的方法,这些方法名为doXxx()的样式命名和HTTP请求方式名相呼应:如HTTP GET请求方式对应doGet(),而HTTP POST对应doPost()等。HttpServlet最初以service(HttpServletRequest req, HttpServletResponse resp)响应客户端请求,并依据HTTP的请求方式调用相应的doXxx()方法来处理。

  一般的,你仅需要覆盖doGet()或doPost()方法,如果希望得到更多的控制,你也可以覆盖doPut()和doDelete()方法,其他的方法一般很少使用。如果你使用JBuilder的Servlet向导,你可以具体指定创建哪些方法。

  特别需要指出的是Servlet是以多线程的方式工作的,Servlet可以同时处理多个请求。作为开发人员,需要注意Servlet成员变量的线程安全,在doGet()、doPost()中的局部域变量是线程安全的,而Servlet的成员变量则有线程安全的隐患。所以除非你有意需要应用这种特性,在一般情况下,不宜将一些可改写的变量定义成Servlet的成员变量,否则一定要采取线程同步的措施确保线程安全。

  Servlet的特性及适用场合

  虽然Servlet也可以用于生成动态网页,但这个功能已经逐渐让位给新锐JSP了,不过Servlet并没有因为江山代有才人而成为Java历史博物馆的古董,它依然身怀绝技笑傲江湖:

  ·自动启动

  一般情况下,JSP只有在客户端第一次调用后,方才进行编译并初始化,而Servlet则可以通过web.xml的<load-on-startup>配置,使其在Web容器启动时自动初始化。可使用Servlet这个特性完成Web应用程序的初始化工作:如下载字典表、控制表、初始化配置信息等,启动某个后台进程等。

  ·路径匹配映射

  Servlet可以通过web.xml 中<servlet-mapping>用通配符配置URI映射,对多个匹配的URI进行响应,而JSP只能通过一个具体的URI调用。这个特性可以使你在请求进入某个具体的页面前截获并处理它,许多Web应用框架,如Struts、Spring都利用了Servlet的这个特性,在此基础上创建构架。

  ·Servlet过滤器

  Servlet过滤器继承于javax.servlet.Servlet并实现javax.servlet.Filter的类,在请求到达服务程序前和响应发往客户端前进行加工处理。如果有大量的页面都需要进行相同的处理,则可以使用一个Servlet过滤器对此一并处理。如你可以用Servlet过滤器进行编码转换、或者为每个页面添加一个统一的标题头等。

  ·Servlet监聽器

  J2EE定义了多个Web事件监聽器接口,Servlet监聽器是继承javax.servlet.Servlet并实现这些事件监听接口的类。如果Web应用服务器对某个Web容器的事件感兴趣,就可以构造一个实现该事件监听接口的Servlet,以便在该事件发生时做相应的处理。灵活使用Servlet监聽器,可以使一些原来很难实现的操作变得易如反掌。

  此外,如果一个动态网页的页面展现逻辑少,而业务处理逻辑多,如一个计算圆周率并返回结果页面的请求,这时使用Servlet比JSP更适合。所以需要创建一个动态网页,在到底使用Servlet还是JSP的问题上举棋不定时,请这记住下面这句经典的话:Servlet是包含HTML代码的Java程序,而JSP是包含Java代码的HTML网页。

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: